准备工作

两台装有的Windows Server 2012R2以及SQL Server 2012的服务器

下载评估版 Windows Server 2012 R2

下载 Microsoft SQL Server 2012 SP1

两台机器可以相互Ping 通,测试环境为了不必要的麻烦请关闭Windows 防护墙

IP:192.168.100.101 Servername: SQL1\SQL1

IP:192.168.100.102 Servername: SQL2\SQL2

开始SQL Server 代理服务 并设置为自动开启

SQL Agent 登入设置:在服务管理中改成使用Administrator,如自建用户请确保两边用户名以及密码相同。并启动服务。

准备共享文件夹

事务日志传送的就是由主库不断产生事务日志文件的备份(或者叫归档日志,可能更好理解)而备库不断还原这些事务日志备份文件的过程。

中间需要一个文件夹作为双方的访问的共享文件夹。

如果这个共享文件夹位于主库的服务器上,主库的备份路径可以不写成UNC路径的形式,而备库则必须写成UNC路径的形式。

如果这个共享文件夹位于备库的服务器上,主库的备份路径就要写成UNC路径,而备库可以写成本地路径的形式。

如果共享文件夹即不在主库也不在备库的服务器上面,那么备份、还原目录的名称都要写成UNC路径了。

在SQL1的C 盘创建一个名为primaryBackupLog的文件夹,并设置为共享文件夹。 NUC:\\SQL1\primaryBackupLog

在SQL2的C 盘创建一个名为secondaryBackup

SQL Server 请使用SQL Server账号进行登录的,

UserName:sa Password 相同

测试环境为了不必要的麻烦,请使用Administrator账号

将SQL1的 AdventureWorks2012 恢复模式改为完整

  1. USE [master]
  2. GO
  3. ALTER DATABASE [AdventureWorks2012] SET RECOVERY FULL WITH NO_WAIT
  4. GO

对SQL1的AdventureWorks2012进行全备

  1. USE [master]
  2. BACKUP DATABASE [AdventureWorks2012] TO DISK = N'C:\primaryBackupLog\AdventureWorks.BAK' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2012-FullBackup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
  3. GO

在SQL2上进行还原,并以STANDBY的方式进行恢复

  1. USE [master]
  2. RESTORE DATABASE [AdventureWorks2012]
  3. FROM DISK = N'C:\secondaryBackup\AdventureWorks.BAK' WITH FILE = 1,
  4. MOVE N'AdventureWorks2012_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2\MSSQL\DATA\AdventureWorks2012_Data.mdf',
  5. MOVE N'AdventureWorks2012_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2\MSSQL\DATA\AdventureWorks2012_log.ldf',
  6. STANDBY = N'C:\secondaryBackup\AdventureWorks.BAK_S',
  7. NOUNLOAD, STATS = 10
  8. GO

设置备份选项

配置复制作业

