为可用性组手动准备辅助数据库 (SQL Server)
本主题介绍如何使用 SQL Server Management Studio、Transact-SQL 或 PowerShell 为 SQL Server 2014 中的 AlwaysOn 可用性组准备辅助数据库。 准备辅助数据库需要两个步骤:(1) 使用 RESTORE WITH NORECOVERY 将主数据库的最近数据库备份和后续的日志备份还原到承载辅助副本的每个服务器实例;(2) 将还原的数据库联接到可用性组。
提示
如果您具有现有的日志传送配置,则可能能够将日志传送主数据库与其一个或多个辅助数据库一起转换为 AlwaysOn 主数据库和一个或多个 AlwaysOn 辅助数据库。 有关详细信息,请参阅 从日志传送迁移到 AlwaysOn 可用性组(SQL Server)的先决条件。
开始之前:
若要准备辅助数据库,请使用:
跟进:准备辅助数据库后
开始之前
先决条件和限制
确保计划放置数据库的系统的磁盘驱动器空间足以存储辅助数据库。
辅助数据库的名称必须与主数据库的名称相同。
使用 RESTORE WITH NORECOVERY 执行每个还原操作。
如果辅助数据库需要位于与主数据库不同的文件路径中(包括驱动器号),还原命令还必须对每个数据库文件使用 WITH MOVE 选项,将这些文件指定到辅助数据库的路径。
如果要逐个文件组地还原数据库,则要确保还原整个数据库。
还原数据库后,必须还原 (WITH NORECOVERY) 自上次还原的数据备份之后创建的各个日志备份。
建议
在 SQL Server独立实例上,我们建议,如有可能,给定辅助数据库的文件路径(包括驱动器号)应该与相应的主数据库的路径相同。 这是因为,如果在创建辅助数据库时移动了数据库文件,则随后在辅助数据库上执行的添加文件操作可能会失败,并导致该辅助数据库挂起。
准备辅助数据库之前,我们强烈建议您挂起针对可用性组中数据库的计划日志备份,直到完成辅助副本的初始化。
安全性
备份数据库时, TRUSTWORTHY 数据库属性 设置为 OFF。 因此,在新还原的数据库中,TRUSTWORTHY 始终为 OFF。
权限
默认情况下,为 sysadmin 固定服务器角色以及 db_owner 和 db_backupoperator 固定数据库角色的成员授予 BACKUP DATABASE 和 BACKUP LOG 权限。 有关详细信息,请参阅 BACKUP (Transact-SQL)。
如果服务器实例上不存在要还原的数据库,则 RESTORE 语句要求 CREATE DATABASE 权限。 有关详细信息,请参阅 RESTORE (Transact-SQL)。
使用 SQL Server Management Studio
注意
如果备份和还原文件路径在承载主要副本的服务器实例和承载次要副本的每个实例之间完全相同,则应该能够通过使用 新建可用性组向导、 将副本添加到可用性组向导或 将数据库添加到可用性组向导创建辅助数据库。
准备辅助数据库
除非您已经有了主数据库的最近数据库备份,否则需要创建新的完全或差异数据库备份。 最好将此备份和任何后续的日志备份放到推荐的网络共享上。
至少为主数据库创建一个新日志备份。
在承载辅助副本的服务器实例上,依次还原主数据库的完整数据库备份(还可以选择还原差异备份)以及所有后续的日志备份。
在 RESTORE DATABASEOptions 页上,选择“ 保留数据库不可操作”,并且不回滚未提交的事务。可以还原其他事务日志。(还原与 NORECOVERY) 。
如果主数据库与辅助数据库的文件路径不同,例如,如果主数据库位于驱动器“F:”,但承载辅助副本的服务器实例缺少 F: 驱动器,请在 WITH 语句中包括 MOVE 选项。
若要完成辅助数据库的配置,您需要将辅助数据库联接到可用性组。 有关详细信息,请参阅将辅助数据库联接到可用性组 (SQL Server)。
注意
有关如何执行这些备份和还原操作的信息,请参阅本节后面的 相关备份和还原任务。
相关备份和还原任务
创建数据库备份
创建日志备份
还原备份
“使用 Transact-SQL”
准备辅助数据库
注意
有关此过程的示例,请参阅本主题前面的 示例 (Transact-SQL)。
除非您已经有了主数据库的最近完整备份,否则请连接到承载主副本的服务器实例并创建完整数据库备份。 最好将此备份和任何后续的日志备份放到推荐的网络共享上。
在承载辅助副本的服务器实例上,依次还原主数据库的完整数据库备份(还可以选择还原差异备份)以及所有后续的日志备份。 使用 WITH NORECOVERY 执行每个还原操作。
如果主数据库与辅助数据库的文件路径不同,例如,如果主数据库位于驱动器“F:”,但承载辅助副本的服务器实例缺少 F: 驱动器,请在 WITH 语句中包括 MOVE 选项。
在执行完必要的日志备份之后,如果对主数据库进行了任何日志备份,还必须将这些备份复制到承载辅助副本的服务器实例上并将每个日志备份都应用到辅助数据库,以最早的备份开始进行,并始终使用 RESTORE WITH NORECOVERY。
注意
如果主数据库刚刚创建,则不会存在日志备份;或者如果恢复模式刚刚从“简单”更改为“完整”,则尚未进行任何日志备份。
若要完成辅助数据库的配置,您需要将辅助数据库联接到可用性组。 有关详细信息,请参阅将辅助数据库联接到可用性组 (SQL Server)。
注意
有关如何执行这些备份和还原操作的信息,请参阅本主题后面的 相关备份和还原任务。
Transact-SQL 示例
下面的示例准备一个辅助数据库。 此示例使用 AdventureWorks2012 示例数据库,该数据库默认使用简单的恢复模式。
若要使用 AdventureWorks2012 数据库,请将其修改为使用完整恢复模式:
USE master; GO ALTER DATABASE MyDB1 SET RECOVERY FULL; GO
将数据库的恢复模式从 SIMPLE 更改为 FULL 之后,创建一个完整备份,以用于创建辅助数据库。 由于恢复模式已更改,因此指定了 WITH FORMAT 选项来创建新的介质集。 这对区分完整恢复模式下的备份与以前在简单恢复模式下创建的备份非常有用。 为了实现此示例的目的,在数据库所在的驱动器上创建备份文件 (C:\AdventureWorks2012.bak)。
注意
对于生产数据库,应始终备份到单独的设备。
在承载主副本的服务器实例 (
INSTANCE01
) 上,按如下方式创建主数据库的完整备份:BACKUP DATABASE MyDB1 TO DISK = 'C:\MyDB1.bak' WITH FORMAT GO
将完整备份复制到承载辅助副本的服务器实例上。
使用 RESTORE WITH NORECOVERY 在承载辅助副本的服务器实例上还原完整备份。 还原命令取决于主数据库与辅助数据库的路径是否相同。
如果路径相同:
在承载辅助副本的计算机上,按如下方式还原完整备份:
RESTORE DATABASE MyDB1 FROM DISK = 'C:\MyDB1.bak' WITH NORECOVERY GO
如果路径不同:
如果辅助数据库的路径与主数据库的路径不同(例如,它们所在的驱动器号不同),则创建辅助数据库要求还原操作包含 MOVE 子句。
重要
如果主数据库与辅助数据库的路径名称不同,则无法添加文件。 原因是在接收添加文件操作所需的日志时,承载辅助副本的服务器实例会尝试将新文件放在主数据库所用的路径中。
例如,以下命令还原驻留在 SQL Server 2014 的默认实例的数据目录中的主数据库的备份,C:\Program Files\Microsoft SQL Server\MSSQL12。MSSQLSERVER\MSSQL\DATA。 还原数据库操作必须将数据库移动到名为 的 SQL Server 2014 远程实例(AlwaysOn1)的数据目录,该实例将辅助副本托管在另一个群集节点上。 在那里,数据和日志文件将还原到 C:\Program Files\Microsoft SQL Server\MSSQL12。ALWAYSON1\MSSQL\DATA 目录。 该还原操作使用 WITH NORECOVERY 令辅助数据库保持还原状态。
RESTORE DATABASE MyDB1 FROM DISK='C:\MyDB1.bak' WITH NORECOVERY, MOVE 'MyDB1_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.ALWAYSON1\MSSQL\DATA\MyDB1_Data.mdf', MOVE 'MyDB1_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.ALWAYSON1\MSSQL\DATA\MyDB1_Data.ldf'; GO
还原完整备份之后,必须在主数据库中创建日志备份。 例如,以下 Transact-SQL 语句将日志备份到名为 E:\MyDB1_log.bak 的备份文件:
BACKUP LOG MyDB1 TO DISK = 'E:\MyDB1_log.bak' GO
在将数据库联接到辅助副本之前,必须应用必要的日志备份(以及所有后续日志备份)。
例如,以下 Transact-SQL 语句从 C:\MyDB1.bak还原第一个日志:
RESTORE LOG MyDB1 FROM DISK = 'E:\MyDB1_log.bak' WITH FILE=1, NORECOVERY GO
如果在数据库联接到辅助副本之前进行了任何其他日志备份,则还必须使用 RESTORE WITH NORECOVERY 按顺序将所有这些日志备份还原到承载辅助副本的服务器实例上。
例如,以下 Transact-SQL 语句从 E:\MyDB1_log.bak还原另外两个日志:
RESTORE LOG MyDB1 FROM DISK = 'E:\MyDB1_log.bak' WITH FILE=2, NORECOVERY GO RESTORE LOG MyDB1 FROM DISK = 'E:\MyDB1_log.bak' WITH FILE=3, NORECOVERY GO
使用 PowerShell
准备辅助数据库
如果您需要创建主数据库的最近备份,请将目录 (
cd
) 改为承载主副本的服务器实例。使用
Backup-SqlDatabase
cmdlet 创建每个备份。切换目录 (
cd
) 到承载辅助副本的服务器实例。若要还原数据库以及每个主数据库的日志备份,请使用
restore-SqlDatabase
cmdlet 并指定NoRecovery
还原参数。 如果文件路径在承载主副本和目标辅助副本的计算机之间存在差异,还要使用RelocateFile
还原参数。注意
若要查看 cmdlet 的语法,请使用
Get-Help
SQL Server PowerShell 环境中的 cmdlet。 有关详细信息,请参阅 Get Help SQL Server PowerShell。若要完成辅助数据库的配置,您需要将其联接到可用性组。 有关详细信息,请参阅将辅助数据库联接到可用性组 (SQL Server)。
设置和使用 SQL Server PowerShell 提供程序
备份和还原脚本和命令的示例
下面的 PowerShell 命令将完整的数据库备份和事务日志备份到网络共享,并自该共享位置还原这些备份。 此示例假定数据库还原到的文件路径与数据库备份到的文件路径相同。
# Create database backup
Backup-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.bak" -ServerInstance "SourceMachine\Instance"
# Create log backup
Backup-SqlDatabase -Database "MyDB1" -BackupAction "Log" -BackupFile "\\share\backups\MyDB1.trn" -ServerInstance "SourceMachine\Instance"
# Restore database backup
Restore-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.bak" -NoRecovery -ServerInstance "DestinationMachine\Instance"
# Restore log backup
Restore-SqlDatabase -Database "MyDB1" -BackupFile "\\share\backups\MyDB1.trn" -RestoreAction "Log" -NoRecovery -ServerInstance "DestinationMachine\Instance"
跟进:准备辅助数据库之后
若要完成辅助数据库的配置,您需要将新还原的数据库联接到可用性组。 有关详细信息,请参阅 将辅助数据库联接到可用性组 (SQL Server)。
另请参阅
AlwaysOn 可用性组概述 (SQL Server)
BACKUP (Transact-SQL)
RESTORE 参数 (Transact-SQL)
RESTORE (Transact-SQL)
解决失败的添加文件操作问题(AlwaysOn 可用性组)