实战 SQL Server 2008 日志传送(Log Shipping)
一、什么是日志传送?
原理很简单,三个动作六个字:备份->复制->恢复。
如果由人来完成这个三个动作,只能叫日志搬运工;而由SQL Server Job自动完成,就叫日志传送。同样的事情,不一样的档次,所以叫法也不一样。
二、日志传送能解决什么问题?
解决数据库的多服务器热备份问题。多台服务器定时备份,随时可以作为主数据库服务器的替补。
三、日志传送的优点是什么?
简单!比SQL Server的数据库复制、镜像简单多了。
四、日志传送的缺点是什么?
日志文件的传输只支持Windows文件共享的方式,不支持FTP,就如同快递公司只送本地,不送外地。所有备份服务器都要在同一个局域网内,所以准确的名字应该叫“日志本地传送”。
五、日志如何传送?
1. [主数据库服务器]要传送日志的数据库的恢复模式必须是完全(Full)
2. [主数据库服务器]对要传送日志的数据库进行1次且仅此1次完全备份
BACKUP DATABASE [CNBlogsJob] TO DISK = N'F:\FullBackup\CNBlogsJob.bak' WITH NOFORMAT, INIT, NAME = N'CNBlogsJob-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 GO
3. [备份数据库服务器]将完全备份文件复制到备份数据库服务器上,并以STANDBY的方式进行恢复
RESTORE DATABASE [CNBlogsJob] FROM DISK = N'F:\FullBackup\CNBlogsJob.bak' WITH FILE = 1, MOVE N'CNBlogsJob' TO N'D:\Data\CNBlogsJob.mdf', MOVE N'CNBlogsJob_log' TO N'E:\Logs\CNBlogsJob.LDF', STANDBY = N'F:\Standby\ROLLBACK_UNDO_CNBlogsJob.BAK', NOUNLOAD, STATS = 10 GO
恢复成功后,SQL Server管理工具中会显示如下图所示的状态:
4. [备份数据库服务器]创建一个普通的Windows用户帐户(比如logshipper),将该用户加入到以SQLServerSQLAgentUser开头的组(未验证是否可以不加),并将该用户设置为SQL Server Agent的运行帐户。
5. [备份数据库服务器]创建一个文件夹(比如F:\LogBackup),用于存放从主数据库复制过来的日志文件。
6. [主数据库服务器]创建与备份数据库服务器同名同密码的Windows用户帐户(比如这里是logshipper)。
7. [主数据库服务器]创建存放日志备份文件的文件夹,并将该文件夹以只读权限共享给logshipper。假设文件名称是LogBackup,主数据库服务器名称是dbserver,通过设置共享让备份数据库服务器可以访问共享路径 \\dbserver\LogBackup 。
8. [主数据库服务器]选择要进行日志传送的数据库,打开属性窗口,进入Transaction Log Shipping窗口,勾选Enable this as a primary database in a log shipping configuration,然后点击Backup Settings打开日志传送备份设置窗口,如下图:
\\dbserver\LogBackup 就是给备份数据库服务器访问的共享路径。
F:\LogBackup 是主数据库服务器保存日志备份文件的路径。
9. [主数据库服务器]继续回到Transaction Log Shipping窗口,在Secondary databases部分点击Add按钮,连接至备份数据库服务器,选择对应的数据库;在Initialize Secondary Database窗口中,选择"No, the secondary database is initialized";在Copy Files窗口中,输入备份数据库服务器中存放备份日志文件的路径(比如F:\LogBackup);在Restore Transaction Log窗口中,选择Standby mode。
10. 成功设置之后,日志传送就开始工作了。主数据服务器上的Job根据设定的时间间隔定时地备份当前数据库的日志,将日志文件保存至本机的文件夹(比如F:\LogBackup);备份数据服务器上的Job不断地通过共享文件夹(比如\\dbserver\LogBackup)从主数据库服务器复制日志文件到本机的文件夹(比如F:\LogBackup),然后将日志文件恢复至处于Standby状态的数据库中。