Rac*_*hel 8 sql-server-2005 sql-server backup mirroring transaction-log
我们在周末设置了数据库镜像,但忘记重新启用备份事务日志的作业。当我今天早上进来时,事务日志已经膨胀到 58GB,并且占用了大部分驱动器空间。
我将事务日志手动备份到磁盘以使数据库再次运行,但是运行 DBCC SHRINKFILE 似乎并没有减少事务日志文件的物理大小。
DBCC SHRINKFILE (N'MyDatabaseName_Log', 1000)
Run Code Online (Sandbox Code Playgroud)
如果我使用
DBCC SQLPERF(LOGSPACE)
Run Code Online (Sandbox Code Playgroud)
我可以看到只有 22% 的当前日志正在被使用
数据库名称 日志大小(MB) 已用日志空间 (%) 状态 我的数据库名称 55440.87 22.38189 0
如果我log_reuse_wait_desc
在 sys.databses 中签出,我看到的唯一记录是DATABASE_MIRRORING
,所以我猜测镜像在为什么日志文件的物理大小不会缩小方面发挥作用?
SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = N'MyDatabaseName';
Run Code Online (Sandbox Code Playgroud)
我还注意到我的主要数据库镜像状态是暂停,并且尝试恢复它立即失败并出现以下错误:
数据库“MyDatabaseName”的远程镜像伙伴遇到错误 5149,状态 1,严重性 25。数据库镜像已暂停。解决远程服务器上的错误并恢复镜像,或删除镜像并重新建立镜像服务器实例。
镜像服务器上的错误日志也包含此错误,但也包含有关日志文件驱动器已满的错误
MODIFY FILE 在尝试扩展物理文件时遇到操作系统错误 112(磁盘空间不足。)。
和
F:\Databaselogs\MyDatabaseName_1.ldf: 遇到操作系统错误 112(磁盘空间不足。)。
主体服务器在日志文件驱动器上有 60GB(这里还有其他数据库托管),而镜像服务器只有 45GB。
备份日志文件使数据库再次可用,但是我还想减小磁盘上物理日志文件的大小,并恢复镜像。
如何在不影响镜像或备份链的情况下缩小物理事务日志文件的大小?
我正在运行 SQL Server 2005
据我所知,我不能。
我相信大部分日志文件正在等待镜像到镜像服务器,但镜像已关闭并且无法恢复,因为镜像事务日志也已增长到占用了磁盘上的所有空间。
DBCC SHRINKFILE
一旦我删除镜像,该命令会正确收缩物理日志文件,并且log_reuse_wait_desc
会返回等待状态,这一事实进一步支持了这一理论。LOG_BACKUP
我无法缩小镜像服务器上的日志文件,因为它充当镜像并且无法打开,所以我认为镜像是不可恢复的。
因此,我将完全删除镜像,然后重新设置所有内容(对于 300GB 数据库来说,这个过程非常缓慢)。这次,我将在启动镜像之前确保事务日志大小相当小,并且一旦镜像备份并运行,事务日志备份就会运行。
我还将对生产服务器上的事务日志可以增长的大小设置一个限制,因此镜像不会尝试将其事务日志增长到超出磁盘上可用的大小。