我们正在将大约20个数据库移动到sql 2000的单个实例上,并将其转换为使用数据库镜像的sql 2008 r2环境。
我正在寻找的是一个工具或脚本,可以帮助我轻松地pipe理这些20db的转换和pipe理到这个新的镜像环境。 设置每个数据库有很多步骤,我想尽可能自动化。
编辑:这是我一直在手动做的步骤:
我很喜欢能够编写这个脚本,或者有一个工具可以帮我。 谢谢! 保罗
我创build了一系列batch file和SQL脚本来完成以下步骤。 我只包含了用于镜像的脚本,但其他引用的SQL脚本是非常基本的SQL命令(除了恢复数据库脚本,由于我已经实现了这个脚本,有点棘手),创build它们会给你一个机会更改SQLCMD模式variables。 如果你想用你的电子邮件地址在Twitter(@jcumberland)上直接给我发消息,我可以给你发送完整的脚本。 我已经删除了文件名上的完整path。
/ * ------------------------------------------------ ------ * /
- 更换这些值
/ * ------------------------------------------------ ------ * /
/ * ------------------------------------------------ ------ * /
- batch file1,调用实用程序batch file
/ * ------------------------------------------------ ------ * /
@echoclosures
设置PRIMARYHOST =
设置MIRRORHOST =
设置INST =
设置DRIVE =
设置DRTARGETDIR =“%DRIVE%:\ MSSQL.1 \ MSSQL \ DATA \”
设置LOGDIR =“%DRIVE%:\ MSSQL.1 \ MSSQL \ DATA \”
设置PORT =
设置PRIMARYINST =%PRIMARYHOST%\%INST%
设置MIRRORINST =%MIRRORHOST%\%INST%
@echo上
调用drdbsetup.bat%PRIMARYHOST%%MIRRORHOST%%PRIMARYINST%%MIRRORINST%DRIVE%%DRTARGETDIR%%PORT%%LOGDIR%
暂停
/ * ------------------------------------------------ ------ * /
- batch file2 - 调用SQL脚本
/ * ------------------------------------------------ ------ * /
rem - 恢复模式设置为full
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
重新logging备份
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 - 从主要删除备份文件
del \\%1 \%5 $ \ * .bak
del \\%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 - 从镜像中删除备份文件
del%6 \ *。bak
del%6 \ *。trn
rem - build立镜像
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
/ * ------------------------------------------------ ------ * /
- MirroringSetup.sql
/ * ------------------------------------------------ ------ * /
/ * ------------------------------------------------ ----- * /
- 以委托人身份运行
/ * ------------------------------------------------ ----- * /
:连接$(PRINCIPAL)
走
- 创build端点
如果不存在(select * from sys.endpoints where name ='Mirroring')
开始
CREATE ENDPOINT镜像
授权[]
状态=开始作为TCP(
LISTENER_PORT = $(PORT)
,LISTENER_IP = ALL
)
FOR DATA_MIRRORING(
angular色=合作伙伴
,AUTHENTICATION = WINDOWS NEGOTIATE
,encryption=需要的algorithmRC4
)
结束
走
/ * ------------------------------------------------ ----- * /
- 在镜子上运行
/ * ------------------------------------------------ ----- * /
:连接$(MIRROR)
走
- 创build端点
如果不存在(select * from sys.endpoints where name ='Mirroring')
开始
CREATE ENDPOINT镜像
授权[]
状态=开始作为TCP(
LISTENER_PORT = $(PORT)
,LISTENER_IP = ALL
)
FOR DATA_MIRRORING(
angular色=合作伙伴
,AUTHENTICATION = WINDOWS NEGOTIATE
,encryption=需要的algorithmRC4
)
结束
走
- build立镜像伙伴关系
ALTER DATABASE [$(DATABASE_NAME)] SET PARTNER = N'TCP:// $(PRINCIPAL_DNS):$(PORT)'
走
- 删除镜像监控
如果存在(select * from msdb..sysjobs where [name] ='Database Mirroring Monitor Job')
开始
EXEC sp_dbmmonitordropmonitoring
结束
走
- 设置镜像监视
EXEC sys.sp_dbmmonitoraddmonitoring - 默认为1分钟
走
/ * ------------------------------------------------ ----- * /
- 以委托人身份运行
/ * ------------------------------------------------ ----- * /
:连接$(PRINCIPAL)
走
- build立镜像伙伴关系
ALTER DATABASE [$(DATABASE_NAME)] SET PARTNER = N'TCP:// $(MIRROR_DNS):$(PORT)'
走
- 删除镜像监控
如果存在(select * from msdb..sysjobs where [name] ='Database Mirroring Monitor Job')
开始
EXEC sp_dbmmonitordropmonitoring
结束
走
- 设置镜像监视
EXEC sys.sp_dbmmonitoraddmonitoring - 默认为1分钟
走
/ * ------------------------------------------------ ------ * /
- DRMirroringRemove.sql
/ * ------------------------------------------------ ------ * /
如果存在(select * from sys.database_mirroring where db_name(database_id)='$(DATABASE)'且mirroring_guid不为空)
开始
ALTER DATABASE [$(DATABASE)]设置伙伴closures
结束
走
等候延迟'00:00:10'
走
/ * ------------------------------------------------ ------ * /
- DRMirroringRemoveMirror.sql
/ * ------------------------------------------------ ------ * /
如果存在(select * from sys.database_mirroring where db_name(database_id)='$(DATABASE)'且mirroring_guid不为空)
开始
ALTER DATABASE [$(DATABASE)]设置伙伴closures
结束
走
等候延迟'00:00:10'
走
DROP DATABASE [$(DATABASE)]
走
内置的数据库镜像监视器如何?