SQL server replication

(https://msdn.microsoft.com/zh-cn/library/ms173857(v=sql.120).aspx)


(https://msdn.microsoft.com/zh-cn/library/ms184385.aspx)


(https://msdn.microsoft.com/zh-cn/library/ms175158.aspx)  --- 与replication无关?? 只是创建快照

sp_startpublication_snapshot


sp_addarticle /  sp_addsubscription /  sp_dropsubscription / sp_droparticle 


==============================================================================================================


// 创建项目添加到发布中。 名字是ACTRep

exec sp_addarticle @publication = 'ACTRep', @article = 'PFAcctYYY', @source_owner = 'dbo', @source_object = 'PFAcctXXX', 


// 检索系统中,通过发布名称来检索信息, 得到 pubid.

select *  from dbo.syspublications p  where p.name='ACTRep'


syspublications (Transact-SQL)

数据库内定义的每个发布在表中对应一行。 该表存储在发布数据库中。

列名

数据类型

说明

说明

nvarchar(255)

发布的说明项。

name

sysname

与发布关联的唯一名称。

pubid

int

为发布提供唯一 ID 的标识列。

repl_freq

tinyint

复制频率:

0 = 基于事务。

1 = 计划表刷新。

status

tinyint

状态:

= 不活动。

1 = 活动。

sync_method

tinyint

同步方法包括:

0 = 本机模式大容量复制程序实用工具 (BCP)。

1 = 字符模式 BCP。

3 = 并发,表示在快照期间使用本机模式 BCP,但不锁定表。

4 = Concurrent_c,表示在快照期间使用字符模式 BCP,但不锁定表。

snapshot_jobid

binary(16)

预定任务 ID。

independent_agent

bit

指定是否有用于该发布的独立分发代理。

0 = 该发布使用共享的分发代理,每对发布服务器数据库/订阅服务器数据库都有一个单独的共享代理。

1 = 此发布有独立的分发代理。

immediate_sync

bit

指示每次快照代理运行时是否创建或重新创建同步文件,1 表示每次代理运行时都创建同步文件。

enabled_for_internet

bit

指示发布的同步文件是否通过文件传输协议 (FTP) 和其他服务向 Internet 公开,1 表示可以从 Internet 访问发布的同步文件。

allow_push

bit

指示对于该发布是否允许推送订阅,1 表示允许。

allow_pull

bit

指示对于该发布是否允许请求订阅,1 表示允许。

allow_anonymous

bit

指示对于该发布是否允许匿名订阅,1 表示允许。

immediate_sync_ready

bit

指示快照代理是否已生成快照且该快照是否准备好用于新的订阅。 仅对于立即更新发布才有意义。 1 表示快照已准备好。

allow_sync_tran

bit

指定是否允许对发布使用立即更新订阅。 1 表示允许即时更新订阅。

autogen_sync_procs

bit

指定是否在发布服务器中为立即更新订阅生成同步存储过程。 1 表示在发布服务器上生成同步存储过程。

retention

int

为给定发布保存的更改数量(小时)。

allowed_queued_tran

bit

指定是否启用在订阅服务器上对更改进行排队,直到更改可以在发布服务器上应用为止。 如果为 1,则在订阅服务器上对更改进行排队。

snapshot_in_defaultfolder

bit

指定是否在默认文件夹中存储快照文件。

0 = 快照文件已存储在 alternate_snapshot_folder 所指定的备用位置。

1 = 快照文件存储在默认文件夹中。

alt_snapshot_folder

nvarchar(255)

指定快照的备用文件夹的位置。

pre_snapshot_script

nvarchar(255)

指定指向 .sql 文件位置的指针。 在订阅服务器上应用快照时,分发代理将在运行任何复制的对象脚本之前运行快照前脚本。

post_snapshot_script

nvarchar(255)

指定指向 .sql 文件位置的指针。 在初始同步过程中,分发代理将在应用所有其他复制的对象脚本和数据之后运行快照后脚本。

compress_snapshot

bit

指定将写入 alt_snapshot_folder 位置的快照将被压缩为 Microsoft CAB 格式。1 表示将压缩快照。

ftp_address

sysname

分发服务器的 FTP 服务的网络地址。 指定发布快照文件所在的位置以供分发代理拾取。

ftp_port

int

分发服务器的 FTP 服务的端口号。 指定发布快照文件所在的位置以供分发代理拾取。

ftp_subdirectory

nvarchar(255)

指定当发布支持使用 FTP 传播快照时的快照文件的位置以供分发代理获取。

ftp_login

sysname

用于连接到 FTP 服务的用户名。

ftp_password

nvarchar(524)

用于连接到 FTP 服务的用户密码。

allow_dts

bit

指定发布是否允许数据转换。 1 指定允许 DTS 转换。

allow_subscription_copy

bit

指定是否已启用复制订阅该发布的订阅数据库的功能。 1 表示允许复制。

centralized_conflicts

bit

指定冲突记录是否存储在发布服务器上:

0 = 在导致冲突的发布服务器和订阅服务器上均存储冲突记录。

1 = 在发布服务器上存储冲突记录。

conflict_retention

int

指定冲突保持期(天)。

conflict_policy

int

指定使用排队更新订阅服务器选项时遵循的冲突解决策略。 可以是下列值之一:

1 = 发布服务器入选冲突。

2 = 订阅服务器入选冲突。

3 = 重新初始化订阅。

queue_type

int

指定所使用的队列类型。 可以是下列值之一:

1 = msmq,使用 Microsoft 消息队列来存储事务。

2 = sql,它使用 SQL Server 来存储事务。

注意 注意

因为已不推荐使用 Microsoft 消息队列,所以此方式不再可用。

ad_guidname

sysname

指定是否在 Microsoft Active Directory 中发布该发布。 有效的全局唯一标识符 (GUID) 指定在 Active Directory 中进行发布,且 GUID 是相应的 Active Directory 发布对象 objectGUID 如果为 NULL,则将不在 Active Directory 中发布该发布。

backward_comp_level

int

数据库兼容级别,可以为下列值之一:

90 = SQL Server 2005.

100 = SQL Server 2008.

110 = SQL Server 2012.

120 = SQL Server 2014.

allow_initialize_from_backup

bit

指示订阅服务器是否能够从备份而不是从初始快照来初始化对此发布的订阅。 1 表示订阅可以从备份进行初始化,0 表示不能。 有关详细信息,请参阅初始化事务订阅(不使用快照)

min_autonosync_lsn

binary

标识为仅供参考。不提供支持。不保证以后的兼容性。

replicate_ddl

int

指示发布是否支持架构复制。 1 表示已复制在发布服务器上执行的数据定义语言 (DDL) 语句,0 表示未复制 DDL 语句。 有关详细信息,请参阅对发布数据库进行架构更改

options

int

指定其他发布选项的位图,其中的位选项值如下所示:

0x1 - 为对等复制启用。

0x2 - 仅为对等复制发布本地更改。

0x4 - 为非 SQL Server 订阅服务器启用。

0x8 - 为对等冲突检测启用。

originator_id

smallint

为进行冲突检测标识对等复制拓扑中的每个节点。 有关详细信息,请参阅对等复制中的冲突检测

// 可根据得出来的pubid 去系统表里,查询项目名有哪些? 得到artid)

select * from dbo.sysarticles a where a.pubid=?


//根据artid,去系统表里查,可以得到被谁订阅了?
select * from dbo.syssubscriptions s  where s.artid=?


///检索出来 replication error

select b.* from ODS_Distributor..MSrepl_errors a inner join ODS_Distributor..MSdistribution_history b on b.error_id=a.id order by a.time 


// 系统表中,查询出有哪些表被订阅 (article,订阅的项目名。)

如何得到publication_id, 这个问题我还不清楚。。。。

可以用一个已知的destination_object, 或者source_object , 或者article, 来取得这个publication_id。
select * from ODS_Distributor..MSarticles where publication_id = XX

MSarticles (Transact-SQL)

发布服务器复制的每个项目在 MSarticles 表中各占一行。 该表存储在分发数据库中。

列名

数据类型

说明

publisher_id

smallint

发布服务器的 ID。

publisher_db

sysname

发布服务器数据库的名称。

publication_id

int

发布的 ID。

article

sysname

项目的名称。

article_id

int

项目的 ID。

destination_object

sysname

在订阅服务器上创建的表的名称。

source_owner

sysname

发布服务器上源表的架构的名称。

source_object

sysname

添加项目时所在的源对象的名称。

description

nvarchar(255)

项目的说明。

destination_owner

sysname

在订阅服务器上创建的表的架构的名称。

============================================================


使用sp_dropsubscription, sp_droparticle或者sp_addarticle命令, 都是往ODS_Distributor..MSarticles 这个表中插入或者删除数据。不用DBA关闭同步(replication off), 也可以做到修改表结构不出错。否则,修改了oltp的表结构,olap的表结构不会被同步过去,导致同步出错。因为出错,以后都会同步失败。因为取消了在这个发布上的订阅,这样修改oltp的表结构,则订阅它的olap也不会出错(因为订阅被取消了)


例子:

DECLARE @pubname AS sysname, @oltp2 AS sysname, @olap AS sysname, @prd_oltp2 AS sysname, @prd_olap AS sysname,  @dest_db AS sysname
SET @pubname = 'ACTRep'
SET @dest_db = 'XXXXXX'  --DB name

IF @@servername = 'XXXXXXX' --UAT oltp1的name
BEGIN
SET @oltp2= 'XXXXX,port'
SET @olap= 'XXXX, port'
END
ELSE IF @@servername = 'XXXXX' --PRO oltp1的name
BEGIN
SET @oltp2= 'XXXXXX'
SET @olap= 'XXXXXXX'
END

exec sp_dropsubscription @publication = @pubname, @article = 'PFAcctAuthorizedMarkets', @subscriber = @oltp2,@destination_db = @dest_db
exec sp_dropsubscription @publication = @pubname, @article = 'PFAcctAuthorizedMarkets', @subscriber = @olap,@destination_db = @dest_db
EXEC sp_droparticle @publication = @pubname, @article = 'PFAcctAuthorizedMarkets',  @force_invalidate_snapshot = 1


DECLARE @pubname AS sysname
SET @pubname = 'ACTRep'

IF @@servername = XXXXX' (--oltp1的name) OR @@servername = 'XXXXX'(--oltp2的name)

exec sp_addarticle @publication = @pubname, @article = 'PFAcctHierarchy', @source_owner = 'dbo', @source_object = 'PFAcctHierarchy', 
@pre_creation_cmd = 'truncate', @identityrangemanagementoption = 'manual',@force_invalidate_snapshot = 1,@status = 24 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值