1

我一直在寻找整个互联网,我找不到我的问题可接受的解决方案,我想知道是否有一个没有妥协的解决方案......

我不是 DBA,但我是一个单人团队,在一个巨大的网站上工作,没有额外的资金用于额外的机构,所以我正在尽我所能。

我们的备用计划很糟糕,我很难改进它。目前,有两台服务器运行 SQL Server 2005。我有一个似乎运行良好的镜像数据库(无见证)。我在中午和午夜进行完整备份。这些由我们的服务提供商每晚备份到磁带上,我每周将备份文件刻录到 dvd 以保留旧记录。最终我想切换到日志传送,因为如果没有见证服务器,镜像似乎毫无意义。

问题是事务日志不断增长。从我所做的研究来看,我似乎无法截断镜像数据库的日志文件。那么如何阻止文件增长!?

基于此网页,我尝试了以下操作:

USE dbname
GO
CHECKPOINT
GO
BACKUP LOG dbname TO DISK='NULL' WITH NOFORMAT, INIT, NAME = N'dbnameLog Backup', SKIP, NOREWIND, NOUNLOAD
GO
DBCC SHRINKFILE('dbname_Log', 2048)
GO

但这没有用。我发现的所有其他内容都表明我需要在运行备份日志命令之前禁用镜像才能使其工作。

我的问题 (TL;DR)

如何在不禁用镜像的情况下缩小我的事务日志文件?

4

11 回答 11

5

好吧,从技术上讲,可以缩小镜像 LOG。麻烦的是用 truncate_only 备份日志。镜像不接受它。所以一种方法是将日志备份到磁盘:

use [DATABASE_NAME]
checkpoint
BACKUP LOG [DATABASE_NAME] TO DISK =  'C:\LOG_BACKUPS\DATABASE_NAME'
dbcc shrinkfile(DATABASE_NAME_Log,1)

这是我们当前维护计划的一部分,它已经运行了大约 2 年,没有出现任何问题。

于 2012-03-28T15:16:56.763 回答
1

如果镜像服务器实例落后于主体服务器实例,则活动日志空间量将会增加。在这种情况下,您可能需要停止数据库镜像,进行日志备份以截断日志,将该日志备份应用到镜像数据库并重新启动镜像,这不是您希望的答案,我知道 =(

要缩小我们的文件,您可以尝试以下脚本:

exec sp_dboption DBName, 'trunc. 登录 chkpt.', 真正的检查点 DBCC SHRINKFILE (DBNameFileName, 500); exec sp_dboption DBName, 'trunc. 登录 chkpt。',假

希望这可以帮助。

于 2009-06-23T15:31:47.477 回答
1

我想我应该真的回答这个问题,因为它被遗忘了。

事实证明,如果数据库被镜像,除非您停用镜像,否则您无法缩小 t-log。 如果我错了,请纠正我,但我没有找到有效的解决方案!

如果您只有两台服务器,那么日志传送就是您要走的路。如果没有见证服务器,镜像几乎毫无意义,因为故障转移的唯一方法是从主体...如果在主体崩溃时无法进行故障转移,则有点违背了拥有镜像的目的。

如果有人愿意就此事分享更多信息或建议,我将很高兴听到他们的声音。

于 2009-07-29T14:21:54.000 回答
1
  1. 使用 .. 关闭镜像伙伴ALTER [DatabaseName] SET PARTNER OFF
  2. 在主体上进行事务日志备份..BACKUP LOG [DatabaseName] TO DISK='Drive:\DatabaseName_log_datetime.trn'
  3. 将此复制DatabaseName_log_datetime.trn到镜像服务器上的任何位置。
  4. NoRecovery使用option..on 镜像数据库 还原此事务日志。RESTORE LOG [DatabaseName] FROM DISK ='Drive:\DatabaseName_log_datetime.trn'
  5. 收缩主体和镜像服务器上的日志文件。
  6. 再次在主体上进行事务日志备份..并使用无恢复选项还原此事务日志..在镜像服务器上的镜像数据库上。
  7. 配置镜像安全。
于 2011-12-05T17:40:43.387 回答
1

测试了这篇文章中的一些建议,我发现在完全备份、检查点命令和事务日志备份之后,可以缩小主体数据库事务日志大小。然后,镜像数据库事务日志大小与主体收缩大小同步。

USE [DATABASE_NAME];
BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;
CHECKPOINT;
WAITFOR DELAY '00:00:02';
BACKUP LOG [DATABASE_NAME] TO DISK = 'E:\Backup\DATABASE_NAME_TL.trn';
WAITFOR DELAY '00:00:02';
DBCC SHRINKFILE('DATABASE_NAME_log', 500);

使用 OSQL 可以在 DOS 下批量运行上述 SQL 命令,如果批量运行,WAITFOR DELAY 是必须的,例如

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe -E -S "DATABASE_SERVER" -Q "USE [DATABASE_NAME]; BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_FULL.bak' WITH FORMAT;"

我认为不同的备份也应该工作,但没有测试。下面的 diff 备份命令将追加数据而不是覆盖。

BACKUP DATABASE [DATABASE_NAME] TO DISK='E:\Backup\DATABASE_NAME_DIFF.bak' WITH DIFFERENTIAL;
于 2013-04-19T08:05:57.070 回答
0

唯一的方法:1)停止镜像 2)压缩主体上的文件 3)主体备份完成,+事务 jrnl 4)停止镜像服务器,删除 mirrorDatabase 的 mdf 和 ldf 5)启动 mirrorser 并删除 mirrorDatabase 6)没有恢复备份的恢复3) 在 mirroServer 上 7) 重新安装镜像 Ouf !

