sp_replcmds (Transact-SQL)
适用于: SQL Server Azure SQL 托管实例
返回标记为要复制的事务的命令。 此存储过程在发布服务器上对发布数据库执行。
重要
应仅运行该过程 sp_replcmds
以排查复制问题。
语法
sp_replcmds [ @maxtrans = ] maxtrans
[ ; ]
参数
[ @maxtrans = ] maxtrans
要返回相关信息的事务数。 @maxtrans为 int,默认值1
为 ,指定等待分发的下一个事务。
结果集
列名称 | 数据类型 | 描述 |
---|---|---|
article id |
int | 文章的 ID。 |
partial_command |
bit | 指示此命令是否为部分命令。 |
command |
varbinary(1024) | 命令值。 |
xactid |
binary(10) | 事务 ID。 |
xact_seqno |
varbinary(16) | 事务序列号。 |
publication_id |
int | 发布 ID。 |
command_id |
int | MSrepl_commands中命令的 ID。 |
command_type |
int | 命令的类型。 |
originator_srvname |
sysname | 发起事务的服务器。 |
originator_db |
sysname | 发起事务的数据库。 |
pkHash |
int | 仅供内部使用。 |
originator_publication_id |
int | 发起事务的发布的 ID。 |
originator_db_version |
int | 发起事务的数据库的版本。 |
originator_lsn |
varbinary(16) | 标识初始发布中命令的日志序列号 (LSN)。 |
注解
sp_replcmds
由日志读取器进程用于事务复制。
复制将给定数据库中运行 sp_replcmds
的第一个客户端视为日志读取器。
此过程可以为所有者限定的表或未限定的表名(默认值)生成命令。 通过添加限定的表名,可将数据从特定用户在一个数据库中拥有的表复制到此用户在另一个数据库中拥有的表中。
由于源数据库内的表名是由所有者名称限定的,所以目标数据库内的表所有者必须具有相同的所有者名称。
尝试在同一数据库中运行的 sp_replcmds
客户端收到错误 18752,直到第一个客户端断开连接。 第一个客户端断开连接后,另一个客户端可以运行 sp_replcmds
,并成为新的日志读取器。
如果 sp_replcmds
无法复制文本命令,则会将警告消息号 18759 添加到 SQL Server 错误日志和 Microsoft Windows 应用程序日志中,因为该文本指针未在同一事务中检索。
权限
只有 sysadmin 固定服务器角色的成员或db_owner固定数据库角色的成员才能执行sp_replcmds
。