Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł pomaga rozwiązać problem polegający na tym, że zauważasz ciągły wzrost dziennika transakcji dla bazy danych z włączoną usługą CDC.
Oryginalna wersja produktu: SQL Server 2012 i nowsze wersje
Oryginalny numer KB: 2871474
Symptomy
Rozważmy następujący scenariusz:
- Używasz programu SQL Server 2017, SQL Server 2016, SQL Server 2014 lub SQL Server 2012 w systemie Windows.
- Używasz rozwiązania Change Data Capture dla Oracle firmy Attunity.
- Wystąpienie cdC tworzy się w celu przechwytywania zmian z tabel bazy danych Oracle.
- Wartości przechwytywania zmian są przechowywane w bazach danych przechwytywania zmian programu SQL Server.
- Dziennik transakcji w bazie danych programu SQL Server rośnie, a transakcje nie są oznaczane do obcinania, ponieważ zmiany danych są przechwytywane.
W tym scenariuszu wzrost pliku dziennika transakcji bazy danych programu SQL Server gromadzi się i zużywa zbyt dużo miejsca na dysku w czasie.
Przyczyna
Po skonfigurowaniu funkcji przechwytywania zmian danych dla wystąpień Oracle baza danych SQL, która odbiera dane zmiany, będzie zawierać tabele dublowane z transakcjami oznaczonymi do replikacji. Takie zachowanie występuje, ponieważ usługa CDC for Oracle opiera się na podstawowych procedurach składowanych systemu, które przypominają te, które są używane w usłudze CDC dla programu SQL Server. Jednak ponieważ nie jest używana żadna replikacja usługi CDC SQL w przypadku użycia samej usługi CDC dla bazy danych Oracle, nie ma czytnika dzienników w celu wyczyszczenia transakcji oznaczonych do replikacji. Ponieważ transakcja nie musi być replikowana w programie SQL Server, można bezpiecznie ręcznie oznaczyć transakcję jako dystrybuowaną przy użyciu obejścia opisanego w dalszej części tego artykułu.
Aby sprawdzić tę dokładną przyczynę DBCC OPENTRAN
, uruchom polecenie podczas nawiązywania połączenia z bazą danych CDC programu SQL Server. Zobaczysz nieprostrybucyjną liczbę LSN, jak pokazano w poniższym przykładzie:
Replicated Transaction Information:
Oldest distributed LSN : (0:0:0)
Oldest non-distributed LSN : (38:272:1)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Być może istnieje rozproszona nazwa LSN, ponieważ usługa CDC dla firmy Oracle używa usługi CDC dla procedur składowanych SQL, a z kolei używa czytnika dzienników replikacji. Ta nieproszysowana nazwa LSN odpowiada wpisom dziennika, aby dodać tabelę dublowaną w bazie danych usługi CDC attunity.
Jeśli uruchomisz to zapytanie, log_reuse_wait_desc
opcja zwróci wartość REPLICATION
, wskazującą przyczynę.
SELECT log_reuse_wait_desc FROM sys.databases WHERE name = '<your_cdc_database>'
Rozwiązanie
Uruchom następujące polecenie w oknie zapytania połączonym z bazą danych z włączoną usługą CDC w programie SQL Server:
EXEC sp_repltrans
Powinny zostać wyświetlone dane wyjściowe podobne do następujących:
xdesid xact_seqno xact_seqno 0x000000260000012C0001 0x0000002A000001B50001
Skopiuj numery sekwencji transakcji LSN dla następnego polecenia.
Używając liczb z kroku 1, uruchom
sp_repldone
polecenie w następujący sposób, aby zasygnalizować, że pary LSN BeginTran i CommitTran są już replikowane:sp_repldone @xactid = 0x000000260000012C0001, @xact_segno = 0x0000002A000001B50001
Uruchom następujące polecenie, aby sprawdzić, czy transakcja jest oznaczona jako zreplikowana w bazie danych CDC:
DBCC OPENTRAN
Spowoduje to zwrócenie danych wyjściowych przypominających następujące:
No active open transactions. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Aby upewnić się, że dziennik transakcji można użyć ponownie, upewnij się, że nie ma innego powodu ponownego użycia wskazanego w bazie danych:
SELECT log_reuse_wait_desc, NAME FROM sys.databases WHERE NAME = '<your_cdc_database>'
Spowoduje to zwrócenie danych wyjściowych przypominających następujące:
log_reuse_wait_desc name NOTHING <your_cdc_database>
Teraz powinno być możliwe obcięcie dziennika transakcji przy użyciu kopii zapasowych dziennika. Należy również zmniejszyć plik dziennika transakcji, aby zmniejszyć ilość używanego miejsca na dysku. Uruchom na przykład następujące polecenie:
BACKUP LOG <your_cdc_database> TO DISK='c:\folder\logbackup.trn' DBCC SHRINKFILE (yourcdcdatabase_log, 1024)
Aby uzyskać więcej informacji, zobacz Zarządzanie rozmiarem pliku dziennika transakcji.
Więcej informacji
Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z błędami instancji CDC w usłudze Microsoft Change Data Capture dla Oracle autorstwa Attunity.
Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.