管理 SQL 2008 数据库镜像的工具?

管理 SQL 2008 数据库镜像的工具?

我们将把位于 SQL 2000 单个实例上的大约 20 个数据库移动到具有数据库镜像的 SQL 2008 r2 环境中。

我正在寻找一种工具或脚本,帮助我轻松地管理这 20db 到这个新镜像环境的转换和管理。设置每个数据库有很多步骤,我希望尽可能地实现自动化。

编辑:这是我手动执行的步骤:

  1. 在新的 sql 2008 服务器上创建与旧 sql 2000 服务器上相同的用户名/密码。然后将这些用户/密码同步到具有相同 SSID 的其他 sql 2008 服务器上,这样当我们进行数据库备份和恢复时,它们就会匹配。
  2. 对每个 sql 2000 db进行备份。
  3. 将它们复制到服务器 A。
  4. 将备份恢复到服务器A。
  5. 从服务器 a 备份,复制到服务器 b,在那里恢复。
  6. 运行镜像“配置安全性”向导。
  7. 开始镜像。

我很想能够编写脚本或有一个工具可以帮我完成这件事。谢谢!保罗

答案1

我创建了一系列批处理文件和 SQL 脚本来执行以下步骤。我只包含了镜像脚本,但其他引用的 SQL 脚本都是非常基本的 SQL 命令(除了恢复数据库脚本,由于我实现它的方式,这个脚本有点棘手),创建它们将使您有机会更改 SQLCMD 模式变量。如果您想在 Twitter 上直接给我发消息(@jcumberland)并附上您的电子邮件地址,我可以向您发送全套脚本。我还删除了文件名的完整路径。

  • 设置数据库的恢复模式
  • 删除镜像
  • 删除镜像数据库
  • 备份数据库
  • 备份日志
  • 复制bak文件
  • 复制 trn 文件
  • 恢复数据库备份
  • 恢复日志备份
  • 删除 bak 文件
  • 删除 trn 文件
  • 在主服务器和镜像服务器之间设置镜像
/*---------------------------------------------------------------------*/
-- 替换这些值
/*---------------------------------------------------------------------*/











/*---------------------------------------------------------------------*/
-- 批处理文件 1,调用实用程序批处理文件
/*---------------------------------------------------------------------*/
@echo 关闭

设置 PRIMARYHOST=
设置 MIRRORHOST=
设置 INST=
设置驱动器=
设置 DRTARGETDIR="%DRIVE%:\MSSQL.1\MSSQL\DATA\"
设置 LOGDIR="%DRIVE%:\MSSQL.1\MSSQL\DATA\"
设置端口=
设置 PRIMARYINST=%PRIMARYHOST%\%INST%
设置 MIRRORINST=%MIRRORHOST%\%INST%

@echo 开启


调用 drdbsetup.bat %PRIMARYHOST% %MIRRORHOST% %PRIMARYINST% %MIRRORINST% %DRIVE% %DRTARGETDIR% %PORT% %LOGDIR%

暂停







/*---------------------------------------------------------------------*/
-- 批处理文件 2 - 调用 SQL 脚本
/*---------------------------------------------------------------------*/
rem——将恢复模式设置为完整
sqlcmd /E /S%3 -i SetRecoveryMode.sql -v DATABASE="%8"

rem——删除镜像
sqlcmd /E /S%3 -i MirroringRemove.sql -v DATABASE="%8"

sqlcmd /E /S%4 -i MirroringRemoveMirror.sql -v DATABASE="%8"

rem——完整备份
sqlcmd /E /S%3 -i BackupDatabaseFull.sql -v BACKUPPATH="%5:\" -v DATABASE=%8

rem——日志备份
sqlcmd /E /S%3 -i BackupDatabaseLog.sql -v BACKUPPATH="%5:\" -v DATABASE=%8

rem——将备份文件复制到镜像
复制 \\%1\%5$\*.bak %6 /y
复制 \\%1\%5$\*.trn %6 /y

rem——从主文件中删除备份文件
删除\\%1\%5$\*.bak
删除 \\%1\%5$\*.trn