以下为代码方式实现

  1. -- 在主服务器上执行下列语句,以便为数据库 [192.168.100.101\SQL1].[AdventureWorks2012]
  2. -- 配置日志传送。
  3. -- 需要在主服务器上 [msdb] 数据库的上下文中运行该脚本。
  4. -------------------------------------------------------------------------------------
  5. -- 添加日志传送配置
  6.  
  7. -- ****** 开始: 要在主服务器 [192.168.100.101\SQL1] 上运行的脚本 ******
  8.  
  9. DECLARE @LS_BackupJobId AS uniqueidentifier
  10. DECLARE @LS_PrimaryId AS uniqueidentifier
  11. DECLARE @SP_Add_RetCode As int
  12.  
  13. EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database
  14. @database = N'AdventureWorks2012'
  15. ,@backup_directory = N'C:\primaryBackupLog'
  16. ,@backup_share = N'\\SQL1\primaryBackupLog'
  17. ,@backup_job_name = N'LSBackup_AdventureWorks2012'
  18. ,@backup_retention_period = 4320
  19. ,@backup_compression = 2
  20. ,@backup_threshold = 60
  21. ,@threshold_alert_enabled = 1
  22. ,@history_retention_period = 5760
  23. ,@backup_job_id = @LS_BackupJobId OUTPUT
  24. ,@primary_id = @LS_PrimaryId OUTPUT
  25. ,@overwrite = 1
  26.  
  27. IF (@@ERROR = 0 AND @SP_Add_RetCode = 0)
  28. BEGIN
  29.  
  30. DECLARE @LS_BackUpScheduleUID As uniqueidentifier
  31. DECLARE @LS_BackUpScheduleID AS int
  32.  
  33. EXEC msdb.dbo.sp_add_schedule
  34. @schedule_name =N'LSBackupSchedule_192.168.100.101\SQL11'
  35. ,@enabled = 1
  36. ,@freq_type = 4
  37. ,@freq_interval = 1
  38. ,@freq_subday_type = 4
  39. ,@freq_subday_interval = 15
  40. ,@freq_recurrence_factor = 0
  41. ,@active_start_date = 20141015
  42. ,@active_end_date = 99991231
  43. ,@active_start_time = 0
  44. ,@active_end_time = 235900
  45. ,@schedule_uid = @LS_BackUpScheduleUID OUTPUT
  46. ,@schedule_id = @LS_BackUpScheduleID OUTPUT
  47.  
  48. EXEC msdb.dbo.sp_attach_schedule
  49. @job_id = @LS_BackupJobId
  50. ,@schedule_id = @LS_BackUpScheduleID
  51.  
  52. EXEC msdb.dbo.sp_update_job
  53. @job_id = @LS_BackupJobId
  54. ,@enabled = 1
  55.  
  56. END
  57.  
  58. EXEC master.dbo.sp_add_log_shipping_alert_job
  59.  
  60. EXEC master.dbo.sp_add_log_shipping_primary_secondary
  61. @primary_database = N'AdventureWorks2012'
  62. ,@secondary_server = N'192.168.100.102\SQL2'
  63. ,@secondary_database = N'AdventureWorks2012'
  64. ,@overwrite = 1
  65.  
  66. -- ****** 结束: 要在主服务器 [192.168.100.101\SQL1] 上运行的脚本 ******
  67.  
  68. -- 在辅助服务器上执行下列语句,以便为数据库 [192.168.100.102\SQL2].[AdventureWorks2012]
  69. -- 配置日志传送。
  70. -- 需要在辅助服务器上 [msdb] 数据库的上下文中运行该脚本。
  71. -------------------------------------------------------------------------------------
  72. -- 添加日志传送配置
  73.  
  74. -- ****** 开始: 要在辅助服务器 [192.168.100.102\SQL2] 上运行的脚本 ******
  75.  
  76. DECLARE @LS_Secondary__CopyJobId AS uniqueidentifier
  77. DECLARE @LS_Secondary__RestoreJobId AS uniqueidentifier
  78. DECLARE @LS_Secondary__SecondaryId AS uniqueidentifier
  79. DECLARE @LS_Add_RetCode As int
  80.  
  81. EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary
  82. @primary_server = N'192.168.100.101\SQL1'
  83. ,@primary_database = N'AdventureWorks2012'
  84. ,@backup_source_directory = N'\\SQL1\primaryBackupLog'
  85. ,@backup_destination_directory = N'C:\secondaryBackup'
  86. ,@copy_job_name = N'LSCopy_192.168.100.101\SQL1_AdventureWorks2012'
  87. ,@restore_job_name = N'LSRestore_192.168.100.101\SQL1_AdventureWorks2012'
  88. ,@file_retention_period = 4320
  89. ,@overwrite = 1
  90. ,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT
  91. ,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT
  92. ,@secondary_id = @LS_Secondary__SecondaryId OUTPUT
  93.  
  94. IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
  95. BEGIN
  96.  
  97. DECLARE @LS_SecondaryCopyJobScheduleUID As uniqueidentifier
  98. DECLARE @LS_SecondaryCopyJobScheduleID AS int
  99.  
  100. EXEC msdb.dbo.sp_add_schedule
  101. @schedule_name =N'DefaultCopyJobSchedule'
  102. ,@enabled = 1
  103. ,@freq_type = 4
  104. ,@freq_interval = 1
  105. ,@freq_subday_type = 4
  106. ,@freq_subday_interval = 1
  107. ,@freq_recurrence_factor = 0
  108. ,@active_start_date = 20141015
  109. ,@active_end_date = 99991231
  110. ,@active_start_time = 0
  111. ,@active_end_time = 235900
  112. ,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT
  113. ,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT
  114.  
  115. EXEC msdb.dbo.sp_attach_schedule
  116. @job_id = @LS_Secondary__CopyJobId
  117. ,@schedule_id = @LS_SecondaryCopyJobScheduleID
  118.  
  119. DECLARE @LS_SecondaryRestoreJobScheduleUID As uniqueidentifier
  120. DECLARE @LS_SecondaryRestoreJobScheduleID AS int
  121.  
  122. EXEC msdb.dbo.sp_add_schedule
  123. @schedule_name =N'DefaultRestoreJobSchedule'
  124. ,@enabled = 1
  125. ,@freq_type = 4
  126. ,@freq_interval = 1
  127. ,@freq_subday_type = 4
  128. ,@freq_subday_interval = 1
  129. ,@freq_recurrence_factor = 0
  130. ,@active_start_date = 20141015
  131. ,@active_end_date = 99991231
  132. ,@active_start_time = 0
  133. ,@active_end_time = 235900
  134. ,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT
  135. ,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT
  136.  
  137. EXEC msdb.dbo.sp_attach_schedule
  138. @job_id = @LS_Secondary__RestoreJobId
  139. ,@schedule_id = @LS_SecondaryRestoreJobScheduleID
  140.  
  141. END
  142.  
  143. DECLARE @LS_Add_RetCode2 As int
  144.  
  145. IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
  146. BEGIN
  147.  
  148. EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database
  149. @secondary_database = N'AdventureWorks2012'
  150. ,@primary_server = N'192.168.100.101\SQL1'
  151. ,@primary_database = N'AdventureWorks2012'
  152. ,@restore_delay = 0
  153. ,@restore_mode = 0
  154. ,@disconnect_users = 0
  155. ,@restore_threshold = 45
  156. ,@threshold_alert_enabled = 1
  157. ,@history_retention_period = 5760
  158. ,@overwrite = 1
  159.  
  160. END
  161.  
  162. IF (@@error = 0 AND @LS_Add_RetCode = 0)
  163. BEGIN
  164.  
  165. EXEC msdb.dbo.sp_update_job
  166. @job_id = @LS_Secondary__CopyJobId
  167. ,@enabled = 1
  168.  
  169. EXEC msdb.dbo.sp_update_job
  170. @job_id = @LS_Secondary__RestoreJobId
  171. ,@enabled = 1
  172.  
  173. END
  174.  
  175. -- ****** 结束: 要在辅助服务器 [192.168.100.102\SQL2] 上运行的脚本 ******

