sql2022 on linux 日志传送配置

必备条件

在 Linux 上安装 SQL Server 代理(所有节点)

本文介绍如何在 Linux 上启用或安装 SQL Server 代理。

SQL Server 代理运行计划的 SQL Server 作业。 从 SQL Server 2017 (14.x) CU 4 开始,SQL Server 代理包含在 mssql-server 包中,默认情况下处于禁用状态。 有关此版本 SQL Server 代理支持的功能和版本信息,请参阅 Linux 上的 SQL Server 2017 发行说明

说明

必须先按照以下步骤在 Linux 上启用或安装 SQL Server 代理后,才能使用该代理。

  1. /etc/hosts 文件中添加主机名(包含和不包含域)。 以下行展示了这些条目的格式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    "IP Address" "hostname"
    "IP Address" "hostname.domain.com"

    # 如下:
    [root@sql2022-primary /]# cat /etc/hosts
    127.0.0.1 localhost
    ::1 localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    10.10.10.126 sql2022-primary
    10.10.10.127 sql2022-standby
    [root@sql2022-primary /]#
  2. 根据你的 SQL Server 版本,按照以下某个部分中的说明进行操作:

    版本 说明
    SQL Server 2017 (14.x) CU 4 及更高版本 [启用 SQL Server 代理](#启用 SQL Server 代理)
    SQL Server 2017 (14.x) CU 3 及更低版本 [安装 SQL Server 代理](#安装 SQL Server 代理)

启用 SQL Server 代理

对于 SQL Server 2017 (14.x) CU 4 及更高版本,只需启用 SQL Server 代理。 无需安装单独的包。

若要启用 SQL Server 代理,请按照以下步骤进行操作。

1
2
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server

如果在安装了代理的情况下从 SQL Server 2017 (14.x) CU 3 或更低版本进行升级,将自动启用 SQL Server 代理并卸载以前的代理包。

[!note]

SQL Server Management Studio 对象资源管理器不会显示 SQL Server 代理节点的内容,除非启用了 代理 XPs 服务器配置选项,与 SQL Server 代理服务状态无关。

安装 SQL Server 代理

对于 SQL Server 2017 (14.x) CU 3 及更低版本,必须安装 SQL Server 代理包。

以下安装说明仅适用于 SQL Server 2017 (14.x) CU 3 及更低版本。 在安装 SQL Server 代理之前,请先安装 SQL Server,其会在安装 mssql-server-agent 包时配置所需的密钥和存储库。

为平台安装 SQL Server 代理。

  • RHEL

    通过下列步骤在 Red Hat Enterprise Linux 上安装 mssql-server-agent。

    1
    2
    sudo yum install mssql-server-agent
    sudo systemctl restart mssql-server

    如果安装了 mssql-server-agent,则可使用下列命令将其更新至最新版本:

    1
    2
    3
    sudo yum check-update
    sudo yum update mssql-server-agent
    sudo systemctl restart mssql-server

    如果需要脱机安装,请在Linux 上的 SQL Server 2017 发行说明中找到 SQL Server 代理包下载。 然后执行与文章安装 SQL Server 所述相同的脱机安装步骤。

  • Ubuntu

    通过下列步骤在 Ubuntu 上安装 mssql-server-agent。

    1
    2
    3
    sudo apt-get update
    sudo apt-get install mssql-server-agent
    sudo systemctl restart mssql-server

    如果安装了 mssql-server-agent,则可使用下列命令将其更新至最新版本:

    1
    2
    3
    sudo apt-get update
    sudo apt-get install mssql-server-agent
    sudo systemctl restart mssql-server

    如果需要脱机安装,请在Linux 上的 SQL Server 2017 发行说明中找到 SQL Server 代理包下载。 然后执行与文章安装 SQL Server 所述相同的脱机安装步骤。

  • SLES

    通过下列步骤在 SUSE Linux Enterprise Server 上安装 mssql-server-agent。

    安装 mssql-server-agent

    1
    2
    sudo zypper install mssql-server-agent
    sudo systemctl restart mssql-server

    如果安装了 mssql-server-agent,则可使用下列命令将其更新至最新版本:

    1
    2
    3
    sudo zypper refresh
    sudo zypper update mssql-server-agent
    sudo systemctl restart mssql-server

    如果需要脱机安装,请在Linux 上的 SQL Server 2017 发行说明中找到 SQL Server 代理包下载。 然后执行与文章安装 SQL Server 所述相同的脱机安装步骤。

基于NFS配置日志传送

其过程跟基于CIFS的没啥不同

生成测试机

1
2
3
4
5
[root@docker2 ~]# docker run --name sql2022-primary --hostname sql2022-primary --network=ipvlan-l2 --ip=10.10.10.126 --mount source=mssqlbackup,target=/mssqlbackup --privileged -d registry.cn-hangzhou.aliyuncs.com/zonghengsihai/mssql:sql2022-developer-20241125 /sbin/init
616a397776536fdfe42a0bd21862a2d034b8cc29ecb4b6aa957f40cb65c69600

[root@docker2 ~]# docker run --name sql2022-standby --hostname sql2022-standby --network=ipvlan-l2 --ip=10.10.10.127 --privileged -d registry.cn-hangzhou.aliyuncs.com/zonghengsihai/mssql:sql2022-developer-20241125 /sbin/init
a6b215884947392025108e72d10eacb3dcd14190dde29d228068ea37714b224f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-- 主服务器中创建主数据库DB-Primary,并创建测试数据
USE [master]
GO

CREATE DATABASE [DB-Primary]
GO

USE [DB-Primary]
GO
CREATE TABLE SQLTest
(
ID INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100) NOT NULL,
dt1 DATETIME NOT NULL DEFAULT getdate()
);
GO

USE [DB-Primary]
GO

INSERT INTO SQLTest (ID, c1) VALUES (1, 'test1')
INSERT INTO SQLTest (ID, c1) VALUES (2, 'test2')
INSERT INTO SQLTest (ID, c1) VALUES (3, 'test3')
INSERT INTO SQLTest (ID, c1) VALUES (4, 'test4')
INSERT INTO SQLTest (ID, c1) VALUES (5, 'test5')
GO

SELECT * FROM SQLTest
GO

-- 更改恢复模式
select name,recovery_model_desc from sys.databases;
alter database "db-primary" set recovery full;

共享目录配置

  1. 配置主数据库使用完整恢复模式,并在主服务器上配置一个共享文件见用来存储主数据库的事务日志备份

    在配置日志传送之前,您必须创建共享,以便辅助服务器可以访问事务日志备份。 这是对生成事务日志备份的目录的共享。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    # 安装NFS
    dnf install -y nfs-utils.x86_64
    systemctl enable nfs-server --now

    # 创建事务日志备份目录
    [root@sql2022 /]# mkdir /mssqlbckup
    [root@sql2022 /]# chmod a+w /mssqlbackup/

    # 配置NFS
    vi /etc/exports
    /mssqlbackup *(rw) # 所有人可以读写
    systemctl restart nfs-server

    # 查看
    [root@sql2022 /]# exportfs -v
    /mssqlbackup <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
    [root@sql2022 /]# showmount -e localhost
    Export list for localhost:
    /mssqlbackup *
    [root@sql2022 /]# exportfs -ra
    [root@sql2022 /]#

    # 主库设置目录权限后备库会自定相同
    [root@sql2022 /]# chmod 777 /mssqlbackup
    [root@sql2022 /]# ll /
    total 8
    dr-xr-xr-x 2 root root 6 May 16 2022 afs
    lrwxrwxrwx 1 root root 7 May 16 2022 bin -> usr/bin
    drwxr-xr-x 15 root root 3160 Jun 12 16:23 dev
    drwxr-xr-x 1 root root 4096 Jun 12 16:29 etc
    drwxr-xr-x 2 root root 6 May 16 2022 home
    lrwxrwxrwx 1 root root 7 May 16 2022 lib -> usr/lib
    lrwxrwxrwx 1 root root 9 May 16 2022 lib64 -> usr/lib64
    drwx------ 2 root root 6 May 14 2023 lost+found
    drwxr-xr-x 2 root root 6 May 16 2022 media
    drwxr-xr-x 2 root root 6 May 16 2022 mnt
    drwxrwxrwx 2 root root 6 Jun 12 16:00 mssqlbackup
    drwxr-xr-x 5 root root 57 Nov 25 2024 opt
    dr-xr-xr-x 626 root root 0 Jun 12 16:23 proc
    dr-xr-x--- 1 root root 22 Jun 12 16:29 root
    drwxr-xr-x 16 root root 520 Jun 12 16:28 run
    lrwxrwxrwx 1 root root 8 May 16 2022 sbin -> usr/sbin
    drwxr-xr-x 2 root root 6 May 16 2022 srv
    dr-xr-xr-x 13 root root 0 Jun 12 16:23 sys
    drwxrwxrwt 1 root root 4096 Jun 14 13:25 tmp
    drwxr-xr-x 1 root root 81 May 14 2023 usr
    drwxr-xr-x 1 root root 76 Jun 29 2023 var
    [root@sql2022 /]#
  2. 备库上挂载主库上的NFS目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 安装showmount
    dnf install nfs-utils-1:2.5.4-34.el9.x86_64
    # 必须安装,否则挂在时提示:
    [root@sql2022-standby /]# mount -t nfs 10.10.10.126:/mssqlbackup /primarydb_backups/
    mount: /primarydb_backups: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.

    [root@sql2022 /]# showmount –e 10.10.10.126
    showmount: only one hostname is allowed
    [root@sql2022 /]#

    # 挂载
    [root@sql2022 /]# mount -t nfs 10.10.10.126:/mssqlbackup /primarydb_backups/
    [root@sql2022 /]# df -Th
    Filesystem Type Size Used Avail Use% Mounted on
    overlay overlay 200G 133G 68G 67% /
    tmpfs tmpfs 64M 0 64M 0% /dev
    shm tmpfs 64M 0 64M 0% /dev/shm
    /dev/mapper/docker_vg-docker_lv xfs 200G 133G 68G 67% /etc/hosts
    tmpfs tmpfs 6.3G 8.1M 6.3G 1% /run
    10.10.10.126:/mssqlbackup nfs 200G 133G 68G 67% /primarydb_backups
    [root@sql2022 /]#

配置SQL Server日志传送

  1. 在主服务器上备份数据库:

    1
    2
    3
    4
    5
    6
    7
    8
    ALTER DATABASE "DB-Primary" SET RECOVERY FULL;

    USE [DB-Primary];
    GO
    BACKUP DATABASE [DB-Primary]
    TO DISK='/mssqlbackup/DB-Primary.bak'
    WITH NOINIT,MEDIANAME='DB-Primary Backup Media',NAME='Full Backup of DB-Primary';
    go
  2. 在主服务器上配置日志传送:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    DECLARE @LS_BackupJobId AS UNIQUEIDENTIFIER;
    DECLARE @LS_PrimaryId AS UNIQUEIDENTIFIER;
    DECLARE @SP_Add_RetCode AS INT;

    EXECUTE @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database
    @database = N'DB-Primary',
    @backup_directory = N'/mssqlbackup',
    @backup_share = N'/mssqlbackup',
    @backup_job_name = N'LSBackup_DB-Primary',
    @backup_retention_period = 4320,
    @backup_compression = 2,
    @backup_threshold = 60,
    @threshold_alert_enabled = 1,
    @history_retention_period = 5760,
    @backup_job_id = @LS_BackupJobId OUTPUT,
    @primary_id = @LS_PrimaryId OUTPUT,
    @overwrite = 1;

    IF (@@ERROR = 0 AND @SP_Add_RetCode = 0)
    BEGIN
    DECLARE @LS_BackUpScheduleUID AS UNIQUEIDENTIFIER;
    DECLARE @LS_BackUpScheduleID AS INT;

    EXECUTE msdb.dbo.sp_add_schedule
    @schedule_name = N'LSBackupSchedule',
    @enabled = 1,
    @freq_type = 4,
    @freq_interval = 1,
    @freq_subday_type = 4,
    @freq_subday_interval = 15,
    @freq_recurrence_factor = 0,
    @active_start_date = 20170418,
    @active_end_date = 99991231,
    @active_start_time = 0,
    @active_end_time = 235900,
    @schedule_uid = @LS_BackUpScheduleUID OUTPUT,
    @schedule_id = @LS_BackUpScheduleID OUTPUT;

    EXECUTE msdb.dbo.sp_attach_schedule
    @job_id = @LS_BackupJobId,
    @schedule_id = @LS_BackUpScheduleID;

    EXECUTE msdb.dbo.sp_update_job @job_id = @LS_BackupJobId, @enabled = 1;
    END

    EXECUTE master.dbo.sp_add_log_shipping_alert_job;

    EXECUTE master.dbo.sp_add_log_shipping_primary_secondary
    @primary_database = N'DB-Primary',
    @secondary_server = N'10.10.10.127',
    @secondary_database = N'DB-Standby',
    @overwrite = 1;
  3. 在辅助服务器上还原数据库:

    1
    2
    3
    RESTORE DATABASE [DB-Standby]
    FROM DISK = '/primarydb_backups/DB-Primary.bak'
    WITH NORECOVERY;
  4. 在辅助服务器上配置日志传送:

    备库上先创建一个用来存储备库日志的目录:(看官方示例,其实所谓的源和目标都可以使用/primarydb_backups/

    1
    2
    3
    4
    [root@sql2022-standby /]# mkdir /standbydb_backups
    [root@sql2022-standby /]# chmod 777 /standbydb_backups
    [root@sql2022-standby /]#

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    DECLARE @LS_Secondary__CopyJobId AS UNIQUEIDENTIFIER;
    DECLARE @LS_Secondary__RestoreJobId AS UNIQUEIDENTIFIER;
    DECLARE @LS_Secondary__SecondaryId AS UNIQUEIDENTIFIER;
    DECLARE @LS_Add_RetCode AS INT;

    EXECUTE @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary
    @primary_server = N'10.10.10.126',
    @primary_database = N'DB-Primary',
    @backup_source_directory = N'/primarydb_backups/',
    @backup_destination_directory = N'/standbydb_backups/',
    @copy_job_name = N'LSCopy_10.10.10.126_DB-Primary',
    @restore_job_name = N'LSRestore_10.10.10.126_DB-Primary',
    @file_retention_period = 4320,
    @overwrite = 1,
    @copy_job_id = @LS_Secondary__CopyJobId OUTPUT,
    @restore_job_id = @LS_Secondary__RestoreJobId OUTPUT,
    @secondary_id = @LS_Secondary__SecondaryId OUTPUT

    IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
    BEGIN
    DECLARE @LS_SecondaryCopyJobScheduleUID AS UNIQUEIDENTIFIER;
    DECLARE @LS_SecondaryCopyJobScheduleID AS INT;

    EXECUTE msdb.dbo.sp_add_schedule
    @schedule_name = N'DefaultCopyJobSchedule',
    @enabled = 1,
    @freq_type = 4,
    @freq_interval = 1,
    @freq_subday_type = 4,
    @freq_subday_interval = 15,
    @freq_recurrence_factor = 0,
    @active_start_date = 20170418,
    @active_end_date = 99991231,
    @active_start_time = 0,
    @active_end_time = 235900,
    @schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT,
    @schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT;

    EXECUTE msdb.dbo.sp_attach_schedule
    @job_id = @LS_Secondary__CopyJobId,
    @schedule_id = @LS_SecondaryCopyJobScheduleID;

    DECLARE @LS_SecondaryRestoreJobScheduleUID AS UNIQUEIDENTIFIER;
    DECLARE @LS_SecondaryRestoreJobScheduleID AS INT;

    EXECUTE msdb.dbo.sp_add_schedule
    @schedule_name = N'DefaultRestoreJobSchedule',
    @enabled = 1,
    @freq_type = 4,
    @freq_interval = 1,
    @freq_subday_type = 4,
    @freq_subday_interval = 15,
    @freq_recurrence_factor = 0,
    @active_start_date = 20170418,
    @active_end_date = 99991231,
    @active_start_time = 0,
    @active_end_time = 235900,
    @schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT,
    @schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT;

    EXECUTE msdb.dbo.sp_attach_schedule
    @job_id = @LS_Secondary__RestoreJobId,
    @schedule_id = @LS_SecondaryRestoreJobScheduleID;
    END

    DECLARE @LS_Add_RetCode2 AS INT;

    IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
    BEGIN
    EXECUTE @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database
    @secondary_database = N'DB-Standby',
    @primary_server = N'10.10.10.126',
    @primary_database = N'DB-Primary',
    @restore_delay = 0,
    @restore_mode = 0,
    @disconnect_users = 0,
    @restore_threshold = 45,
    @threshold_alert_enabled = 1,
    @history_retention_period = 5760,
    @overwrite = 1;
    END

    IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
    BEGIN
    EXECUTE msdb.dbo.sp_update_job
    @job_id = @LS_Secondary__CopyJobId,
    @enabled = 1;

    EXECUTE msdb.dbo.sp_update_job
    @job_id = @LS_Secondary__RestoreJobId,
    @enabled = 1;
    END

验证日志传送是否正常运行

  1. 通过在主服务器上启动以下作业来验证日志传送是否正常运行:

    1
    2
    3
    4
    5
    USE msdb;
    GO

    EXECUTE dbo.sp_start_job N'LSBackup_DB-Primary';
    GO
  2. 通过在辅助服务器上启动以下作业来验证日志传送是否正常运行:

    1
    2
    3
    4
    5
    6
    7
    8
    USE msdb;
    GO

    EXECUTE dbo.sp_start_job N'LSCopy_SampleDB';
    GO

    EXECUTE dbo.sp_start_job N'LSRestore_SampleDB';
    GO
  3. 可以通过SSMS的Agent中的作业,作业活动监视器,警报来查看日志传送作业执行的历史记录,其中有三个作业:

    • 警报作业
    • copy作业
    • restore作业
  4. 通过执行以下命令验证日志传送故障转移是否正常运行:

    [!caution]

    此命令将使辅助数据库处于联机状态并中断日志传送配置。 运行此命令后,将需要重新配置日志传送。

    1
    RESTORE DATABASE [DB-Standby] WITH RECOVERY;

关于监视库

以上测试中是没有使用监视库的,其配置方法参见下面通过SSMS导出的T-SQL代码。

也可以通过SSMS来添加监视实例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201

- 在数据库上执行以下语句以配置日志传送
- 对于数据库 [10.10.10.126].[DB-Primary],
- 脚本需要在 [msdb] 数据库的上下文中的主数据库上运行。
-------------------------------------------------------------------------------------
-- 添加日志传送配置

-- ****** 开始: 要在主服务器 [10.10.10.126] 上运行的脚本 ******


DECLARE @LS_BackupJobId AS uniqueidentifier
DECLARE @LS_PrimaryId AS uniqueidentifier
DECLARE @SP_Add_RetCode As int


EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database
@database = N'DB-Primary'
,@backup_directory = N'/mssqlbackup'
,@backup_share = N'/mssqlbackup'
,@backup_job_name = N'LSBackup_DB-Primary'
,@backup_retention_period = 4320
,@backup_compression = 2
,@monitor_server = N'10.10.10.128'
,@monitor_server_security_mode = 0
,@monitor_server_login = N'**********'
,@monitor_server_password = N'**********'
,@backup_threshold = 60
,@threshold_alert_enabled = 1
,@history_retention_period = 5760
,@backup_job_id = @LS_BackupJobId OUTPUT
,@primary_id = @LS_PrimaryId OUTPUT
,@overwrite = 1


IF (@@ERROR = 0 AND @SP_Add_RetCode = 0)
BEGIN

DECLARE @LS_BackUpScheduleUID As uniqueidentifier
DECLARE @LS_BackUpScheduleID AS int


EXEC msdb.dbo.sp_add_schedule
@schedule_name =N'LSBackupSchedule_10.10.10.1261'
,@enabled = 1
,@freq_type = 4
,@freq_interval = 1
,@freq_subday_type = 4
,@freq_subday_interval = 15
,@freq_recurrence_factor = 0
,@active_start_date = 20250613
,@active_end_date = 99991231
,@active_start_time = 0
,@active_end_time = 235900
,@schedule_uid = @LS_BackUpScheduleUID OUTPUT
,@schedule_id = @LS_BackUpScheduleID OUTPUT

EXEC msdb.dbo.sp_attach_schedule
@job_id = @LS_BackupJobId
,@schedule_id = @LS_BackUpScheduleID

EXEC msdb.dbo.sp_update_job
@job_id = @LS_BackupJobId
,@enabled = 1


END


EXEC master.dbo.sp_add_log_shipping_primary_secondary
@primary_database = N'DB-Primary'
,@secondary_server = N'10.10.10.127'
,@secondary_database = N'DB-Standby'
,@overwrite = 1

-- ****** 结束: 要在主服务器 [10.10.10.126] 上运行的脚本 ******


- 在辅助数据库执行以下语句以配置日志传送
- 对于数据库 [10.10.10.127].[DB-Standby],
- 脚本需要在 [msdb] 数据库的上下文中的辅助数据库上运行。
-------------------------------------------------------------------------------------
-- 添加日志传送配置

-- ****** 开始: 要在辅助服务器 [10.10.10.127] 上运行的脚本 ******


DECLARE @LS_Secondary__CopyJobId AS uniqueidentifier
DECLARE @LS_Secondary__RestoreJobId AS uniqueidentifier
DECLARE @LS_Secondary__SecondaryId AS uniqueidentifier
DECLARE @LS_Add_RetCode As int


EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary
@primary_server = N'10.10.10.126'
,@primary_database = N'DB-Primary'
,@backup_source_directory = N'/mssqlbackup'
,@backup_destination_directory = N'/tmp'
,@copy_job_name = N'LSCopy_10.10.10.126_DB-Primary'
,@restore_job_name = N'LSRestore_10.10.10.126_DB-Primary'
,@file_retention_period = 4320
,@monitor_server = N'10.10.10.128'
,@monitor_server_security_mode = 0
,@monitor_server_login = N'sa'
,@monitor_server_password = N'**********'
,@overwrite = 1
,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT
,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT
,@secondary_id = @LS_Secondary__SecondaryId OUTPUT

IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
BEGIN

DECLARE @LS_SecondaryCopyJobScheduleUID As uniqueidentifier
DECLARE @LS_SecondaryCopyJobScheduleID AS int


EXEC msdb.dbo.sp_add_schedule
@schedule_name =N'DefaultCopyJobSchedule'
,@enabled = 1
,@freq_type = 4
,@freq_interval = 1
,@freq_subday_type = 4
,@freq_subday_interval = 15
,@freq_recurrence_factor = 0
,@active_start_date = 20250613
,@active_end_date = 99991231
,@active_start_time = 0
,@active_end_time = 235900
,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT
,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT

EXEC msdb.dbo.sp_attach_schedule
@job_id = @LS_Secondary__CopyJobId
,@schedule_id = @LS_SecondaryCopyJobScheduleID

DECLARE @LS_SecondaryRestoreJobScheduleUID As uniqueidentifier
DECLARE @LS_SecondaryRestoreJobScheduleID AS int


EXEC msdb.dbo.sp_add_schedule
@schedule_name =N'DefaultRestoreJobSchedule'
,@enabled = 1
,@freq_type = 4
,@freq_interval = 1
,@freq_subday_type = 4
,@freq_subday_interval = 15
,@freq_recurrence_factor = 0
,@active_start_date = 20250613
,@active_end_date = 99991231
,@active_start_time = 0
,@active_end_time = 235900
,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT
,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT

EXEC msdb.dbo.sp_attach_schedule
@job_id = @LS_Secondary__RestoreJobId
,@schedule_id = @LS_SecondaryRestoreJobScheduleID


END


DECLARE @LS_Add_RetCode2 As int


IF (@@ERROR = 0 AND @LS_Add_RetCode = 0)
BEGIN

EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database
@secondary_database = N'DB-Standby'
,@primary_server = N'10.10.10.126'
,@primary_database = N'DB-Primary'
,@restore_delay = 0
,@restore_mode = 1
,@disconnect_users = 1
,@restore_threshold = 45
,@threshold_alert_enabled = 1
,@history_retention_period = 5760
,@overwrite = 1

END


IF (@@error = 0 AND @LS_Add_RetCode = 0)
BEGIN

EXEC msdb.dbo.sp_update_job
@job_id = @LS_Secondary__CopyJobId
,@enabled = 1

EXEC msdb.dbo.sp_update_job
@job_id = @LS_Secondary__RestoreJobId
,@enabled = 1

END


-- ****** 结束: 要在辅助服务器 [10.10.10.127] 上运行的脚本 ******



查看日志传送报表

  1. 连接到监视服务器、主服务器或辅助服务器。
  2. 在对象资源管理器中,右键单击服务器实例,依次指向“报表”和“标准报表”。
  3. 单击 “事务日志传送状态”

[!note]

SQL Server Management Studio (SSMS) 中的日志传送状态报告需要远程访问才能正常工作。