SQLServer异地复制是指把SQL Server之间的数据实时同步到另一个站点。异地复制功能可以大大提高企业的数据备份和容灾能力,是非常实用的一种技术。在异地复制之前,完成数据库测试是十分必要的,而为了保证同步服务的稳定性,更要做到以下几项最佳实践:
1. 设计合理的复制路径:异地复制的路径有时候会很长,如不需要,可以尽量将路径设置的短一些,以提高复制的速度。跳板机的设置也很重要,可以更准确的使用更安全的复制机制。
2. 清理和优化日志:要想达到最佳复制状态,最好将数据库日志清理一下,将不必要的记录清除,减少不必要的开销,以便系统更快地实现复制。
3. 设置主站点和从站点的超时时间:如果在设置复制的过程中,发现超时时间太长,可以调整超时时间,以保持良好的数据同步性。
4. 根据可靠的通信进行网络优化:复制的网络通信要尽可能的可靠,使用可靠的通信方式,如VPN等,或者直接在LAN网络下进行以保证数据的实时同步。
上面这些是达到最佳异地复制效果的常见最佳实践,以下是一段SQL Server异地复制的示例代码,供参考:
— 向远程服务器添加发布者和订阅者
EXEC sp_addpublication
@publication = N’PublicationName’,
@description = N’Transactional replication of [DatabaseName]’,
@type = N’logreader’,
@sync_mode = N’replication support only’,
@retention = 0,
@allow_push = N’true’,
@allow_pull = N’true’,
@allow_anonymous = N’true’,
@enabled_for_internet = N’false’,
@snapshot_in_defaultfolder = N’true’,
@compress_snapshot = N’false’,
@ftp_port = 21,
@ftp_subdirectory = N’ftp’,
@ftp_login = N’sa’,
@allow_subscription_copy = N’false’,
@add_to_active_directory = N’false’,
@dynamic_filters = N’false’,
@repl_freq = N’continuous’,
@status = N’active’,
@independent_agent = N’true’,
@immediate_sync = N’true’,
@allow_sync_tran = N’false’,
@autogen_sync_procs = N’false’,
@allow_queued_tran = N’false’,
@allow_dts = N’false’,
@replicate_ddl = 1,
@allow_initialize_from_backup = N’false’,
@enabled_for_p2p = N’false’,
@enabled_for_het_sub = N’false’
EXEC sp_addsubscription
@publication = N’PublicationName’,
@subscriber = N’RemoteServerName’,
@destination_db = N’RemoteDatabaseName’,
@sync_type = N’initialize with backup’,
@subscription_type = N’Pull’,
@update_mode = N’read only’
— 完成上面的步骤后,启动复制就可以开始了
BEGIN TRANSACTION
EXEC sp_replcmds
EXEC sp_startpublication_snapshot
@publication=’PublicationName’
COMMIT TRANSACTION
总之,异地复制的实施还要面对许多技术难题,上述仅仅是最佳实践的一小部分,DBA们还是要根据不同场景实际运作状况,不断结合技术因素和控制规范,科学合理地配置及管理复制系统,以达成稳定、安全、可靠的运行状态,从而最终构建一个企业级异地复制体系。