Home Microsoft SQL Server DigiMailing iRN Contact
    Keyword



sys.sp_removesrvreplication

  No additional text.


Syntax
create procedure sys.sp_removesrvreplication
as
begin
/*
 * unmark replication bits for all servers, databases; used by setup in vupgrade
 * assumes override is on; db in single user mode
 * no need to check rowcounts affected by updates, may not be any repl dbs
 * failure label avoids repetition of errs if not in single user mode
*/

    set nocount on

    -- setup attach overrides removedb option
    declare @dbname sysname,
            @srvname sysname,
            @procname nvarchar(320),
            @flush_proc nvarchar(300),
            @done_proc nvarchar(300)

    /*
    ** Security Check: require sysadmin
    */
    IF (ISNULL(IS_SRVROLEMEMBER('sysadmin'),0) = 0)
    BEGIN
        RAISERROR(21089,16,-1)
        RETURN (1)
    END

    declare cur_db CURSOR LOCAL FAST_FORWARD for
        select name from master.dbo.sysdatabases where name <> N'master' collate database_default
        for read only
    open cur_db
    fetch cur_db into @dbname
    while ( @@fetch_status <> -1 )
    begin
        exec sys.sp_MSremovedbreplication_internal @dbname
        -- clean up system tables
        select @procname = quotename(@dbname) + '.sys.sp_MSdrop_pub_tables'
        exec @procname
        select @procname = quotename(@dbname) + '.sys.sp_MSdrop_mergesystables @whattodrop=3'
        exec @procname
        fetch next from cur_db into @dbname
    end
    close cur_db
    deallocate cur_db

    declare cur_dball CURSOR LOCAL FAST_FORWARD for
        select name from master.dbo.sysdatabases
        for read only
    open cur_dball
    fetch cur_dball into @dbname
    while ( @@fetch_status <> -1 )
    begin
        -- Consider: Lock database using EXEC %%CurrentDatabase().Lock()??
        -- rmak: Doesn't seem necessary nor is the right thing to do as
        -- %%CurrentDatabase().Lock locks only the current database (master)

        -- call repldone before removing the published bit
        IF CONVERT(sysname,DATABASEPROPERTYEX(@dbname,'status'))  = N'READ_WRITE'
			AND HAS_DBACCESS(@dbname) = 1
			AND DatabasePropertyEx(@dbname, N'IsPublished') = 1
			--if cdc is still enabled, don't call sp_repldone
			AND not exists(select * from sys.databases where db_id(@dbname) = database_id and is_cdc_enabled = 1)
        BEGIN
            SELECT @flush_proc = QUOTENAME(@dbname) + N'.sys.sp_replflush'
            SELECT @done_proc  = QUOTENAME(@dbname) + N'.sys.sp_repldone'
            EXEC @flush_proc
            EXEC @done_proc NULL, NULL, 0, 0, 1
            EXEC @flush_proc
        END	

        -- unmark db bits
        EXEC %%DatabaseEx(Name = @dbname).SetPublished(Value = 0)
        EXEC %%DatabaseEx(Name = @dbname).SetMergePublished(Value = 0)

		--drop sysreplservers
    	if (convert(sysname,DATABASEPROPERTYEX(@dbname,'status'))  = 'ONLINE')
		begin
	       SELECT @procname = QUOTENAME(@dbname) + '.sys.sp_refreshreplsysservers'
	       EXEC @procname
		end
        -- clean up old dist db bit
        EXEC %%DatabaseEx(Name = @dbname).SetDistributor(Value = 0)
        fetch next from cur_dball into @dbname
    end
    close cur_dball
    deallocate cur_dball

    -- unmark srv bits (srvstatus = @dsnbit no longer used by replication subscribers but by server )
    -- select name, srvstatus from dbo.sysservers where srvstatus & @srv_distbit = @srv_distbit
    declare cur_srv CURSOR LOCAL FAST_FORWARD for
        select srvname from master.dbo.sysservers
        for read only
    open cur_srv
    fetch cur_srv into @srvname
    while ( @@fetch_status <> -1 )
    begin
        EXEC %%LinkedServer(Name = @srvname).Lock(Exclusive = 1)
        if @@error = 0
        begin
            EXEC %%LinkedServer(Name = @srvname).SetReplDist(Value = 0)
            EXEC %%LinkedServer(Name = @srvname).SetReplSub(Value = 0)
        end
        fetch next from cur_srv into @srvname
    end
    close cur_srv
    deallocate cur_srv

 return (0)
fail:
-- ad hoc updates not allowed and not single user
return (1)
end

 
Last revision 2008RTM
See also

  sp_vupgrade_replication (Procedure)
       



News

  Query a named instance
Sybase+ASE+silent+install
SQL 2008 R2
Deprecated procedures in SQL2008
Reporting Services item-level role definitions
Create all your missing indexes
Converting datetime field
Start MSSQL Server Profiler at time
Replicating MSSQL Server views
Exploring Microsoft Sharepoint
The OLE DB provider "SQLNCLI10" for linked server indicates.
Mobile solar charger
Oracle to SQL Server replication
Cannot insert the value NULL into column
Undocumented Microsoft SQL Server 2008
VMware
Zoekmachine optimalisatie
SQL Servers hidden objects
FckEditor
Flash in Ajax
De hype die AJAX heet
Barcode scannen
MySQL; Gratis, makkelijk en snel!
PHP
sIFR; de combinatie tussen HTML en Flash