The meta data is from an SQL 2012 Server.
I have posted alot more, find the whole list here.
Goto Definition or MetaData
Definition:
sys.sp_MScheck_subscription_partition(uniqueidentifier @pubid, uniqueidentifier @subid
, nvarchar @subscriber
, nvarchar @subscriber_db)
MetaData:
-- This proc checks if there is already a subscriber with the given partition.
-- if that subscriber does not match with the given subscriber and subscriber db it sets
-- the @valid bit to false. If it has to delete the other subscription for the same
-- partition (This is only done if the force_delete_other bit is set) then it returns
-- a value of 1 in the force_delete_other bit else returns a value of 0 in the force_delete_other bit
create procedure sys.sp_MScheck_subscription_partition
@pubid uniqueidentifier,
@subid uniqueidentifier,
@subscriber sysname,
@subscriber_db sysname,
@valid bit output,
@force_delete_other bit output,
@subscriber_deleted sysname output,
@subscriberdb_deleted sysname output
AS
declare @subdb_table sysname
declare @subserver_table sysname
declare @subid_table sysname
declare @retcode int
declare @partition_id int
declare @force_delete_other_input bit
declare @subnickname varbinary(6)
select @valid = 0
select @force_delete_other_input = @force_delete_other
select @force_delete_other = 0
if @pubid is NULL
begin
raiserror (14043, 11, -1, '@pubid', 'sp_MScheck_subscription_partition')
return (1)
end
exec @retcode = sys.sp_MSrepl_PAL_rolecheck @pubid = @pubid
if @@error<>0 or @retcode<>0
return 1
-- if the given publication does not contain any subcsription based articles do nothing
if not exists (select * from dbo.sysmergepartitioninfo where pubid = @pubid and partition_options = 3)
begin
select @valid = 1
return 0
end
-- get the partition id for the current subscriber. For security reasons we want to compute the partition id
-- of the current subscriber instead of getting the partition_id as a parameter.
exec @retcode = sys.sp_MSget_current_subscriber_partition_id @pubid, @partition_id output
if @@error<>0 or @retcode<>0 or @partition_id is NULL or @partition_id = -1
return 0
select @retcode = 0
begin tran
select @subdb_table = db_name, @subserver_table = subscriber_server
from dbo.sysmergesubscriptions with (updlock, holdlock)
where pubid = @pubid and partition_id = @partition_id
if @subdb_table is NULL
begin
select @valid = 1
goto DONE
end
if (@subdb_table <> @subscriber_db) or (UPPER(@subserver_table) <> UPPER(@subscriber))
select @valid = 0
else
select @valid = 1
if @valid = 0 and @force_delete_other_input = 1
begin
select @subid_table = subid from dbo.sysmergesubscriptions where pubid=@pubid and subscriber_server = @subserver_table and db_name = @subdb_table
if @subid_table is NULL
goto ERROR
delete from dbo.sysmergesubscriptions where pubid=@pubid and subscriber_server = @subserver_table and db_name = @subdb_table
if @@error<>0
goto ERROR
delete from dbo.MSmerge_replinfo where repid=@subid_table
if @@error<>0
goto ERROR
if not exists (select 1 from dbo.sysmergesubscriptions
where pubid=@pubid and UPPER(subscriber_server) collate database_default = UPPER(@subscriber) collate database_default
and db_name = @subscriber_db)
begin
select @subnickname = max(replnickname) from dbo.sysmergesubscriptions
where UPPER(subscriber_server) collate database_default = UPPER(@subscriber) collate database_default
and db_name = @subscriber_db
and status <> 7 -- REPLICA_STATUS_BeforeRestore
-- Generate a new replica nickname from the @subid
if (@subnickname is null)
begin
EXECUTE @retcode = sys.sp_MSgenreplnickname
@srcguid= @subid,
@replnick= @subnickname output
if @@ERROR<>0 or @retcode<>0 goto ERROR
end
insert into dbo.sysmergesubscriptions
(subid, subscriber_server, db_name, pubid, partition_id, replnickname, replicastate,
subscriber_type, subscription_type, priority, sync_type, replica_version, status)
values (@subid, @subscriber, @subscriber_db, @pubid, @partition_id, @subnickname, newid(),
3, 2, 0, 1, 90, 0 -- this has to be an anonymous subscriber, even if these are wrong sp_MSaddinitialsubscription will later correct it.
)
if @@error<>0
goto ERROR
insert into dbo.MSmerge_replinfo(repid, login_name) values (@subid, suser_sname(suser_sid()))
if @@error<>0
goto ERROR
end
else
begin
update dbo.sysmergesubscriptions set partition_id = @partition_id
where pubid=@pubid and UPPER(subscriber_server) = UPPER(@subscriber) and db_name = @subscriber_db
if @@error<>0
goto ERROR
end
select @force_delete_other = 1, @valid = 1, @subscriber_deleted = @subserver_table, @subscriberdb_deleted = @subdb_table
end
DONE:
commit tran
return 0
ERROR:
rollback tran
return 1
No comments:
Post a Comment