为什么TO DISK = N’NUL’
呢
我不明白您为什么使用TO DISK = N’NUL’
:
BACKUP
DATABASE [test0916aj8CJ] TO DISK = N’NUL’
如果执行此操作,则备份将保存到NUL
,即=到无处/无处,并且由于其文件不存在而无法使用。
虽然NUL
也可以用作LOG备份的目标,但也不应使用它,尤其是在Prod服务器上,因为LOG将会丢失并且备份链将断开。(〜类似于SHRINKFILE
)
日志备份
在将数据库添加到组之前,您必须准备它。当您要准备辅助数据库时,必须至少备份并还原1个事务日志。镜像使用它来确定哪些事务已在辅助数据库上同步,哪些事务尚未与主数据库同步。
因此,您必须在主数据库上备份事务日志:
BACKUP LOG [test0916aj8CJ] TO DISK = N'....bak'
WITH COPY_ONLY, FORMAT, INIT, NAME = N'test0916aj8CJ-Transaction Log Backup', STATS = 10
COPY_ONLY
必须使用该选项。确保在日志备份结束时日志不会被截断。
主数据库备份链
但是,您不能单独还原日志备份,这意味着没有备份链(另请参阅“ Kin答案”)。这意味着必须在执行完整数据库备份(如果需要,+可选的差异备份)之后进行事务日志备份。
由于该COPY_ONLY
选件不会破坏备份链,因此也不会创建备份链。该COPY_ONLY
选项不能用于数据库备份。
备份顺序:
- 没有
COPY_ONLY
选项的完整数据库备份
- 可选的差异备份
- 1个带有
COPY_ONLY
选项的日志备份
- 必要时进行另一个(或更多)LOG备份...
还原辅助数据库
然后,必须在辅助数据库上还原数据库备份(+差异)。
必须使用该NORECOVERY
选项将其还原,因为一旦还原了完整备份,您还想还原日志备份。
最后,您将还原LOG Backup。您仍然需要使用该NORECOVERY
选项,因为镜像将保持到位还原事务。
- 使用
NORECOVERY
选项还原完整备份
- 使用
NORECOVERY
选项还原DIFF备份
- 使用
NORECOVERY
选项按顺序还原所有LOG备份
让我们放在一起(适应您的环境)
在主服务器上运行:
USE master
Go
BACKUP DATABASE [test0916aj8CJ] TO DISK = N'....bak'
WITH FORMAT, INIT, NAME = N'test0916aj8CJ-Full Database Backup', STATS = 10
GO
BACKUP LOG [test0916aj8CJ] TO DISK = N'....bak'
WITH COPY_ONLY, FORMAT, INIT, NAME = N'test0916aj8CJ-Transaction Log Backup', STATS = 10
GO
在辅助服务器上运行:
USE master
Go
RESTORE DATABASE [test0916aj8CJ] FROM DISK = N'....bak'
WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO
RESTORE LOG [test0916aj8CJ] FROM DISK = N'....bak'
WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
然后,您可以继续将新的辅助数据库添加到可用性组中。
可选动作
- 最好将DISK选项设置为可从主服务器和辅助服务器访问的共享文件夹。
- 另外,最好将数据库文件存储在主服务器和辅助服务器上的相似磁盘和位置上。