rem——从备份目录恢复数据库
sqlcmd /E /S%4 -i RestoreDatabase.sql -v BKDIR=%6 -v DATADIR=%6 -v LOGDIR=%9

rem——恢复数据库日志
sqlcmd /E /S%4 -i RestoreLog.sql -v BACKUPPATH=%6 -v DATABASE=%8

rem——从镜像中删除备份文件
删除 %6\*.bak
删除 %6\*.trn

rem——设置镜像
sqlcmd /E /S%4 -i MirroringSetup.sql -v PRINCIPAL="%3" -v MIRROR="%4" -v PRINCIPAL_DNS="%1." -v MIRROR_DNS="%2.yourdomain.local" -v DATABASE_NAME="%8" -v PORT=%7







/*---------------------------------------------------------------------*/
-- 镜像设置.sql
/*---------------------------------------------------------------------*/


/*-----------------------------------------------------*/
-- 按主体运行
/*-----------------------------------------------------*/
:连接$(PRINCIPAL)

-- 创建端点
如果不存在(从 sys.endpoints 中选择 *,其中 name = 'Mirroring')
开始
    创建端点镜像
    授权 []
    状态 = 以 TCP 方式启动 (
        侦听器端口 = $(端口)
        ,监听器 IP = 全部
    对于数据镜像(
        角色 = 合作伙伴
        ,身份验证 = Windows 协商
        ,加密 = 所需算法 RC4
结尾

/*-----------------------------------------------------*/
-- 在镜像上运行
/*-----------------------------------------------------*/
:连接$(镜像)

-- 创建端点
如果不存在(从 sys.endpoints 中选择 *,其中 name = 'Mirroring')
开始
    创建端点镜像
    授权 []
    状态 = 以 TCP 方式启动 (
        侦听器端口 = $(端口)
        ,监听器 IP = 全部
    对于数据镜像(
        角色 = 合作伙伴
        ,身份验证 = Windows 协商
        ,加密 = 所需算法 RC4
结尾

-- 建立镜像伙伴关系
更改数据库 [$(DATABASE_NAME)] 设置合作伙伴 = N'TCP://$(PRINCIPAL_DNS):$(PORT)'

-- 删除镜像监控
如果存在(从 msdb..sysjobs 中选择 *,其中 [name] ='数据库镜像监视器作业')
开始
    EXEC sp_dbmmonitordropmonitoring
结尾

-- 设置镜像监控
EXEC sys.sp_dbmmonitoraddmonitoring -- 默认为 1 分钟


/*-----------------------------------------------------*/
-- 按主体运行
/*-----------------------------------------------------*/
:连接$(PRINCIPAL)

-- 建立镜像伙伴关系
更改数据库 [$(DATABASE_NAME)] 设置合作伙伴 = N'TCP://$(MIRROR_DNS):$(PORT)'

-- 删除镜像监控
如果存在(从 msdb..sysjobs 中选择 *,其中 [name] ='数据库镜像监视器作业')
开始
    EXEC sp_dbmmonitordropmonitoring
结尾

-- 设置镜像监控
EXEC sys.sp_dbmmonitoraddmonitoring -- 默认为 1 分钟






/*---------------------------------------------------------------------*/
-- DRMirroringRemove.sql
/*---------------------------------------------------------------------*/
如果存在(从 sys.database_mirroring 中选择 *,其中 db_name(database_id) = '$(DATABASE)' 并且 mirroring_guid 不为空)
开始
    更改数据库 [$(数据库)] 设置合作伙伴关闭
结尾

等待延迟‘00:00:10’







/*---------------------------------------------------------------------*/
-- DRMirroring删除镜像.sql
/*---------------------------------------------------------------------*/
如果存在(从 sys.database_mirroring 中选择 *,其中 db_name(database_id) = '$(DATABASE)' 并且 mirroring_guid 不为空)
开始
    更改数据库 [$(数据库)] 设置合作伙伴关闭
结尾

等待延迟‘00:00:10’

删除数据库 [$(数据库)]

答案2

内置的怎么样数据库镜像监视器

相关内容