SQLServer教程FG046-SQLServer灾备方案实战
目录大纲
内容简介
本文档基于SQLServer官方文档的灾备相关内容,结合生产环境实际情况,详细讲解SQLServer灾备方案的设计、实施、监控与维护等内容。风哥教程参考SQLServer官方文档High Availability、Disaster Recovery等相关章节。
Part01-基础概念与理论知识
1.1 灾备概念
灾备概念:
- 灾备(Disaster Recovery,DR)是指在发生自然灾害、人为故障等灾难时,能够快速恢复系统运行的能力
- 灾备的目标是确保业务连续性,最小化数据丢失和停机时间
- 灾备包括数据备份、恢复策略、故障转移机制等
- 灾备方案应根据业务重要性和RTO(恢复时间目标)、RPO(恢复点目标)要求制定
更多视频教程www.fgedu.net.cn
1.2 灾备级别
灾备级别:
- Level 0:无灾备,仅本地备份
- Level 1:本地冗余,如RAID、本地备份
- Level 2:异地备份,定期将备份数据发送到异地
- Level 3:热备份,实时复制数据到异地
- Level 4:容错,多站点同时运行,自动故障转移
学习交流加群风哥微信: itpux-com
1.3 灾备技术
灾备技术:
- 备份与恢复:完整备份、差异备份、事务日志备份
- 复制技术:数据库镜像、日志传送、AlwaysOn可用性组
- 集群技术:故障转移集群、多站点集群
- 存储技术:存储复制、SAN复制
- 云服务:Azure Site Recovery、AWS Disaster Recovery
学习交流加群风哥QQ113257174
Part02-生产环境规划与建议
2.1 灾备规划原则
灾备规划原则:
- 业务导向:根据业务重要性和需求制定灾备策略
- 风险评估:识别潜在的灾难风险和影响
- 成本效益:平衡灾备投入与业务价值
- 可扩展性:灾备方案应具备可扩展性,适应业务增长
- 可测试性:定期测试灾备方案的有效性
- 自动化:尽可能实现灾备操作的自动化
- 文档化:详细记录灾备方案和操作流程
风哥提示:灾备规划应从业务需求出发,综合考虑RTO、RPO、成本等因素
2.2 灾备架构设计
灾备架构设计:
- 本地灾备:同一数据中心内的灾备方案
- 异地灾备:跨数据中心的灾备方案
- 多站点灾备:多个数据中心的灾备方案
- 混合灾备:结合本地和云服务的灾备方案
- 分层灾备:根据数据重要性采用不同级别的灾备策略
更多学习教程公众号风哥教程itpux_com
2.3 灾备演练计划
灾备演练计划:
- 定期演练:每季度或半年进行一次灾备演练
- 演练类型:全流程演练、部分演练、桌面演练
- 演练内容:故障转移、数据恢复、业务切换
- 演练评估:记录演练过程,评估演练效果
- 演练改进:根据演练结果优化灾备方案
from SQLServer视频:www.itpux.com
Part03-生产环境项目实施方案
3.1 灾备方案设计
灾备方案设计:
— 评估业务重要性、RTO和RPO要求
— 确定关键业务系统和数据
— 步骤2:风险评估
— 识别潜在的灾难风险
— 评估灾难对业务的影响
— 步骤3:选择灾备技术
— 根据业务需求选择合适的灾备技术
— 评估技术可行性和成本
— 步骤4:设计灾备架构
— 本地灾备设计
— 异地灾备设计
— 多站点灾备设计
— 步骤5:制定灾备策略
— 备份策略:完整备份、差异备份、事务日志备份
— 复制策略:数据库镜像、日志传送、AlwaysOn可用性组
— 恢复策略:故障转移流程、恢复步骤
— 步骤6:制定灾备计划
— 灾备实施计划
— 灾备演练计划
— 灾备维护计划
— 步骤7:编写灾备文档
— 灾备架构文档
— 灾备操作手册
— 灾备演练记录
执行结果:
– 业务系统:销售系统
– 重要性:高
– RTO:4小时
– RPO:15分钟
– 关键数据:销售订单、客户信息、库存数据
风险评估报告:
– 自然灾害:地震、洪水、台风
– 人为故障:硬件故障、软件故障、人为误操作
– 网络故障:网络中断、DDoS攻击
灾备技术选择:
– 本地灾备:AlwaysOn可用性组(同步复制)
– 异地灾备:日志传送(异步复制)
灾备架构设计:
– 主站点:生产数据中心
– 本地灾备:同一数据中心内的备用服务器
– 异地灾备:远程数据中心的备用服务器
3.2 灾备实施
灾备实施:
— 部署备用服务器
— 配置网络连接
— 安装SQLServer
— 步骤2:配置本地灾备(AlwaysOn可用性组)
— 启用AlwaysOn功能
— 创建可用性组
— 添加数据库到可用性组
— 步骤3:配置异地灾备(日志传送)
— 配置主数据库
— 配置辅助数据库
— 启动日志传送
— 步骤4:配置备份策略
— 完整备份:每天凌晨2点
— 差异备份:每6小时
— 事务日志备份:每15分钟
— 步骤5:配置监控
— 监控可用性组状态
— 监控日志传送状态
— 监控备份状态
— 步骤6:测试灾备方案
— 测试故障转移
— 测试数据恢复
— 测试业务切换
— 步骤7:文档更新
— 更新灾备架构文档
— 更新灾备操作手册
— 记录测试结果
执行结果:
– 服务器名称:fgedu-dr-01
– IP地址:192.168.1.101
– SQLServer版本:2022 Enterprise Edition
AlwaysOn可用性组配置完成:
– 可用性组名称:AG_fgedudb
– 主副本:fgedu-prod-01
– 辅助副本:fgedu-dr-01
– 同步模式:同步提交
日志传送配置完成:
– 主数据库:fgedudb
– 辅助数据库:fgedudb_DR
– 备份目录:\\fgedu-prod-01\Backup\
– 复制目录:\\fgedu-dr-02\Backup\
– 还原目录:D:\SQLServer\Backup\
备份策略配置完成:
– 完整备份:每天2:00,保留7天
– 差异备份:每6小时,保留3天
– 事务日志备份:每15分钟,保留1天
监控配置完成:
– SQL Server Agent作业:监控可用性组状态
– SQL Server Agent作业:监控日志传送状态
– SQL Server Agent作业:监控备份状态
测试结果:
– 故障转移测试:成功,RTO=30分钟
– 数据恢复测试:成功,RPO=15分钟
– 业务切换测试:成功
3.3 灾备监控与维护
灾备监控与维护:
— 创建监控作业
EXEC dbo.sp_add_job @job_name = N’MonitorAGStatus’;
EXEC dbo.sp_add_jobstep
@job_name = N’MonitorAGStatus’,
@step_name = N’Check AG Status’,
@subsystem = N’TSQL’,
@command = N’– 检查可用性组状态
SELECT
ag.name AS availability_group,
ar.replica_server_name,
ar.operational_state_desc,
ar.availability_mode_desc,
ar.failover_mode_desc,
ar.synchronization_health_desc
FROM sys.availability_groups ag
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id;
— 检查数据库同步状态
SELECT
db_name(dr.database_id) AS database_name,
dr.replica_id,
dr.synchronization_state_desc,
dr.synchronization_health_desc,
dr.last_hardened_lsn,
dr.last_redone_lsn
FROM sys.dm_hadr_database_replica_states dr;
‘,
@database_name = N’master’;
EXEC dbo.sp_add_schedule
@schedule_name = N’Every15Minutes’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 15,
@active_start_time = 000000;
EXEC dbo.sp_attach_schedule
@job_name = N’MonitorAGStatus’,
@schedule_name = N’Every15Minutes’;
EXEC dbo.sp_add_jobserver
@job_name = N’MonitorAGStatus’;
— 步骤2:监控日志传送状态
— 创建监控作业
EXEC dbo.sp_add_job @job_name = N’MonitorLogShipping’;
EXEC dbo.sp_add_jobstep
@job_name = N’MonitorLogShipping’,
@step_name = N’Check Log Shipping Status’,
@subsystem = N’TSQL’,
@command = N’– 检查日志传送状态
EXEC msdb.dbo.sp_help_log_shipping_monitor;
— 检查主数据库状态
SELECT
primary_database,
last_backup_file,
last_backup_date,
last_backup_size
FROM msdb.dbo.log_shipping_monitor_primary;
— 检查辅助数据库状态
SELECT
secondary_server,
secondary_database,
last_restored_file,
last_restored_date,
last_restored_lsn
FROM msdb.dbo.log_shipping_monitor_secondary;
‘,
@database_name = N’master’;
EXEC dbo.sp_add_schedule
@schedule_name = N’Every15Minutes’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 15,
@active_start_time = 000000;
EXEC dbo.sp_attach_schedule
@job_name = N’MonitorLogShipping’,
@schedule_name = N’Every15Minutes’;
EXEC dbo.sp_add_jobserver
@job_name = N’MonitorLogShipping’;
— 步骤3:监控备份状态
— 创建监控作业
EXEC dbo.sp_add_job @job_name = N’MonitorBackups’;
EXEC dbo.sp_add_jobstep
@job_name = N’MonitorBackups’,
@step_name = N’Check Backup Status’,
@subsystem = N’TSQL’,
@command = N’– 检查备份状态
SELECT
database_name,
type,
backup_start_date,
backup_finish_date,
backup_size / 1024 / 1024 AS backup_size_mb,
physical_device_name
FROM msdb.dbo.backupset b
JOIN msdb.dbo.backupmediafamily m ON b.media_set_id = m.media_set_id
WHERE b.backup_start_date > DATEADD(day, -1, GETDATE())
ORDER BY b.backup_start_date DESC;
‘,
@database_name = N’master’;
EXEC dbo.sp_add_schedule
@schedule_name = N’EveryHour’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 60,
@active_start_time = 000000;
EXEC dbo.sp_attach_schedule
@job_name = N’MonitorBackups’,
@schedule_name = N’EveryHour’;
EXEC dbo.sp_add_jobserver
@job_name = N’MonitorBackups’;
— 步骤4:定期维护
— 检查数据库完整性
DBCC CHECKDB(‘fgedudb’) WITH NO_INFOMSGS;
— 更新统计信息
UPDATE STATISTICS fgedu.sales WITH FULLSCAN;
— 重建索引
ALTER INDEX ALL ON fgedu.sales REBUILD WITH (ONLINE = ON, FILLFACTOR = 80);
— 步骤5:灾备演练
— 制定演练计划
— 执行演练
— 记录演练结果
— 优化灾备方案
执行结果:
日志传送状态监控作业创建成功。
备份状态监控作业创建成功。
数据库完整性检查结果:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
统计信息更新成功。
索引重建成功。
灾备演练结果:
– 演练日期:2025-04-08
– 演练类型:全流程演练
– 演练结果:成功
– RTO:30分钟
– RPO:15分钟
– 发现问题:无
– 改进措施:无
Part04-生产案例与实战讲解
4.1 本地灾备案例
本地灾备实战:
— 步骤1:准备环境
— 服务器:
— fgedu-prod-01:主服务器
— fgedu-dr-01:备用服务器
— 步骤2:启用AlwaysOn功能
— 在两台服务器上启用AlwaysOn功能
— 重启SQLServer服务
— 步骤3:创建可用性组
— 在主服务器上执行
CREATE AVAILABILITY GROUP [AG_fgedudb]
FOR DATABASE [fgedudb]
REPLICA ON
N’fgedu-prod-01′ WITH (
ENDPOINT_URL = N’TCP://fgedu-prod-01:5022′,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE (ALLOW_CONNECTIONS = NO)
),
N’fgedu-dr-01′ WITH (
ENDPOINT_URL = N’TCP://fgedu-dr-01:5022′,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE (ALLOW_CONNECTIONS = NO)
);
GO
— 步骤4:验证可用性组状态
SELECT
ag.name AS availability_group,
ar.replica_server_name,
ar.operational_state_desc,
ar.availability_mode_desc,
ar.failover_mode_desc,
ar.synchronization_health_desc
FROM sys.availability_groups ag
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id;
GO
— 步骤5:测试故障转移
— 手动故障转移
ALTER AVAILABILITY GROUP [AG_fgedudb] FAILOVER;
GO
— 验证故障转移结果
SELECT
ag.name AS availability_group,
ar.replica_server_name,
ar.operational_state_desc,
ar.availability_mode_desc,
ar.failover_mode_desc,
ar.synchronization_health_desc
FROM sys.availability_groups ag
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id;
GO
— 步骤6:故障转移回主服务器
ALTER AVAILABILITY GROUP [AG_fgedudb] FAILOVER;
GO
— 步骤7:配置监控
— 创建监控作业
EXEC dbo.sp_add_job @job_name = N’MonitorAGStatus’;
EXEC dbo.sp_add_jobstep
@job_name = N’MonitorAGStatus’,
@step_name = N’Check AG Status’,
@subsystem = N’TSQL’,
@command = N’SELECT
ag.name AS availability_group,
ar.replica_server_name,
ar.operational_state_desc,
ar.availability_mode_desc,
ar.failover_mode_desc,
ar.synchronization_health_desc
FROM sys.availability_groups ag
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id;’,
@database_name = N’master’;
EXEC dbo.sp_add_schedule
@schedule_name = N’Every15Minutes’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 15,
@active_start_time = 000000;
EXEC dbo.sp_attach_schedule
@job_name = N’MonitorAGStatus’,
@schedule_name = N’Every15Minutes’;
EXEC dbo.sp_add_jobserver
@job_name = N’MonitorAGStatus’;
执行结果:
availability_group replica_server_name operational_state_desc availability_mode_desc failover_mode_desc synchronization_health_desc
—————— ——————- ——————— ——————– —————– —————————-
AG_fgedudb fgedu-prod-01 ONLINE SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
AG_fgedudb fgedu-dr-01 ONLINE SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
(2 rows affected)
Commands completed successfully.
availability_group replica_server_name operational_state_desc availability_mode_desc failover_mode_desc synchronization_health_desc
—————— ——————- ——————— ——————– —————– —————————-
AG_fgedudb fgedu-prod-01 ONLINE SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
AG_fgedudb fgedu-dr-01 PRIMARY SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
(2 rows affected)
Commands completed successfully.
availability_group replica_server_name operational_state_desc availability_mode_desc failover_mode_desc synchronization_health_desc
—————— ——————- ——————— ——————– —————– —————————-
AG_fgedudb fgedu-prod-01 PRIMARY SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
AG_fgedudb fgedu-dr-01 ONLINE SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
(2 rows affected)
Commands completed successfully.
4.2 异地灾备案例
异地灾备实战:
— 步骤1:准备环境
— 主服务器:fgedu-prod-01(北京)
— 异地服务器:fgedu-dr-02(上海)
— 步骤2:配置主数据库
— 在主服务器上执行
— 创建备份共享目录
— 授予SQLServer服务账户访问权限
— 步骤3:配置辅助数据库
— 在异地服务器上执行
— 创建数据库
CREATE DATABASE fgedudb_DR;
GO
— 将数据库设置为恢复模式
ALTER DATABASE fgedudb_DR SET RECOVERY FULL;
GO
— 备份主数据库
BACKUP DATABASE fgedudb TO DISK = ‘\\fgedu-prod-01\Backup\fgedudb.bak’ WITH INIT;
GO
— 还原到辅助数据库
RESTORE DATABASE fgedudb_DR FROM DISK = ‘\\fgedu-prod-01\Backup\fgedudb.bak’
WITH NORECOVERY,
MOVE ‘fgedudb’ TO ‘D:\SQLServer\Data\fgedudb_DR.mdf’,
MOVE ‘fgedudb_log’ TO ‘D:\SQLServer\Log\fgedudb_DR_log.ldf’;
GO
— 步骤4:配置日志传送
— 在主服务器上执行
EXEC msdb.dbo.sp_add_log_shipping_primary_database
@database = N’fgedudb’,
@backup_directory = N’\\fgedu-prod-01\Backup\’,
@backup_share = N’\\fgedu-prod-01\Backup\’,
@backup_job_name = N’LSBackup_fgedudb’,
@backup_retention_period = 4320,
@backup_compression = 1,
@backup_threshold = 60,
@threshold_alert_enabled = 1,
@history_retention_period = 5760;
GO
— 获取主数据库ID
DECLARE @primary_id UNIQUEIDENTIFIER;
SELECT @primary_id = primary_id
FROM msdb.dbo.log_shipping_primary_databases
WHERE primary_database = N’fgedudb’;
— 添加辅助数据库
EXEC msdb.dbo.sp_add_log_shipping_secondary_primary
@primary_server = N’fgedu-prod-01′,
@primary_database = N’fgedudb’,
@backup_source_directory = N’\\fgedu-prod-01\Backup\’,
@backup_destination_directory = N’D:\SQLServer\Backup\’,
@copy_job_name = N’LSCopy_fgedu-prod-01_fgedudb’,
@restore_job_name = N’LSRestore_fgedu-prod-01_fgedudb’,
@file_retention_period = 4320,
@secondary_database = N’fgedudb_DR’,
@overwrite = 1,
@copy_threshold = 60,
@restore_threshold = 60,
@threshold_alert_enabled = 1,
@history_retention_period = 5760,
@monitor_server = N’fgedu-prod-01′,
@monitor_server_security_mode = 1;
GO
— 步骤5:启动日志传送作业
— 启动备份作业
EXEC msdb.dbo.sp_start_job N’LSBackup_fgedudb’;
— 启动复制作业
EXEC msdb.dbo.sp_start_job N’LSCopy_fgedu-prod-01_fgedudb’;
— 启动还原作业
EXEC msdb.dbo.sp_start_job N’LSRestore_fgedu-prod-01_fgedudb’;
— 步骤6:监控日志传送状态
EXEC msdb.dbo.sp_help_log_shipping_monitor;
GO
— 步骤7:测试灾备
— 模拟主服务器故障
— 在异地服务器上执行
RESTORE DATABASE fgedudb_DR WITH RECOVERY;
GO
— 验证数据完整性
SELECT TOP 10 * FROM fgedu.sales;
GO
执行结果:
Commands completed successfully.
Processed 288 pages for database ‘fgedudb’, file ‘fgedudb’ on file 1.
Processed 2 pages for database ‘fgedudb’, file ‘fgedudb_log’ on file 1.
BACKUP DATABASE successfully processed 290 pages in 0.123 seconds (18.685 MB/sec).
Processed 288 pages for database ‘fgedudb_DR’, file ‘fgedudb’ on file 1.
Processed 2 pages for database ‘fgedudb_DR’, file ‘fgedudb_log’ on file 1.
RESTORE DATABASE successfully processed 290 pages in 0.156 seconds (14.826 MB/sec).
Commands completed successfully.
Commands completed successfully.
Commands completed successfully.
Commands completed successfully.
primary_database secondary_server secondary_database last_backup_date last_backup_file last_copied_date last_copied_file last_restored_date last_restored_file
————— —————- —————– —————– —————– —————– —————– —————— ——————
fgedudb fgedu-dr-02 fgedudb_DR 2025-04-08 10:00:00 \\fgedu-prod-01\Backup\fgedudb_20250408100000.trn 2025-04-08 10:01:00 D:\SQLServer\Backup\fgedudb_20250408100000.trn 2025-04-08 10:02:00 D:\SQLServer\Backup\fgedudb_20250408100000.trn
Commands completed successfully.
sale_id product_id customer_id sale_date amount status
———– ———– ———– ———————– ——————— ——————–
1 1 1001 2025-04-08 10:00:00.000 1000.00 COMPLETED
2 2 1002 2025-04-08 10:00:00.000 2000.00 COMPLETED
3 3 1003 2025-04-08 10:00:00.000 3000.00 PENDING
(3 rows affected)
4.3 多站点灾备案例
多站点灾备实战:
— 步骤1:准备环境
— 主站点:fgedu-prod-01(北京)
— 本地灾备站点:fgedu-dr-01(北京)
— 异地灾备站点:fgedu-dr-02(上海)
— 步骤2:配置本地灾备(AlwaysOn可用性组)
— 在主站点和本地灾备站点之间配置AlwaysOn可用性组
CREATE AVAILABILITY GROUP [AG_fgedudb]
FOR DATABASE [fgedudb]
REPLICA ON
N’fgedu-prod-01′ WITH (
ENDPOINT_URL = N’TCP://fgedu-prod-01:5022′,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE (ALLOW_CONNECTIONS = NO)
),
N’fgedu-dr-01′ WITH (
ENDPOINT_URL = N’TCP://fgedu-dr-01:5022′,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
SEEDING_MODE = AUTOMATIC,
SECONDARY_ROLE (ALLOW_CONNECTIONS = NO)
);
GO
— 步骤3:配置异地灾备(日志传送)
— 从本地灾备站点到异地灾备站点配置日志传送
— 在本地灾备站点上执行
EXEC msdb.dbo.sp_add_log_shipping_primary_database
@database = N’fgedudb’,
@backup_directory = N’\\fgedu-dr-01\Backup\’,
@backup_share = N’\\fgedu-dr-01\Backup\’,
@backup_job_name = N’LSBackup_fgedudb’,
@backup_retention_period = 4320,
@backup_compression = 1,
@backup_threshold = 60,
@threshold_alert_enabled = 1,
@history_retention_period = 5760;
GO
— 获取主数据库ID
DECLARE @primary_id UNIQUEIDENTIFIER;
SELECT @primary_id = primary_id
FROM msdb.dbo.log_shipping_primary_databases
WHERE primary_database = N’fgedudb’;
— 添加辅助数据库
EXEC msdb.dbo.sp_add_log_shipping_secondary_primary
@primary_server = N’fgedu-dr-01′,
@primary_database = N’fgedudb’,
@backup_source_directory = N’\\fgedu-dr-01\Backup\’,
@backup_destination_directory = N’D:\SQLServer\Backup\’,
@copy_job_name = N’LSCopy_fgedu-dr-01_fgedudb’,
@restore_job_name = N’LSRestore_fgedu-dr-01_fgedudb’,
@file_retention_period = 4320,
@secondary_database = N’fgedudb_DR’,
@overwrite = 1,
@copy_threshold = 60,
@restore_threshold = 60,
@threshold_alert_enabled = 1,
@history_retention_period = 5760,
@monitor_server = N’fgedu-prod-01′,
@monitor_server_security_mode = 1;
GO
— 步骤4:启动日志传送作业
— 启动备份作业
EXEC msdb.dbo.sp_start_job N’LSBackup_fgedudb’;
— 启动复制作业
EXEC msdb.dbo.sp_start_job N’LSCopy_fgedu-dr-01_fgedudb’;
— 启动还原作业
EXEC msdb.dbo.sp_start_job N’LSRestore_fgedu-dr-01_fgedudb’;
— 步骤5:配置监控
— 创建监控作业
EXEC dbo.sp_add_job @job_name = N’MonitorMultiSiteDR’;
EXEC dbo.sp_add_jobstep
@job_name = N’MonitorMultiSiteDR’,
@step_name = N’Check DR Status’,
@subsystem = N’TSQL’,
@command = N’– 检查可用性组状态
SELECT
ag.name AS availability_group,
ar.replica_server_name,
ar.operational_state_desc,
ar.availability_mode_desc,
ar.failover_mode_desc,
ar.synchronization_health_desc
FROM sys.availability_groups ag
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id;
— 检查日志传送状态
EXEC msdb.dbo.sp_help_log_shipping_monitor;’,
@database_name = N’master’;
EXEC dbo.sp_add_schedule
@schedule_name = N’Every15Minutes’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 15,
@active_start_time = 000000;
EXEC dbo.sp_attach_schedule
@job_name = N’MonitorMultiSiteDR’,
@schedule_name = N’Every15Minutes’;
EXEC dbo.sp_add_jobserver
@job_name = N’MonitorMultiSiteDR’;
— 步骤6:测试多站点灾备
— 测试本地故障转移
ALTER AVAILABILITY GROUP [AG_fgedudb] FAILOVER;
GO
— 测试异地灾备
— 在异地服务器上执行
RESTORE DATABASE fgedudb_DR WITH RECOVERY;
GO
— 验证数据完整性
SELECT TOP 10 * FROM fgedu.sales;
GO
执行结果:
Commands completed successfully.
Commands completed successfully.
Commands completed successfully.
Commands completed successfully.
Commands completed successfully.
Commands completed successfully.
availability_group replica_server_name operational_state_desc availability_mode_desc failover_mode_desc synchronization_health_desc
—————— ——————- ——————— ——————– —————– —————————-
AG_fgedudb fgedu-prod-01 ONLINE SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
AG_fgedudb fgedu-dr-01 PRIMARY SYNCHRONOUS_COMMIT AUTOMATIC HEALTHY
(2 rows affected)
primary_database secondary_server secondary_database last_backup_date last_backup_file last_copied_date last_copied_file last_restored_date last_restored_file
————— —————- —————– —————– —————– —————– —————– —————— ——————
fgedudb fgedu-dr-02 fgedudb_DR 2025-04-08 10:00:00 \\fgedu-dr-01\Backup\fgedudb_20250408100000.trn 2025-04-08 10:01:00 D:\SQLServer\Backup\fgedudb_20250408100000.trn 2025-04-08 10:02:00 D:\SQLServer\Backup\fgedudb_20250408100000.trn
Commands completed successfully.
sale_id product_id customer_id sale_date amount status
———– ———– ———– ———————– ——————— ——————–
1 1 1001 2025-04-08 10:00:00.000 1000.00 COMPLETED
2 2 1002 2025-04-08 10:00:00.000 2000.00 COMPLETED
3 3 1003 2025-04-08 10:00:00.000 3000.00 PENDING
(3 rows affected)
Part05-风哥经验总结与分享
5.1 灾备最佳实践
灾备最佳实践:
- 分层灾备:根据数据重要性采用不同级别的灾备策略
- 多站点架构:部署多个灾备站点,提高可靠性
- 自动化操作:实现灾备操作的自动化,减少人为错误
- 定期演练:每季度或半年进行一次灾备演练
- 监控体系:建立完善的监控体系,及时发现问题
- 文档化:详细记录灾备方案和操作流程
- 持续改进:根据演练结果和业务需求持续优化灾备方案
- 培训:对运维人员进行灾备培训,提高应急响应能力
更多视频教程www.fgedu.net.cn
5.2 灾备常见问题
常见问题:
- 网络带宽不足:异地灾备需要足够的网络带宽
- 存储不足:灾备站点需要足够的存储空间
- 同步延迟:异步复制可能导致数据同步延迟
- 演练不充分:灾备演练不充分,导致实际灾难发生时无法有效响应
- 监控不到位:监控体系不完善,无法及时发现问题
- 文档不全:灾备文档不完整,导致操作流程不清晰
- 人员培训不足:运维人员对灾备方案不熟悉,影响应急响应速度
学习交流加群风哥微信: itpux-com
5.3 灾备性能优化
性能优化:
- 网络优化:使用高速网络连接,如专线、MPLS等
- 存储优化:使用高性能存储设备,如SSD
- 复制优化:根据网络带宽调整复制频率和压缩选项
- 备份优化:使用压缩备份,减少备份时间和存储空间
- 监控优化:建立实时监控体系,及时发现性能问题
- 自动化优化:实现灾备操作的自动化,减少人工干预
- 资源优化:合理配置服务器资源,确保灾备站点性能
- 测试优化:定期测试灾备性能,及时发现并解决问题
学习交流加群风哥QQ113257174
风哥提示:灾备方案是确保业务连续性的重要保障,应根据业务需求和风险评估制定合适的灾备策略,并定期进行演练和优化。
更多学习教程公众号风哥教程itpux_com
from SQLServer视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
