(1)不能停机、重启服务、现在没有加入域
(2)现在已经有一个镜像副本了
现有业务,想做一个从库,有什么好办法?
我遇到的问题:
测试环境我们的策略如下:
我们的测试数据操作到底要多久从库才能同步上去呢?
5分+3秒+10秒+1分钟=6分13秒
(这一分钟是可能文件传过来之前正好运行了一次还原操作,导致错过需要再等下一次周期,周期是一分钟)
主库:
IP/URL
角色
描述
10.20.50.23
主服务器
日志传送主服务器
test
主库
日志传送主库
D:\temp_bak
备份文件夹(本地)
主库日志文件备份
D:\dba_tools
DBA工具文件夹(本地)
复制事务备份到从库
从库:
10.20.50.42
从库
日志传送从库
同名从库
日志传送同名从库
d:\copy_file
备份文件夹(共享)
接收主库备份文件并还原
sxs.rar这个软件包哪里来的?这个就是操作系统镜像(最好是与当前windowsserver版本相同或相近可兼容的iso镜像文件)文件里面的一个叫sxs文件夹。
新建call.vbs调用copy_tran_bakfile.bat
copy_tran_bakfile.bat
@echoofffor/l%%iin(1,1,6)do(dirz:1>nuliferrorlevel1(netusez:\\10.20.50.42\log_shipping\2433_18$GTRwxhi@A6f#!wQ/user:log_shipping)echo%date%%time%>>e:\dba_tools\output.logecho%date%%time%>>e:\dba_tools\error.logreplace/aE:\log_shipping_tran\*z:\>>e:\dba_tools\output.log2>>e:\dba_tools\error.logtimeout/T55/NOBREAK)
删除netuse盘
netusez:/delete/y
call.vbs
setws=WScript.CreateObject("WScript.Shell")ws.Run"e:\dba_tools\copy_file.bat",0到时候定时任务可以用call.vbs,这样调用bat的黑窗就不会弹出
(1)服务器管理器,添加角色与功能
(2)全部下一步下一步,直至功能选择,勾上.NetFrameWork3.5
然后直接下一步下一步完事,但有时候会报错,如下:
(3)这个时候我们重新来一次,指定备用源
然后找到我们传过来文件的这个目录:
输入进去,然后点击确定即可。
然后点击安装,等待安装完成
(1)这个需要开共享,且需要给everyone读取权限,也可以给sqlserver代理启动账户以读取权限,强烈推荐后者
(2)比如代理的log_shipping输入进去,然后点击添加,给只读权限即可。(然后这个账户所在用户组也需要添加进来,比如Users)
(3)或者新建一个账户,然后用这个账户启动从库代理,然后共享文件夹只给这个账户访问即可(注意,修改代理启动账户需要重启代理)
不过反正是新的从库,重启代理服务也是没有关系的。
如果共享失败请检查:
(1)共享功能
(2)共享程序
--构造测试主库test
createdatabasetest;
go
--在test库构造3个测试表test1/test2/test3
select1asidintotest..test1;
select2asidintotest..test2;
select3asidintotest..test3;
(1)全量备份
--全量备份
backupdatabasetesttodisk='D:\temp_bak\test.bak'withstats=10
(2)复制备份文件到从库
--复制主库test.bak文件到从库,这里随便找个文件夹即可,比如我选的就是D:\temp\目录
--以norecovery的方式还原到从库,为避免主从位置不同,必须以move参数来指定还原数据库的文件存放位置
restoredatabasetestfromdisk='D:\temp\test.bak'withnorecovery,replace
,move'test'to'D:\ProgramFiles\MSSQL1\MSSQL13.MSSQLSERVER\MSSQL\DATA\test.mdf'
,move'test_log'to'D:\ProgramFiles\MSSQL1\MSSQL13.MSSQLSERVER\MSSQL\DATA\test_log.ldf'
(3)核验
右击数据库=》刷新,如果出现了test数据库,并且是正在还原的情况,那么就成功了
(4)删除bak文件
操作完之后,为了保证安全,删除主库、从库上的test.bak文件,
把将此数据库启用为事务日志传送配置中的主数据库
我们设置备份目录为实现预设创建好的d:\temp_bak
这里因为是测试我们设置1分钟备份一次,到这里设置好之后,一路确定确定下去就好了。
确定,成功
核验一:作业
我们可以看到我们操作完成后,生成了2个作业
LSBackup_test以及LSAlert_WIN-MMFDQB29HJK,前者是备份作业,后者是报警作业,我们只需要查看备份作业是否存在就好了。
我们来看一下作业是否执行成功,是否是按我们设置的一分钟一次的频率在执行
看一下历史记录,真的是一分钟一次执行,且都执行成功了。
核验二:查看备份文件是否生成在我们指定的目录下
如下图,已经生成了,证明我们主库配置好了。
为什么要暂时禁用这个作业呢,因为我们现在还没配置复制备份到从库,也没有配置在从库还原,如果备份太多会导致从库落后比较多。
等我们全部都配置好了,再开启。
右击LSBackup_test作业=》禁用
我们之前已经手动初始化了,这里我们选择否,辅助数据库已经初始化
点击复制文件选项卡,然后复制文件的目标文件夹填写我们之前预设好的
点击计划=》我们设置和备份一样的频率,一分钟还原一次
一路点击确定=》保存配置信息成功
我们可以看到,从库产生了三个作业,如下图,前面三个作业就是
LSAlert_WIN-6BA1LAPNHHK:告警作业,我们用不上,忽略
LSCopy_WIN-MMFDQB29HJK_test:复制作业,因为本文我们是不停服操作,这个暂时没用上,所以避免浪费资源禁用。
我们下个步骤会在主库使用windows计划任务复制备份
LSRestore_WIN-MMFDQB29HJK_test:恢复作业,对指定文件夹中的事务日志备份进行顺序恢复。
如果有文件则它会还原,如果没有文件它有判定机制不做操作,但作业也会执行成功。
只有当发生还原实际错误的时候,或权限等访问错误的时候作业才会失败。
核验二:数据核验
这个整个都没弄好,见后面整天弄完了才能看到
<1>copyunc(不推荐)
Rem使用直接复制方式(不建议使用,因为如果主从没有相同的windows账户和密码,则无法免密直接访问UNC)echo%date%%time%1>>output.logreplace/ad:\temp_bak\*\\10.20.50.42\copy_file>>d:\dba_tools\output.log2>>d:\dba_tools\error.log<2>netuse(推荐)
Rem使用netuse方式(建议使用,只需要拥有从库账户权限即可)@echoofffor/l%%iin(1,1,6)do(dirz:|find/c"trn"iferrorlevel1(netusez:\\10.20.50.42\log_shipping\1433_17$GTRwxhi@A6f#!wQ/user:log_shipping)echo%date%%time%>>e:\dba_tools\output.logecho%date%%time%>>e:\dba_tools\error.logreplace/aE:\log_shipping_tran\*z:\>>e:\dba_tools\output.log2>>e:\dba_tools\error.logtimeout/T55/NOBREAK)
注意,如果目录、IP不同,脚本需要修改
打开任务计划程序
这里要使用管理员账户,由于我这里没有实际管理员密码,暂时先用这个管理组角色测试
我们新建一个触发器,然后设置策略为每天执行一次,一次运行持续一天,且每5分钟执行一次该任务中的操作。
把我们的脚本路径输入进去。
这个无需怎么修改,注意一下电源那里的复选框即可
好,到现在都配置好了,我们点击确定。
右击=》运行
然后我们可以去我们的脚本所在目录看日志,如下图,没有错误信息且输出日志中告诉了我们添加了日志
这就算运行成功了,但还需实际核验文件到底有没有传输过去
登上从库10.20.50.42,我们发现,已经传到这个目录上来了。
IP/URL/名称
主库服务器
Copy_tranBak_file
Windows计划任务
调用bat复制备份文件到从库
LSBackup_test
数据库作业
test库事务日志备份/1分钟1次,备份到d:\temp_bak
LSRestore_WIN-MMFDQB29HJK_test
之前我们停了主库的LSBackup_test,主库所在服务器的计划任务copy_tranBak_file
我们现在都启动起来
在主库上执行:
selectgetdate()
select4asidintotest..test4
select5asidintotest..test5
select6asidintotest..test6
5分+3秒+10秒+1分钟(这一分钟是可能文件传过来之前正好运行了一次还原操作,导致错过需要再等一秒)
我等了5分多种(没有实时一直等候),查看数据,表已经同步过去了。
到此,大功告成
SELECT'CREATELOGIN['+p.name+']'+CASEWHENp.typeIN('U','G')THEN'FROMwindows'ELSE''END+'WITH'+CASEWHENp.type='S'THEN'password='+master.sys.fn_varbintohexstr(l.password_hash)+'hashed,'+'sid='+master.sys.fn_varbintohexstr(l.sid)+',check_expiration='+CASEWHENl.is_expiration_checked>0THEN'ON,'ELSE'OFF,'END+'check_policy='+CASEWHENl.is_policy_checked>0THEN'ON,'ELSE'OFF,'END+CASEWHENl.credential_id>0THEN'credential='+c.name+','ELSE''ENDELSE''END+'default_database='+p.default_database_name+CASEWHENLEN(p.default_language_name)>0THEN',default_language='+p.default_language_nameELSE''ENDFROMsys.server_principalspLEFTJOINsys.sql_loginslONp.principal_id=l.principal_idLEFTJOINsys.credentialscONl.credential_id=c.credential_idWHEREp.typeIN('S','U','G')ANDp.nameNOTIN('sa')ANDp.nameNOTLIKE'%##%'ANDp.nameNOTLIKE'%NTSERVICE%'ANDp.nameNOTLIKE'%NTAUTHORITY%'
表
log_shipping_monitor_alert
存储警报作业ID。仅当尚未配置远程监视服务器时,主服务器上才会使用此表。
log_shipping_monitor_error_detail
存储与此主服务器关联的日志传送作业的错误详细信息。
log_shipping_monitor_history_detail
存储与此主服务器关联的日志传送作业的历史记录详细信息。
log_shipping_monitor_primary
存储一条此主数据库的监视记录。
log_shipping_primary_databases
包含指定服务器上主数据库的配置信息。每个主数据库存储一行。
log_shipping_primary_secondaries
将主数据库映射到辅助数据库。
存储过程
sp_add_log_shipping_primary_database
设置日志传送配置(包括备份作业、本地监视记录及远程监视记录)的主数据库。
sp_add_log_shipping_primary_secondary
向现有的主数据库添加辅助数据库名称。
sp_change_log_shipping_primary_database
更改主数据库设置,包括本地和远程监视记录。
sp_cleanup_log_shipping_history
根据保持期清除本地历史记录及监视器上的历史记录。
sp_delete_log_shipping_primary_database
删除主数据库的日志传送,包括备份作业以及本地和远程历史记录。
sp_delete_log_shipping_primary_secondary
从主数据库中删除辅助数据库名称。
sp_help_log_shipping_primary_database
检索主数据库设置并显示log_shipping_primary_databases和log_shipping_monitor_primary表中的值。
sp_help_log_shipping_primary_secondary
检索主数据库的辅助数据库名称。
sp_refresh_log_shipping_monitor
利用指定的日志传送代理的最新信息刷新监视器。
存储警报作业ID。仅当尚未配置远程监视服务器时,辅助服务器上才会使用此表。
存储与此辅助服务器关联的日志传送作业的错误详细信息。
存储与此辅助服务器关联的日志传送作业的历史记录详细信息。
log_shipping_monitor_secondary
存储与此辅助服务器关联的辅助数据库监视记录。每个辅助数据库存储一条监视记录。
log_shipping_secondary
包含指定服务器上辅助数据库的配置信息。每个辅助ID存储一行。
log_shipping_secondary_databases
存储指定辅助数据库的配置信息。每个辅助数据库存储一行。
备注
与指定主数据库位于同一个辅助服务器上的辅助数据库共享log_shipping_secondary表中的设置。如果一个辅助数据库更改了共享设置,所有辅助数据库的设置都将更改。
sp_add_log_shipping_secondary_database
设置用于日志传送的辅助数据库。
sp_add_log_shipping_secondary_primary
为指定的主数据库设置主服务器信息,添加本地和远程监视器链接,并在辅助服务器上创建复制作业和还原作业。
sp_change_log_shipping_secondary_database
更改辅助数据库设置,包括本地和远程监视记录。
sp_change_log_shipping_secondary_primary
更改辅助数据库设置,例如源目录、目标目录和文件保持期。
sp_delete_log_shipping_secondary_database
删除辅助数据库、本地历史记录和远程历史记录。
sp_delete_log_shipping_secondary_primary
从辅助服务器上删除有关指定的主服务器的信息。
sp_help_log_shipping_secondary_database
从log_shipping_secondary、log_shipping_secondary_databases和log_shipping_monitor_secondary表中检索辅助数据库设置。
sp_help_log_shipping_secondary_primary
此存储过程将在辅助服务器上检索给定的主数据库的设置。
存储警报作业ID。
存储日志传送作业的错误详细信息。
存储日志传送作业的历史记录详细信息。
存储与此监视服务器关联的主数据库的监视记录。每个主数据库存储一条监视记录。
存储与此监视服务器关联的辅助数据库的监视记录。每个辅助数据库存储一条监视记录。
sp_add_log_shipping_alert_job
如果尚未创建日志传送警报作业,则创建它。
sp_delete_log_shipping_alert_job
如果没有关联的主数据库,则删除日志传送警报作业。
sp_help_log_shipping_alert_job
返回警报作业的作业ID。
sp_help_log_shipping_monitor_primary
从log_shipping_monitor_primary表中返回指定的主数据库的监视记录。
sp_help_log_shipping_monitor_secondary
从log_shipping_monitor_secondary表中返回指定的辅助数据库的监视记录。