Sqlserver——高可用——T-SQL语句给服务器配置复制发布订阅

(eg:用A、B代表两台服务器,前提两台服务器之间没有配置任何关于订阅分发的事项)

环境配置:在A和B之间配置别名对应的IP地址,参考文章:https://www.cnblogs.com/DBArtist/p/5803271.html。

                  配置完成后,需要在订阅服务器上创建指定的数据库用于接收发布的数据

实现效果:在A、B之间根据指定的【表】和 【表中的列】实现事务发布

具体代码:按照脚本执行即可,将看到的带有注释的参数,填入实际的值,执行即可


----------------1.设置分发服务器

USE master ;

EXEC sp_adddistributor @distributor = N'', --分发服务器实例名称
                       @password = N'' ;
GO

----------------2.创建分发数据库

EXEC sp_adddistributiondb @database = N'', --分发数据库名称
                          @data_folder = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.DEVELOP\MSSQL\Data',
                          @log_folder = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.DEVELOP\MSSQL\Data',
                          @log_file_size = 2,
                          @min_distretention = 0,
                          @max_distretention = 72,
                          @history_retention = 48,
                          @security_mode = 1 ;
GO

----------------3.配置分发数据库
USE [distribution] ; --分发数据库的名称

IF ( NOT EXISTS ( SELECT * FROM sysobjects WHERE name = 'UIProperties' AND type = 'U ' ))
    CREATE TABLE UIProperties ( id INT ) ;

IF ( EXISTS (
                SELECT *
                FROM   ::fn_listextendedproperty('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', NULL, NULL)
            )
   )
    EXEC sp_updateextendedproperty N'SnapshotFolder',
                                   N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.DEVELOP\MSSQL\ReplData',
                                   'user',
                                   dbo,
                                   'table',
                                   'UIProperties' ;
ELSE
    EXEC sp_addextendedproperty N'SnapshotFolder',
                                N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.DEVELOP\MSSQL\ReplData',
                                'user',
                                dbo,
                                'table',
                                'UIProperties' ;
GO

----------------4.将配置好的分发数据库与分发服务器绑定
EXEC sp_adddistpublisher @publisher = N'',       --分发服务器实例名称
                         @distribution_db = N'', --分发数据库
                         @security_mode = 0,
                         @login = N'',           --登录名
                         @password = N'',        --密码
                         @working_directory = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.DEVELOP\MSSQL\ReplData',
                         @trusted = N'false',
                         @thirdparty_flag = 0,
                         @publisher_type = N'MSSQLSERVER' ;
GO

----------------5.添加发布数据库
USE [NewVIP] ; --要发布的数据库名称

EXEC sp_replicationdboption @dbname = N'NewVIP', @optname = N'publish', @value = N'true' ;
GO

----------------6.为数据库添加事务发布/快照发布

USE [NewVIP] ; --要发布的数据库名称

EXEC sp_addpublication @publication = N'', --创建的发布的名称
                       @description = N'', --名称描述
                       @sync_method = N'concurrent',
                       @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_login = N'anonymous',
                       @allow_subscription_copy = N'false',
                       @add_to_active_directory = 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' ;
GO

----------------7.为数据库添加快照代理,并配置发布的表,列

EXEC sp_addpublication_snapshot @publication = N'',         --创建的发布的名称
                                @frequency_type = 1,
                                @frequency_interval = 0,
                                @frequency_relative_interval = 0,
                                @frequency_recurrence_factor = 0,
                                @frequency_subday = 0,
                                @frequency_subday_interval = 0,
                                @active_start_time_of_day = 0,
                                @active_end_time_of_day = 235959,
                                @active_start_date = 0,
                                @active_end_date = 0,
                                @job_login = NULL,
                                @job_password = NULL,
                                @publisher_security_mode = 0,
                                @publisher_login = N'',     --发布服务器登录名
                                @publisher_password = N'' ; --发布服务器登录密码
