【转】https://blog.csdn.net/kk185800961/article/details/44719685
1.往已存在的发布里添加表,且订阅都更新(分割线后面的是 移除表)
--往本地发布里 添加表
use [PhoneAndPic] --数据库名称
exec sp_addarticle @publication = N'PicTest', --发布名称
@article = N'User', --添加的表名称
@source_owner = N'dbo',
@source_object = N'User',
@type = N'logbased',
@description = null,
@creation_script = null,
@pre_creation_cmd = N'drop',
@schema_option = 0x000000000803509F,
@force_invalidate_snapshot = 1,
@identityrangemanagementoption = N'manual',
@destination_table = N'User',
@destination_owner = N'dbo',
@vertical_partition = N'false',
@ins_cmd = N'CALL sp_MSins_dboUser',
@del_cmd = N'CALL sp_MSdel_dboUser',
@upd_cmd = N'SCALL sp_MSupd_dboUser'
-- 刷新 本地订阅
use [PhoneAndPic]
exec sp_refreshsubscriptions @publication = N'PicTest'
---------------------------------------------------------------------------------------------
--往本地订阅里 移除表
exec sp_dropsubscription @publication = N'PicTest',@article = N'User',@subscriber = N'all'
--往本地发布里 移除表
use [PhoneAndPic]
exec sp_droparticle @publication = N'PicTest',@article = N'User',@force_invalidate_snapshot = 0
-- 刷新 本地订阅
use [PhoneAndPic]
exec sp_refreshsubscriptions @publication = N'PicTest'
--【可选】删除表格
--drop table [PhoneAndPic2].[dbo].[User]
2.添加本地发布
-- 启用复制数据库
use master
exec sp_replicationdboption
@dbname = N'PhoneAndPic',
@optname = N'publish',
@value = N'true'
;
-- 添加事务发布
use [PhoneAndPic]
exec sp_addpublication
@publication = N'publishTest',
@description = N'来自发布服务器“A0B9A7E5K3GSUNW”的数据库“PhoneAndPic”的事务发布。',
@sync_method = N'concurrent',
@retention = 0,
@allow_push = N'true',
@allow_pull = N'true',
@allow_anonymous = N'false',
@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'false',
@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_addpublication_snapshot
@publication = N'publishTest',
@frequency_type = 4,
@frequency_interval = 1,
@frequency_relative_interval = 1,
@frequency_recurrence_factor = 0,
@frequency_subday = 8,
@frequency_subday_interval = 1,
@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 = 1
--本地发布添加表
use [PhoneAndPic]
exec sp_addarticle
@publication = N'publishTest',
@article = N'CustService',
@source_owner = N'dbo',
@source_object = N'CustService',
@type = N'logbased',
@description = null,
@creation_script = null,
@pre_creation_cmd = N'drop',
@schema_option = 0x000000000803509F,
@identityrangemanagementoption = N'manual',
@destination_table = N'CustService',
@destination_owner = N'dbo',
@vertical_partition = N'false',
@ins_cmd = N'CALL sp_MSins_dboCustService',
@del_cmd = N'CALL sp_MSdel_dboCustService',
@upd_cmd = N'SCALL sp_MSupd_dboCustService'
;
--本地发布添加表
use [PhoneAndPic]
exec sp_addarticle
@publication = N'publishTest',
@article = N'User',
@source_owner = N'dbo',
@source_object = N'User',
@type = N'logbased',
@description = null,
@creation_script = null,
@pre_creation_cmd = N'drop',
@schema_option = 0x000000000803509F,
@identityrangemanagementoption = N'manual',
@destination_table = N'User',
@destination_owner = N'dbo',
@vertical_partition = N'false',
@ins_cmd = N'CALL sp_MSins_dboUser',
@del_cmd = N'CALL sp_MSdel_dboUser',
@upd_cmd = N'SCALL sp_MSupd_dboUser'
;
--本地发布添加表
use [PhoneAndPic]
exec sp_addarticle
@publication = N'publishTest',
@article = N'WebSite',
@source_owner = N'dbo',
@source_object = N'WebSite',
@type = N'logbased',
@description = null,
@creation_script = null,
@pre_creation_cmd = N'drop',
@schema_option = 0x000000000803509F,
@identityrangemanagementoption = N'manual',
@destination_table = N'WebSite',
@destination_owner = N'dbo',
@vertical_partition = N'false',
@ins_cmd = N'CALL sp_MSins_dboWebSite',
@del_cmd = N'CALL sp_MSdel_dboWebSite',
@upd_cmd = N'SCALL sp_MSupd_dboWebSite'
;
3.获取数据库的所有表
--查询创建的表
select * from sys.tables a
where a.is_ms_shipped=0
;
4.添加订阅、本地订阅
-----------------开始: 要在发布服务器“A0B9A7E5K3GSUNW”上运行的脚本-----------------
use [PhoneAndPic]
exec sp_addsubscription
@publication = N'PicTest',
@subscriber = N'A0B9A7E5K3GSUNW', --订阅服务器名称
@destination_db = N'PhoneAndPic2', --订阅数据库名称
@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'PicTest', --发布名称
@subscriber = N'A0B9A7E5K3GSUNW', --订阅服务器名称
@subscriber_db = N'PhoneAndPic2', --订阅数据库名称
@job_login = null,
@job_password = null,
@subscriber_security_mode = 0,
@subscriber_login = N'sa', --订阅的数据库登录账户
@subscriber_password = N'123456', --订阅的数据库登录密码
@frequency_type = 64,
@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 = 20190416,
@active_end_date = 99991231,
@enabled_for_syncmgr = N'False',
@dts_package_location = N'Distributor'
;
-----------------结束: 要在发布服务器“A0B9A7E5K3GSUNW”上运行的脚本-----------------
-----------------开始: 要在订阅服务器“A0B9A7E5K3GSUNW”上运行的脚本-----------------
use [PhoneAndPic2]
-- 设置在连接到发布服务器时立即更新订阅的同步触发器所使用的配置和安全信息
-- http://msdn.microsoft.com/zh-cn/library/ms174991(v=sql.100).aspx
exec sys.sp_link_publication
@publisher = N'A0B9A7E5K3GSUNW', --发布服务器名称
@publisher_db = N'PhoneAndPic', --发布数据库名称
@publication = N'PicTest', --发布名称
@distributor = N'A0B9A7E5K3GSUNW', --发布服务器名称
@security_mode = 1, --SQL Server 身份验证或 Windows 身份验证
@login = N'sa', --发布的数据库登录账户
@password = N'123456' --发布的数据库登录密码
;
-----------------结束: 要在订阅服务器“A0B9A7E5K3GSUNW”上运行的脚本-----------------
-----------------开始: 要在发布服务器“A0B9A7E5K3GSUNW”上运行的脚本-----------------
use [PhoneAndPic]
-- 对其请求订阅中的新项目的订阅添加到发布中(在发布服务器的发布数据库中执行)
-- https://technet.microsoft.com/zh-cn/library/ms181680(v=sql.100).aspx
--exec sys.sp_refreshsubscriptions @publication = N'PicTest'
-- 将订阅标记为要重新初始化
-- https://msdn.microsoft.com/zh-cn/library/ms189469(v=sql.100).aspx
exec sys.sp_reinitsubscription
@publication = N'PicTest', --发布名称
@subscriber = N'A0B9A7E5K3GSUNW', --订阅服务器名称
@destination_db = N'PhoneAndPic2', --订阅数据库名称
@article = N'all'
;
-- 启动可为发布生成初始快照的快照代理作业(在发布服务器的发布数据库中执行)
-- http://msdn.microsoft.com/zh-cn/library/ms176026(v=sql.105).aspx
exec sys.sp_startpublication_snapshot @publication = N'PicTest'
;
-- 为所有表项目编写自定义 sp_MSins、sp_MSupd 和 sp_MSdel 过程的脚本
-- https://msdn.microsoft.com/zh-cn/library/ms187946(SQL.100).aspx
--exec sys.sp_scriptpublicationcustomprocs 'PicTest'
--;
-----------------结束: 要在发布服务器“A0B9A7E5K3GSUNW”上运行的脚本-----------------
tip
--@subscriber = N'A0B9A7E5K3GSUNW', --当前服务器名称
@subscriber = @@servername, --可以直接用系统变量直接赋值