Jak stwierdzić, czy plik kopii zapasowej zawiera CDC?

9

Używając programu SQL Server 2008 do 2014 roku, wiem, jak wykonać kopię zapasową i przywrócić bazę danych z włączoną funkcją Przechwytywanie danych (CDC), ale szukam sposobu na wysłanie zapytania do pełnego pliku kopii zapasowej w celu ustalenia, czy zawiera on dane CDC.

Byłoby wspaniale, gdyby RESTORE FILELISTONLYpobierał listę plików z bazy danych, ale zamiast tego pobierał status CDC w celu ustalenia, czy przywracanie będzie wymagało użycia flagi KEEP_CDC?

Czy istnieje sposób ustalenia, czy kopia zapasowa zawiera dane CDC?

dzięki!

Steve Stedman
źródło

Odpowiedzi:

7

(jeśli ktoś znajdzie sposób - który, jak sądzę, nie istnieje, usunę moją odpowiedź :-))

Czy istnieje sposób ustalenia, czy kopia zapasowa zawiera dane CDC?

Nie sądzę, aby można było wiedzieć z kopii zapasowej, czy CDC jest włączony, czy nie.

Najbardziej możesz wiedzieć, czy baza danych była zaangażowana w replikację (pod maską używa agenta czytnika dziennika, który skanuje dziennik transakcji), czy nie, używając DatabaseBackupLSN w wyniku RESTORE HEADERONLYDatabaseBackupLSN, ponieważ jest to „początek punktu kontrolnego”, który jest uruchamiany podczas tworzenia kopii zapasowej zaczyna się. Ten FirstLSNnumer LSN zbiegnie się, jeśli kopia zapasowa zostanie wykonana, gdy baza danych jest bezczynna i nie skonfigurowano replikacji.

Zakładam, że powód, dla którego Microsoft nie ujawnia, czy CDC jest włączony, czy nie, może być również kwestią bezpieczeństwa. CDC to technologia na poziomie przedsiębiorstwa, która umożliwia śledzenie zmian aż do poziomu kolumny. Jest to wymagane przez przepisy takie jak HIPAA, FISMA itp.

Od przywracania lub dołączania bazy danych włączonej do zmiany przechwytywania danych

SQL Server używa następującej logiki, aby ustalić, czy przechwytywanie zmian danych pozostaje włączone po przywróceniu lub podłączeniu bazy danych:

  • Jeśli baza danych zostanie przywrócona na tym samym serwerze o tej samej nazwie, zmiana przechwytywania danych pozostanie włączona.
  • Jeśli baza danych zostanie przywrócona na innym serwerze, domyślnie przechwytywanie danych zmiany jest wyłączone, a wszystkie powiązane metadane są usuwane.
  • Aby zachować przechwytywanie danych zmian, użyj opcji KEEP_CDC podczas przywracania bazy danych. Aby uzyskać więcej informacji o tej opcji, zobacz PRZYWRACANIE.
  • Jeśli baza danych zostanie odłączona i podłączona do tego samego lub innego serwera, zmiana przechwytywania danych pozostanie włączona.
  • Jeśli baza danych zostanie dołączona lub przywrócona z opcją KEEP_CDC do dowolnej edycji innej niż Enterprise, operacja zostanie zablokowana, ponieważ przechwytywanie zmian danych wymaga programu SQL Server Enterprise. Wyświetlany jest komunikat o błędzie 932:

Program SQL Server nie może załadować bazy danych „%. * Ls, ponieważ zmiana przechwytywania danych jest włączona. Aktualnie zainstalowana wersja programu SQL Server nie obsługuje przechwytywania zmian danych. Wyłącz przechwytywanie danych zmian w bazie danych za pomocą obsługiwanej wersji programu SQL Server lub uaktualnij instancję do wersji obsługującej przechwytywanie danych zmian.

Kin Shah
źródło
Kin - Jak zwykle jesteś gwiazdą rocka DBA.Dziękujemy za szczegóły. Myślę, że doszedłem do tego samego wniosku i naprawdę szukałem kogoś, kto potwierdzi, że nie ma sposobu, aby sprawdzić, czy kopia zapasowa zawiera CDC. Miłego dnia. Dzięki!
Steve Stedman
@SteveStedman Dzięki za miłe słowa. Proszę głosować / zaakceptować odpowiedź, jeśli odpowiedź na twoje pytanie. Pomoże to również przyszłym czytelnikom :-)
Kin Shah
Dzięki Steve za post i dzięki @Kin, nauczyłem się dzisiaj czegoś nowego.
SQLBoy,
Uwaga: CDC jest teraz dostępny w wersji 2016 SP1 Standard lub wyższej i staje się coraz bardziej popularny. Chciałbym opcji CDC w interfejsie przywracania w SSMS, zasugerowałem to również w przypadku połączenia: connect.microsoft.com/SQLServer/feedback/details/3144490/…
GilesDMiddleton