GO

USE [NewVIP] ;--要发布的数据库名称



--配置要发布的表
/*
注意下面的是否启用筛选列的选项,有多个表需要参与事务发布,则按照格式复制多份
*/
EXEC sp_addarticle @publication = N'',            --发布名称
                   @article = N'',                --表名
                   @source_owner = N'dbo',
                   @source_object = N'',          --表名
                   @type = N'logbased',
                   @description = NULL,
                   @creation_script = NULL,
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x000000000803509F,
                   @identityrangemanagementoption = N'manual',
                   @destination_table = N'',      --表名
                   @destination_owner = N'dbo',
                   @vertical_partition = N'true', --是否要启用筛选列,启用时,删除所有列,单独配置相关列(必须包含主键列),不启用时,自动添加所有列
                   @ins_cmd = N'CALL sp_MSins_dbo',
                   @del_cmd = N'CALL sp_MSdel_dbo',
                   @upd_cmd = N'SCALL sp_MSupd_dbo' ;

--配置要发布表中的列
/*
有配置筛选列属性为True时,需要通过该系统Sp对指定表增加需要的列名
*/
EXEC sp_articlecolumn @publication = N'', --发布名称
                      @article = N'',     --表名
                      @column = N'',      --列名
                      @operation = N'add',
                      @force_invalidate_snapshot = 1,
                      @force_reinit_subscription = 1 ;

-- 添加项目同步对象
/*
有配置筛选列属性为True时的表,必须通过该系统Sp配置筛选视图
*/
EXEC sp_articleview @publication = N'', --发布名称
                    @article = N'',     --表名
                    @view_name = N'',   --自定义视图名
                    @filter_clause = NULL,
                    @force_invalidate_snapshot = 1,
                    @force_reinit_subscription = 1 ;
GO

----------------8.在发布服务器上配置需要订阅的服务器和数据库
USE [NewVIP] ; --要发布的数据库名称

EXEC sp_addsubscription @publication = N'',    --发布名称
                        @subscriber = N'',     --订阅服务器实例名
                        @destination_db = N'', --订阅服务器订阅数据库
                        @subscription_type = N'Push',
                        @sync_type = N'automatic',
                        @article = N'all',
                        @update_mode = N'read only',
                        @subscriber_type = 0 ;

EXEC sp_addpushsubscription_agent @publication = N'',           --发布名称
                                  @subscriber = N'',            --订阅服务器实例名
                                  @subscriber_db = N'',         --订阅服务器数据库
                                  @job_login = NULL,
                                  @job_password = NULL,
                                  @subscriber_security_mode = 0,
                                  @subscriber_login = N'jimei', --订阅服务器登录名
                                  @subscriber_password = '',    --订阅服务器登录账号
                                  @frequency_type = 4,
                                  @frequency_interval = 1,
                                  @frequency_relative_interval = 1,
                                  @frequency_recurrence_factor = 1,
                                  @frequency_subday = 4,
                                  @frequency_subday_interval = 1,
                                  @active_start_time_of_day = 0,
                                  @active_end_time_of_day = 235959,
                                  @active_start_date = 20190717,
                                  @active_end_date = 99991231,
                                  @enabled_for_syncmgr = N'False',
                                  @dts_package_location = N'Distributor' ;
GO

----------------9.在发布服务器上启动快照并初始化

EXEC sys.sp_reinitsubscription @publication = N'',    --发布名称
                               @subscriber = N'',     --订阅服务器实例名
                               @destination_db = N'', --订阅服务器数据库
                               @article = N'all' ;
GO

--启动可为发布生成初始快照的快照代理作业

EXEC sys.sp_startpublication_snapshot @publication = N'' ; --发布名称
GO

Sqlserver——高可用——T-SQL语句给服务器配置复制发布订阅_第1张图片

你可能感兴趣的:(SQL,server,订阅分发,复制,事务发布,T-SQL)