在SQL1 上进行测试

  1. 1 use AdventureWorks2012
  2. 2 CREATE TABLE testtable( number int ,
  3. 3 num nvarchar( 50
  4. 4 )
  5. 5 );
  6. 6 INSERT INTO testtable
  7. 7 VALUES( 1 ,
  8. 8 'aaa'
  9. 9 );
  10. 10 GO
  11. 11 select * from testtable;

Step By Step SQL Server Log Shipping

Configure Log Shipping (SQL Server)

Configure Log Shipping的更多相关文章

  1. SQL Server Log Shipping学习总结

      SQL Server的日志传送(log shipping)技术一直比较鸡肋,尤其当SQL Server 推出了Always On技术以后,估计使用日志传送(log shipping)这种技术方案的 ...

  2. SQL Server数据库log shipping 灾备(Part2 )

    3.配置步骤: 主服务器(A机)设置 (1) 启用Log Shipping Configuration 右键单击需要配置日志传输的数据库->Tasks-> Ship Transaction ...

  3. SQL Server数据库log shipping 灾备(Part1 )

    1.概述 Log Shipping为SQL Server提供的数据库备份过程.它可以将数据库整个复制到另一台服务器上.在这种情况下,交易日志也会定期发送到备份服务器上供恢复数据使用,这使得服务器一直处 ...

  4. Log Shipping搭建

    1.    概述 SQL Server 使用日志传送,您可以自动将“主服务器”实例上“主数据库”内的事务日志备份发送到单独“辅助服务器”实例上的一个或多个“辅助数据库”.事务日志备份分别应用于每个辅助 ...

  5. 转 ORA-16191 "Primary log shipping client not logged on standby

    ###sample 0 原因未知: 解决办法,重建密码文件 primary db :alter system set log_archive_dest_state_2=defer sid='*' sc ...

  6. Microsoft SQL Server Version List [sqlserver 7.0-------sql server 2016]

    http://sqlserverbuilds.blogspot.jp/   What version of SQL Server do I have? This unofficial build ch ...

  7. Microsoft SQL Server Version List(SQL Server 版本)

    原帖地址 What version of SQL Server do I have? This unofficial build chart lists all of the known Servic ...

  8. SqlServer 版本号

    RTM (no SP) SP1 SP2 SP3 SP4 SQL Server 2014      codename Hekaton  12.00.2000.8 SQL Server 2012      ...

  9. How to configure Veritas NetBackup (tm) to write Unified and Legacy log files to a different directory

    Problem DOCUMENTATION: How to configure Veritas NetBackup (tm) to write Unified and Legacy log files ...