于 2009-08-14T06:47:20.307 回答
0

确实,一旦数据库日志太大,您就无法缩小数据库日志 - 那时我认为您唯一的选择是打破镜像,缩小并重新创建。此外,尽管存在是否应该只对两台服务器使用镜像的问题,但我可以说的是,如果你这样做了,那么请定期备份事务日志。该空间将被释放,从而允许 MSSQL 重新使用日志文件中的死空间。这不会缩小任何东西,但它确实满足了阻止它增长的要求。

然后,您需要做的就是定期删除文件备份。例如,您可以这样做:

USE your_database
GO
BACKUP LOG your_database TO DISK = 'x:\your_backup_filepath\your_database.tlog'
GO

如果可以的话,可以在几个小时内完成。

于 2010-01-06T16:23:21.023 回答
0

我不知道为什么这有效,只是它确实有效。我在查询窗口中将其作为一个块运行。自行决定使用。如果microsoftie会发表评论,那当然会很好。

use my_database
dbcc shrinkfile ( my_database_log, 1000 )
use my_database
dbcc shrinkfile ( my_database_log, 1000 )
alter database my_database
  modify file ( 
    name = my_database_log, 
    size = 1000MB
  )
于 2010-05-22T12:55:23.300 回答
0

如果不将镜像数据库从镜像中取出,您就无法真正对镜像数据库执行任何操作,只要它不是主体数据库即可。

如果你在主服务器上备份你的数据库,然后做一个收缩,应该怎么做。即你的维护计划应该包括一些收缩工作。这些更改应该通过同步自动传递到辅助(镜像)服务器。

如果要进行仅收缩事务文件的收缩,可以使用以下 T-SQL:

USE [your_db_name]
GO
DBCC SHRINKFILE (N'your_db_name_logfile' , 0, TRUNCATEONLY)
GO

然后,您只需为每个数据库使用该片段并在备份运行后立即运行它。

这应该使主体服务器上的日志文件保持较小,从而在辅助/镜像服务器上保持较小。

我希望这有帮助。

顺便提一句。如果您已经到了磁盘上没有空间用于日志文件的地步,唯一的选择是将其退出镜像模式,将数据库设置为简单恢复模式,缩小日志文件,将其设置为完整再次恢复模式并再次设置镜像(使用数据库 og 日志文件的备份在镜像服务器上恢复)。

此外,如果问题是许可,您可以使用 SQL Express 作为见证服务器。它不应该需要太多的资源,所以你可以使用一个网络服务器,如果这是一个网络应用程序。请记住也要查看见证服务器的日志文件。

于 2011-03-01T11:33:48.183 回答
0

可以使用镜像缩小数据库的事务文件,必须执行备份,因为有活动虚拟日志文件: http ://www.xoowiki.com/Article/SQL-Server/tronquer-journal-de-log-sur- base-en-miroir-499.aspx

于 2011-03-14T09:53:04.340 回答
-1

**收缩可以在镜像中完成,我们不能做的是截断日志,因为日志是发送到镜像服务器然后主体等待确认的内容。

该问题的解决方案是备份日志而不截断,然后收缩日志文件,或者您甚至可以忽略收缩。如果这不起作用,请在备份日志之前尝试检查点。这应该工作...

于 2012-06-21T07:39:23.310 回答