• Configure Log Shipping


    准备工作

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

    下载评估版 Windows Server 2012 R2

    下载 Microsoft SQL Server 2012 SP1

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

    IP:192.168.100.101 Servername: SQL1SQL1

    IP:192.168.100.102 Servername: SQL2SQL2

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

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

     

    准备共享文件夹

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

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

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

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

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

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

    在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:primaryBackupLogAdventureWorks.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:secondaryBackupAdventureWorks.BAK' WITH  FILE = 1,  
    4 MOVE N'AdventureWorks2012_Data' TO N'C:Program FilesMicrosoft SQL ServerMSSQL11.SQL2MSSQLDATAAdventureWorks2012_Data.mdf', 
    5 MOVE N'AdventureWorks2012_Log' TO N'C:Program FilesMicrosoft SQL ServerMSSQL11.SQL2MSSQLDATAAdventureWorks2012_log.ldf',  
    6 STANDBY = N'C:secondaryBackupAdventureWorks.BAK_S',
    7 NOUNLOAD,  STATS = 10
    8 GO

     设置备份选项

     配置复制作业

     

     以下为代码方式实现

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

     在SQL1 上进行测试

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

    Step By Step SQL Server Log Shipping

    Configure Log Shipping (SQL Server)

  • 相关阅读:
    每周必写
    每周必写
    每周必写
    中国历史上成功的两人合作, 改进, 提高的例子
    每周必写(3)
    结对编程进度及自己的理解
    每周必写
    IT行业的“创新”、“模仿”
    工作时间内容,感想和思考
    周阅读内容
  • 原文地址:https://www.cnblogs.com/SignalTips/p/3999673.html
Copyright © 2020-2023  润新知