随机推荐

  1. Java Lock

    JVM中的另一种锁Lock的实现.与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的.在java.util.concurrent.locks包中有很多 ...

  2. 无线网络(WLAN)常见加密方式介绍

    在使用无线路由器配置wifi安全设定的时候经常会遇到各种加密方式,即不懂意思也不知道如何选择.本文将对此做一个简单的介绍. 1.WEP 有线等效协议(Wired Equivalent Privacy, ...

  3. HDU 4441 Queue Sequence

    http://acm.hdu.edu.cn/showproblem.php?pid=4441 题意:对于一个序列,每次有三种操作   insert pos  表示在pos插入一个数,这个数是最小的正数 ...

  4. Windows添加在此处打开命令CMD

    打开rededit在:HKEY_CLASS_ROOT > * > shell >下面新建一个项CMD 在CMD中新建两个字符串 一个是默认,值为 @shell32.dll,- 另外一 ...

  5. Python中的内置函数

    2.1 Built-in Functions The Python interpreter has a number of functions built into it that are alway ...

  6. /var/spool/postfix/maildrop小文件太多造成inode索引使用完解决

    /var/spool/postfix/maildrop 小文件太多造成inode索引使用完解决办法 问题表现和检查: 1.运行df -i / 查看inode使用是否满: 2.查看/var/spool/ ...

  7. Macbook之设置Finder显示文件完整路径

    终端里输入:defaults write com.apple.finder _FXShowPosixPathInTitle -bool TRUE;killall Finder 回复输入:default ...

  8. NodeJS学习之异步编程

    NodeJS -- 异步编程 NodeJS最大的卖点--事件机制和异步IO,对开发者并不透明 代码设计模式 异步编程有很多特有的代码设计模式,为了实现同样的功能,使用同步方式和异步方式编写代码会有很大 ...

  9. css reset及部分layout样式

    /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html { font-family: sans ...

  10. ASP.NET MVC 4 SimpleMembership Provider (1)

    新的ASP.NET MVC 4.0 提供了一个新的Membership Provider,叫SimpleMembership. 首先,我们建立一个新的solution 首先我们先看一下web.conf ...