Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Ez a témakör azt ismerteti, hogyan lehet újrainicializálni egy előfizetést az SQL Server Management Studio, a Transact-SQL vagy a Replication Management Objects (RMO) használatával. Az egyes előfizetések újraincializálásra jelölhetők, így a következő szinkronizálás során egy új pillanatkép lesz alkalmazva.
Megjegyzés:
A felügyelt Azure SQL-példány közzétevő, terjesztő és előfizető lehet a pillanatképek és a tranzakciós replikáció számára. Az Azure SQL Database adatbázisai csak pillanatkép- és tranzakciós replikáció push előfizetői lehetnek. További információ: Tranzakciós replikáció az Azure SQL Database-sel és a felügyelt Azure SQL-példányokkal.
Az SQL Server Management Studio használata
Az előfizetés újraincializálása kétrészes folyamat:
Egy előfizetés vagy egy kiadvány összes előfizetése újrainicializálás céljából van megjelölve. Előfizetések megjelölése újraincializáláshoz a Microsoft SQL Server Management Studio Helyi kiadványok mappájából és Helyi előfizetések mappájából elérhető Újrainicializálási előfizetés(ek) párbeszédpanelen. Az előfizetéseket a Replikációfigyelő Minden előfizetés lapján és a kiadványok csomóponton is megjelölheti. A replikációfigyelő elindításáról további információt a Replikációfigyelő indítása című témakörben talál. Amikor újraincializálásra jelöl meg egy előfizetést, a következő lehetőségek állnak rendelkezésére:
Az aktuális pillanatkép használata
Válassza ki, hogy az aktuális pillanatképet az előfizetőre alkalmazza a terjesztési ügynök vagy az egyesítési ügynök következő futtatásakor. Ha nem érhető el érvényes pillanatkép, ez a beállítás nem választható ki.Új pillanatkép használata
Válassza ki az előfizetés új pillanatképpel való újraincializálását. A pillanatkép csak akkor alkalmazható az előfizetőre, ha a pillanatkép-ügynök létrehozta. Ha a Pillanatkép-ügynök ütemezés szerint van beállítva, az előfizetés csak a következő ütemezett Pillanatkép-ügynök futtatás után lesz újrainicializálva. Válassza az Új pillanatkép létrehozása lehetőséget a Pillanatkép-ügynök azonnali elindításához.Nem szinkronizált módosítások feltöltése az újraincializálás előtt
Csak egyesítési replikáció. Válassza ki, hogy feltöltse a függőben lévő módosításokat az előfizetési adatbázisból, mielőtt az Előfizetőnél lévő adatok felülíródnak egy pillanatképpel.Paraméteres szűrő hozzáadása, elvetése vagy módosítása esetén az Előfizetőnél függőben lévő módosítások nem tölthetők fel a Közzétevőbe az újraincializálás során. Ha függőben lévő módosításokat szeretne feltölteni, a szűrő módosítása előtt szinkronizálja az összes előfizetést.
A rendszer a következő szinkronizáláskor újrainicializál egy előfizetést: a terjesztési ügynök (tranzakciós replikációhoz) vagy az egyesítési ügynök (az egyesítési replikációhoz) a legfrissebb pillanatképet alkalmazza minden olyan előfizetőre, aki rendelkezik újraincializálásra megjelölt előfizetéssel. További információ az előfizetések szinkronizálásáról: Leküldéses előfizetés szinkronizálása és lekéréses előfizetés szinkronizálása.
Egyetlen leküldéses vagy lekéréses előfizetés megjelölése újrainicializáláshoz a Management Studio-ban (a Publisherben)
Csatlakozzon a Publisherhez a Management Studióban, majd bontsa ki a kiszolgálócsomópontot.
Bontsa ki a Replikáció mappát, majd bontsa ki a Helyi kiadványok mappát.
Nyissa meg a kiadványt, amely az újrainicializálni kívánt előfizetést tartalmazza.
Kattintson a jobb gombbal az előfizetésre, majd kattintson az Újrainicializálás parancsra.
Az Előfizetés(ek) újrainicializálása párbeszédpanelen válassza ki a beállításokat, majd kattintson a Megjelölés újrainicializáláshoz elemre.
Egyetlen húzási előfizetés megjelölése újrainicializáláshoz a Management Studióban (előfizetőnél)
Csatlakozzon az előfizetőhöz a Management Studióban, majd bontsa ki a kiszolgálócsomópontot.
Bontsa ki a Replikáció mappát, majd bontsa ki a Helyi előfizetések mappát.
Kattintson a jobb gombbal az előfizetésre, majd kattintson az Újrainicializálás parancsra.
A megjelenő megerősítést kérő párbeszédpanelen kattintson az Igen gombra.
Az összes előfizetés megjelölése újrainicializálásra a Management Studio-ban
Csatlakozzon a Publisherhez a Management Studióban, majd bontsa ki a kiszolgálócsomópontot.
Bontsa ki a Replikáció mappát, majd bontsa ki a Helyi kiadványok mappát.
Kattintson a jobb gombbal az újraincializálni kívánt előfizetéseket tartalmazó kiadványra, majd kattintson az Összes előfizetés újraincializálása parancsra.
Az Előfizetés(ek) újrainicializálása párbeszédpanelen válassza ki a beállításokat, majd kattintson a Megjelölés újrainicializáláshoz elemre.
Egyetlen leküldéses vagy lekéréses előfizetés megjelölése újrainicializáláshoz a Replikációfigyelőben
A Replikációfigyelőben bontsa ki a bal oldali panelen a Publisher csoportot, bontsa ki a Publishert, majd kattintson egy kiadványra.
Kattintson a Minden előfizetés fülre .
Kattintson a jobb gombbal az újraincializálni kívánt előfizetésre, majd kattintson az Előfizetés újrainicializálása parancsra.
Az Előfizetés(ek) újrainicializálása párbeszédpanelen válassza ki a beállításokat, majd kattintson a Megjelölés újrainicializáláshoz elemre.
Az összes előfizetés megjelölése újrainicializálásra az Replikációfigyelőben
A Replikációfigyelőben bontsa ki a publishercsoportot a bal oldali panelen, majd bontsa ki a Publishert.
Kattintson a jobb gombbal az újraincializálni kívánt előfizetéseket tartalmazó kiadványra, majd kattintson az Összes előfizetés újraincializálása parancsra.
Az Előfizetés(ek) újrainicializálása párbeszédpanelen válassza ki a beállításokat, majd kattintson a Megjelölés újrainicializáláshoz elemre.
Transact-SQL használata
Az előfizetések programozott módon újrainicializálhatók replikációs tárolt eljárások használatával. A használt tárolt eljárás az előfizetés típusától (leküldéses vagy lekéréses) és az előfizetéshez tartozó kiadvány típusától függ.
Pull alapú előfizetés újrainicializálása tranzakciós kiadványhoz
Az előfizetési adatbázisnál az előfizetőnél hajtsa végre az sp_reinitpullsubscription (Transact-SQL) parancsot. Adja meg @publisher, @publisher_db és @publication. Ez megjelöli az előfizetést az újraincializáláshoz a terjesztési ügynök következő futtatásakor.
(Nem kötelező) Indítsa el a terjesztési ügynököt az előfizetőnél az előfizetés szinkronizálásához. További információ: Lekéréses előfizetés szinkronizálása.
Leküldéses előfizetés újra inicializálása tranzakciós kiadványhoz
A Publisherben hajtsa végre a sp_reinitsubscription (Transact-SQL). Adja meg @publication, @subscriber és @destination_db. Ez megjelöli az előfizetést az újrainicializáláshoz az elosztó ügynök következő futtatásakor.
(Nem kötelező) Indítsa el a terjesztési ügynököt a forgalmazónál az előfizetés szinkronizálásához. További információ: Leküldéses előfizetés szinkronizálása.
Visszavont előfizetés újbóli létrehozása egybeolvadást tartalmazó kiadványhoz
Az Előfizetőnél, az előfizetői adatbázison hajtsa végre a sp_reinitmergepullsubscription (Transact-SQL) parancsot. Adja meg @publisher, @publisher_db és @publication. Ha az újrainicializálás előtt szeretné feltölteni a módosításokat az előfizetőtől, adjon meg egy igaz értéket az @upload_first számára. Ez jelöli meg az előfizetést az újrainicializáláshoz, amikor a Merge Agent legközelebb fut.
Fontos
Paraméteres szűrő hozzáadása, elvetése vagy módosítása esetén az Előfizetőnél függőben lévő módosítások nem tölthetők fel a Közzétevőbe az újraincializálás során. Ha függőben lévő módosításokat szeretne feltölteni, a szűrő módosítása előtt szinkronizálja az összes előfizetést.
(Nem kötelező) Indítsa el az egyesítési ügynököt az előfizetőnél az előfizetés szinkronizálásához. További információ: Lekéréses előfizetés szinkronizálása.
Egy Push előfizetés újrainicializálása egy merge kiadványhoz
A Publisherben hajtsa végre a sp_reinitmergesubscription (Transact-SQL). Adja meg @publication, @subscriber és @subscriber_db. Ha az újrainicializálás előtt szeretne módosításokat feltölteni az Előfizetőtől, adja meg az true értéket @upload_first. Ez megjelöli az előfizetést az újrainicializáláshoz, amikor a Disztribúciós ügynök legközelebb fut.
Fontos
Paraméteres szűrő hozzáadása, elvetése vagy módosítása esetén az Előfizetőnél függőben lévő módosítások nem tölthetők fel a Közzétevőbe az újraincializálás során. Ha függőben lévő módosításokat szeretne feltölteni, a szűrő módosítása előtt szinkronizálja az összes előfizetést.
(Nem kötelező) Indítsa el az egyesítési ügynököt a forgalmazónál az előfizetés szinkronizálásához. További információ: Leküldéses előfizetés szinkronizálása.
Az újrainicializálási szabályzat beállítása új egyesítési kiadvány létrehozásakor
A Publisher közzétételi adatbázisában hajtsa végre a sp_addmergepublication, és adja meg az alábbi értékek egyikét a @automatic_reinitialization_policy:
1 – a módosítások feltöltése az Előfizetőtől történik, mielőtt az előfizetés automatikusan újraincializálódik a kiadvány módosítása által megkövetelt módon.
0 – az Előfizető módosításait a rendszer elveti, ha az előfizetés automatikusan újraincializálódik a kiadvány módosítása által megkövetelt módon.
Fontos
Paraméteres szűrő hozzáadása, elvetése vagy módosítása esetén az Előfizetőnél függőben lévő módosítások nem tölthetők fel a Közzétevőbe az újraincializálás során. Ha függőben lévő módosításokat szeretne feltölteni, a szűrő módosítása előtt szinkronizálja az összes előfizetést.
További információ: Kiadvány létrehozása.
Meglévő egyesítési kiadvány újrainicializálási szabályzatának megváltoztatása
A Közzétételi adatbázisban hajtsa végre az sp_changemergepublication eljárást, megadva az @property esetében az automatic_reinitialization_policy értéket, és az @value következő értékei egyikét:
1 – a módosítások feltöltése az Előfizetőtől történik, mielőtt az előfizetés automatikusan újraincializálódik a kiadvány módosítása által megkövetelt módon.
0 – az Előfizető módosításait a rendszer elveti, ha az előfizetés automatikusan újraincializálódik a kiadvány módosítása által megkövetelt módon.
Fontos
Paraméteres szűrő hozzáadása, elvetése vagy módosítása esetén az Előfizetőnél függőben lévő módosítások nem tölthetők fel a Közzétevőbe az újraincializálás során. Ha függőben lévő módosításokat szeretne feltölteni, a szűrő módosítása előtt szinkronizálja az összes előfizetést.
További információ: Kiadványtulajdonságok megtekintése és módosítása.
Replikációkezelési objektumok (RMO) használata
Az egyes előfizetések újraincializálásra jelölhetők, így a következő szinkronizálás során egy új pillanatkép lesz alkalmazva. Az előfizetések programozott módon újraincializálhatók a Replikációkezelési objektumok (RMO) használatával. A használni kívánt osztályok attól függenek, hogy az előfizetés milyen típusú kiadványhoz tartozik, valamint attól, hogy az előfizetés típusa push vagy pull.
Pull alapú előfizetés újrainicializálása tranzakciós kiadványhoz
Hozzon létre kapcsolatot az előfizetővel az ServerConnection osztály használatával.
Hozza létre az TransPullSubscription osztály egy példányát, és állítsa be a PublicationName, DatabaseName, PublisherName, PublicationDBName értékét, valamint az 1. lépésben lévő ConnectionContext kapcsolatot.
Hívja meg a metódust LoadProperties az objektum tulajdonságainak lekéréséhez.
Megjegyzés:
Ha ez a módszer hamis értéket ad vissza, akkor vagy a 2. lépésben szereplő előfizetési tulajdonságok helytelenül lettek definiálva, vagy a lekéréses előfizetés nem létezik.
Hívja meg a Reinitialize metódust. Ez a metódus az előfizetés újrainicializálását jelöli.
Szinkronizálja a lekéréses előfizetést. További információ: Lekéréses előfizetés szinkronizálása.
Leküldéses előfizetés újra inicializálása tranzakciós kiadványhoz
Hozzon létre kapcsolatot a Publisherrel az ServerConnection osztály használatával.
Hozza létre az TransSubscription osztály egy példányát, és állítsa be a PublicationName, DatabaseName, SubscriberName, SubscriptionDBName elemeket, valamint az 1. lépésben található kapcsolatot ConnectionContext számára.
Hívja meg a metódust LoadProperties az objektum tulajdonságainak lekéréséhez.
Megjegyzés:
Ha ez a módszer hamis eredményt ad vissza, akkor a 2. lépésben helytelenül definiálták az előfizetés tulajdonságait, vagy a leküldéses előfizetés nem létezik.
Hívja meg a Reinitialize metódust. Ez a metódus az előfizetést újrainicializálásra jelöli meg.
Szinkronizálja a push előfizetést. További információ: Leküldéses előfizetés szinkronizálása.
Visszavont előfizetés újbóli létrehozása egybeolvadást tartalmazó kiadványhoz
Hozzon létre kapcsolatot az előfizetővel az ServerConnection osztály használatával.
Hozza létre az MergePullSubscription osztály egy példányát, és állítsa be a PublicationName, DatabaseName, PublisherName, PublicationDBName, és a kapcsolatot az 1. lépésben ConnectionContext számára.
Hívja meg a metódust LoadProperties az objektum tulajdonságainak lekéréséhez.
Megjegyzés:
Ha ez a módszer hamis értéket ad vissza, akkor vagy a 2. lépésben szereplő előfizetési tulajdonságok helytelenül lettek definiálva, vagy a lekéréses előfizetés nem létezik.
Hívja meg a Reinitialize metódust. A true érték megadása feltölti a módosításokat az Előfizetőnél az újrainicializálás előtt, vagy false érték megadása újrainicializálja a rendszert, és minden függőben lévő módosítás elveszik az Előfizetőnél. Ez a metódus jelöli meg az újraincializálási előfizetést.
Megjegyzés:
A módosítások nem tölthetők fel, ha az előfizetés lejárt. További információ: Az előfizetések lejárati idejének beállítása.
Szinkronizálja a lekéréses előfizetést. További információ: Lekéréses előfizetés szinkronizálása.
Egy Push előfizetés újrainicializálása egy merge kiadványhoz
Hozzon létre kapcsolatot a Publisherrel az ServerConnection osztály használatával.
Hozza létre az MergeSubscription osztály egy példányát, és állítsa be a PublicationName, DatabaseName, SubscriberName, SubscriptionDBName elemeket, valamint az 1. lépésben létrehozott kapcsolatot ConnectionContext számára.
Hívja meg a metódust LoadProperties az objektum tulajdonságainak lekéréséhez.
Megjegyzés:
Ha ez a módszer hamis eredményt ad vissza, akkor a 2. lépésben helytelenül definiálták az előfizetés tulajdonságait, vagy a leküldéses előfizetés nem létezik.
Hívja meg a Reinitialize metódust. Adjon meg igaz értéket, hogy az újrainicializálás előtt feltöltse a módosításokat az Előfizetőnél, vagy hamis értéket adjon meg az újrainicializáláshoz és ezzel elvesztse a függőben lévő módosításokat az Előfizetőnél. Ez a metódus jelöli meg az újraincializálási előfizetést.
Megjegyzés:
A módosítások nem tölthetők fel, ha az előfizetés lejárt. További információ: Az előfizetések lejárati idejének beállítása.
Szinkronizálja a leküldéses előfizetést. További információ: Leküldéses előfizetés szinkronizálása.
Példák (RMO)
Ez a példa újrainicializál egy lekéréses előfizetést egy tranzakciós kiadványba.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksProductTran";
String publicationDbName = "AdventureWorks2022";
String subscriptionDbName = "AdventureWorks2022Replica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
TransPullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new TransPullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, mark the subscription
// for reinitialization and start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
subscription.Reinitialize();
subscription.SynchronizeWithJob();
}
else
{
// Do something here if the subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exists on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be reinitialized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As TransPullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New TransPullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, mark the subscription
' for reinitialization and start the agent job.
If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
subscription.Reinitialize()
subscription.SynchronizeWithJob()
Else
' Do something here if the subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exists on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be reinitialized.", ex)
Finally
conn.Disconnect()
End Try
Ez a példa újrainicializál egy lekéréses előfizetést egy egyesítési kiadványba, miután először feltöltötte a függőben lévő módosításokat az Előfizetőnél.
// Define server, publication, and database names.
String subscriberName = subscriberInstance;
String publisherName = publisherInstance;
String publicationName = "AdvWorksSalesOrdersMerge";
String publicationDbName = "AdventureWorks2022";
String subscriptionDbName = "AdventureWorks2022Replica";
// Create a connection to the Subscriber.
ServerConnection conn = new ServerConnection(subscriberName);
MergePullSubscription subscription;
try
{
// Connect to the Subscriber.
conn.Connect();
// Define subscription properties.
subscription = new MergePullSubscription();
subscription.ConnectionContext = conn;
subscription.DatabaseName = subscriptionDbName;
subscription.PublisherName = publisherName;
subscription.PublicationDBName = publicationDbName;
subscription.PublicationName = publicationName;
// If the pull subscription and the job exists, mark the subscription
// for reinitialization after upload and start the agent job.
if (subscription.LoadProperties() && subscription.AgentJobId != null)
{
subscription.Reinitialize(true);
subscription.SynchronizeWithJob();
}
else
{
// Do something here if the subscription does not exist.
throw new ApplicationException(String.Format(
"A subscription to '{0}' does not exists on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Do appropriate error handling here.
throw new ApplicationException("The subscription could not be synchronized.", ex);
}
finally
{
conn.Disconnect();
}
' Define server, publication, and database names.
Dim subscriberName As String = subscriberInstance
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
' Create a connection to the Subscriber.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
conn.Connect()
' Define subscription properties.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.DatabaseName = subscriptionDbName
subscription.PublisherName = publisherName
subscription.PublicationDBName = publicationDbName
subscription.PublicationName = publicationName
' If the pull subscription and the job exists, mark the subscription
' for reinitialization after upload and start the agent job.
If subscription.LoadProperties() And (Not subscription.AgentJobId Is Nothing) Then
subscription.Reinitialize(True)
subscription.SynchronizeWithJob()
Else
' Do something here if the subscription does not exist.
Throw New ApplicationException(String.Format( _
"A subscription to '{0}' does not exists on {1}", _
publicationName, subscriberName))
End If
Catch ex As Exception
' Do appropriate error handling here.
Throw New ApplicationException("The subscription could not be synchronized.", ex)
Finally
conn.Disconnect()
End Try