我有一个不容易弄清楚的情况,我想我会在这个论坛上询问其他人是否有建议。
我在 Windows Server 2008R2 Enterprise 上运行 SQL Server 2008 R2 Standard SP3。
数据库需要一些维护,事后我需要在另一台服务器上恢复。我有一个完整的数据库备份,使用 COPY_ONLY 加上一组 4 个 tlog 备份。
- 在开始之前,创建 tlogbackup1
- 从
FULL
恢复BULK_LOGGED
模式转变 - 添加新文件组
- 将文件添加到新文件组
- 将 newfilegroup 设置为默认值
- 选择表(在新文件组上)
- 删除原始表
- 删除原始文件
- 删除原始文件组
- 更改新表的名称以匹配原始表
- 更改新文件组的文件名以匹配原始文件组
- 更改目录中的文件名以匹配原始文件名
- 在操作系统级别更改文件名以匹配原始文件名
- 将默认文件组设置为原始文件组
- 使数据库联机
- 从
BULK_LOGGED
恢复FULL
模式转变 - 完成所有步骤后,创建 tlogbackup2
由于还原服务器上的驱动器号更改,所有备份的还原都必须使用 WITH MOVE。
恢复步骤:
RESTORE database SomeDB FROM DISK = 'D:\REPRO\SomeDB.bak'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
RESTORE LOG SomeDB FROM DISK = 'D:\REPRO\tlogbackup1.trn'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
RESTORE LOG SomeDB FROM DISK = 'D:\REPRO\tlogbackup2.trn'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
最终的 tlog 恢复达到 100%,然后失败并出现错误 3456:
为数据库“SomeDB”、文件 1 上的文件“SystemData”处理了 368 页。
为数据库“SomeDB”、文件 1 上的文件“SystemDataPDS”处理了 7656520 页。
为数据库“SomeDB”处理了 172430 页,文件 1 上的文件“SystemData_log”。
消息 3456,级别 16,状态 1,第 1 行
无法重做日志记录 (210388:123648:232),事务 ID (0:1016710921),页面 (4:8088),数据库“SomeDB”(数据库 ID 6) . 页面:LSN = (0:0:1),类型 = 11。日志:操作码 = 4,上下文 11,PrevPageLSN:(210388:122007:1)。从数据库的备份中恢复,或修复数据库。Msg 3013, Level 16, State 1, Line 1 RESTORE LOG 异常终止。
只是为了验证完整的 db 备份是否正常,我将其还原为 run CHECKDB
,并且没有错误。
欢迎所有反馈。
提前致谢,
内德·奥特