sys.sp_mergecleanupmetadata (Transact-SQL)

Gäller för:SQL Server

Bör endast användas i replikationstopologier som inkluderar servrar som kör versioner av SQL Server före SQL Server 2000 (8.x) Service Pack 1. sp_mergecleanupmetadata tillåter administratörer att rensa metadata i MSmerge_genhistory, MSmerge_contents, och MSmerge_tombstone systemtabellerna. Den här lagrade proceduren körs i Publisher i publikationsdatabasen.

Transact-SQL syntaxkonventioner

Syntax

sys.sp_mergecleanupmetadata
    [ [ @publication = ] N'publication' ]
    [ , [ @reinitialize_subscriber = ] N'reinitialize_subscriber' ]
[ ; ]

Arguments

[ @publication = ] N'publicering'

Namnet på publikationen. @publication är sysname, med standarden , %vilket rensar metadata för alla publikationer. Publikationen måste redan existera om den uttryckligen anges.

[ @reinitialize_subscriber = ] N'reinitialize_subscriber'

Specificerar om prenumeranten ska reinitialiseras. @reinitialize_subscriber är nvarchar(5), med en standard på true.

  • Om true, markeras prenumerationer för ominitiering.
  • Om false, är prenumerationerna inte markerade för ominitiering.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Remarks

sp_mergecleanupmetadatabör endast användas i replikationstopologier som inkluderar servrar som kör versioner av SQL Server före SQL Server 2000 (8.x) Service Pack 1. Topologier som endast inkluderar SQL Server 2000 (8.x) Service Pack 1 eller senare bör använda automatisk sanering av metadata baserad på lagring. När du kör denna lagrade procedur, var medveten om den nödvändiga och potentiellt stora tillväxten av loggfilen på datorn där den lagrade proceduren körs.

Efter sp_mergecleanupmetadata att ha körts, som standard, alla prenumerationer hos prenumeranter av publikationer som har metadata lagrad i MSmerge_genhistory, MSmerge_contents och MSmerge_tombstone markeras för ominitiering, förloras eventuella väntande ändringar hos prenumeranten, och den aktuella ögonblicksbildskopian markeras som föråldrad.

Om det finns flera publikationer i en databas, och någon av dessa publikationer använder en oändlig publiceringstid (@retention är 0), rensar inte körningen sp_mergecleanupmetadata metadata för att spåra ändringar i sammanslagningsreplikering för databasen. Av denna anledning, använd oändlig publiceringsretention med försiktighet.

När du kör denna lagrade procedur kan du välja om du vill reinitialisera Subscribers genom att sätta parametern @reinitialize_subscriber till true (standard) eller false. Om sp_mergecleanupmetadata exekveras med @reinitialize_subscriber-parametern satt till true, appliceras en snapshot på Abonnenten även om prenumerationen skapades utan en initial snapshot (till exempel om snapshotdata och schema har applicerats manuellt eller redan existerat hos Abonnenten). Att sätta parametern till false bör användas med försiktighet, eftersom om publikationen inte är ominitierad måste du säkerställa att data hos Publisher och Subscriber är synkroniserade.

Oavsett värdet av @reinitialize_subscriber, sp_mergecleanupmetadata misslyckas om det pågår sammanslagningsprocesser som försöker ladda upp ändringar till en Publisher eller en ompubliceringsprenumerant vid tidpunkten för den lagrade proceduren anropas.

Utför sp_mergecleanupmetadata med @reinitialize_subscriber = N'sann'

  1. Det rekommenderas, men är inte ett krav, att du stoppar alla uppdateringar av publikations- och prenumerationsdatabaserna. Om uppdateringar fortsätter förloras alla uppdateringar som gjorts på en prenumerant sedan den senaste sammanslagningen när publiceringen initieras om, men datakonvergens bibehålls.

  2. Utför en sammanslagning genom att köra Merge Agent. Vi rekommenderar att du använder kommandoradsalternativet -Validate agent vid varje Subscriber när du kör Merge Agent. Om du kör kontinuerliga sammanslagningar, se Särskilda överväganden för kontinuerliga lägessammanslagningar senare i detta avsnitt.

  3. När alla sammanslagningar är klara, utför sp_mergecleanupmetadata.

  4. Kör sp_reinitmergepullsubscription på alla prenumeranter med namngiven eller anonym pull-prenumeration för att säkerställa datakonvergens.

  5. Om du kör kontinuerliga sammanslagningar, se Särskilda överväganden för kontinuerliga lägessammanslagningar senare i detta avsnitt.

  6. Återgenerera snapshotfiler för alla sammanslagningspublikationer som är involverade på alla nivåer. Om du försöker slå ihop utan att först regenerera snapshoten får du en prompt att regenerera snapshoten.

  7. Säkerhetskopiera publiceringsdatabasen. Underlåtenhet att göra detta kan orsaka ett sammanslagningsfel efter återställning av publiceringsdatabasen.

Utför sp_mergecleanupmetadata med @reinitialize_subscriber = N'false'

  1. Stoppa alla uppdateringar av publikations- och prenumerationsdatabaserna.

  2. Utför en sammanslagning genom att köra Merge Agent. Vi rekommenderar att du använder kommandoradsalternativet -Validate för agenten vid varje prenumerant när du kör Merge Agent. Om du kör kontinuerliga sammanslagningar, se Särskilda överväganden för kontinuerliga sammanslagningar senare i denna artikel.

  3. När alla sammanslagningar är klara, utför sp_mergecleanupmetadata.

  4. Om du kör kontinuerliga sammanslagningar, se Särskilda överväganden för kontinuerliga lägessammanslagningar senare i detta avsnitt.

  5. Återgenerera snapshotfiler för alla sammanslagningspublikationer som är involverade på alla nivåer. Om du försöker slå ihop utan att först regenerera snapshoten får du en prompt att regenerera snapshoten.

  6. Säkerhetskopiera publiceringsdatabasen. Underlåtenhet att göra detta kan orsaka ett sammanslagningsfel efter återställning av publiceringsdatabasen.

Särskilda överväganden för kontinuerliga modesammanslagningar

Om du kör kontinuerliga sammanslagningar måste du antingen:

  • Stoppa Merge Agent och utför sedan en ny merge utan att parametern -Continuous specificeras.

  • Avaktivera publikationen med för sp_changemergepublication att säkerställa att alla sammanslagningar i kontinuerligt läge som pollar för publiceringsstatus misslyckas.

    EXECUTE central..sp_changemergepublication
        @publication = 'dynpart_pubn',
        @property = 'status',
        @value = 'inactive';
    

När du har slutfört steg 3 i löpningen sp_mergecleanupmetadata, återuppta kontinuerliga sammanslagningar baserat på hur du stoppade dem. Antingen:

  • Lägg till parametern -Continuous tillbaka för Merge Agent.

  • Återaktivera publikationen med sp_changemergepublication.

    EXECUTE central..sp_changemergepublication
        @publication = 'dynpart_pubn',
        @property = 'status',
        @value = 'active';
    

Permissions

Endast medlemmar av sysadmin-fasta serverrollen eller db_owner fasta databasrollen kan köra sp_mergecleanupmetadata.

För att använda denna lagrade procedur måste Publisher köra SQL Server 2000 (8.x). Prenumeranterna måste köra antingen SQL Server 2000 (8.x) eller SQL Server 7.0, Service Pack 2.