一些背景知识:我正在将我的 SQL Server 数据库迁移到一台新机器,并且我编写了一些 Powershell 脚本来异步将完整备份和事务日志发送/应用到新服务器,但我的问题是关于尾部日志备份。最终,我需要我的源数据库对用户不可用,这样我就可以备份尾部日志并将其应用于新实例。
如果我执行如下操作,活动连接会发生什么情况:
Backup-SqlDatabase -ServerInstance $serverInstance -Database $db -BackupAction Log -NoRecovery -Credential $credential -BackupFile $backupFile
或者类似地这样:
BACKUP LOG <db> TO DISK = <path> WITH NORECOVERY
如果我使用 NORECOVERY 选项,我知道我的数据库将不可用,但未提交的事务会立即回滚吗?或者数据库是否会继续进行活动事务并拒绝新的连接?
我很好奇这里发生了什么,但如果能提供与我的流程相关的任何其他建议,我将不胜感激。提前致谢!
答案1
执行尾部日志备份将导致数据库无法访问 (NORECOVERY) 或只读 (STANDBY)。如果我需要提取日志文件的活动部分,这是意料之中的。如果您不执行此操作,仍然可以写入日志文件,并且会失去一致性。
如果您使用 STANDBY,数据库将被标记为只读,您仍然可以获取日志的尾部。如果可能,另一种更常见的迁移选项是仅设置到远程服务器的日志传送。设置日志传送将允许数据在您仍在进行最后准备时在远程实例上保持最新状态。然后,最后一步只需进行最后一次尾部日志备份,将较小的文件移动到远程服务器,然后翻转所有内容。