Udostępnij za pośrednictwem


sys.sp_cdc_enable_table (języka Transact-SQL)

Umożliwia zmienianie pobierania danych dla określonego urządzenie źródłowe tabela w bieżącej bazie danych.Po włączeniu tabela do przechwytywania danych zmiana rekordu każdej operacji języka (DML) manipulacji na danych zastosowane w tabela są zapisywane dziennik transakcji.Proces przechwytywania danych zmiana pobiera tę informację z dziennika i zapisuje zmiany tabel, które są dostępne przy użyciu zestaw funkcji.

Przechwytywanie danych zmian jest dostępne tylko w SQL Server 2008 Wersje Enterprise Developer i oceny.

Topic link iconKonwencje składni języka Transact-SQL

sys.sp_cdc_enable_table 
    [ @source_schema = ] 'source_schema', 
    [ @source_name = ] 'source_name' ,
    [ @role_name = ] 'role_name'
    [,[ @capture_instance = ] 'capture_instance' ]
    [,[ @supports_net_changes = ] supports_net_changes ]
    [,[ @index_name = ] 'index_name' ]
    [,[ @captured_column_list = ] 'captured_column_list' ]
    [,[ @filegroup_name = ] 'filegroup_name' ]
  [,[ @partition_switch = ] 'partition_switch' ]

Argumenty

  • [ @source_schema = ] 'source_schema'
    Is the name of the schema in which the source table belongs.source_schema is sysname, with no default, and cannot be NULL.

  • [ @source_name = ] 'source_name'
    Is the name of the source table on which to enable change data capture.source_name is sysname, with no default, and cannot be NULL.

    source_name musi istnieć w bieżącej bazie danych.Tabele w CDC schematu nie może być włączone do przechwytywania danych zmian.

  • [ @role_name = ] 'role_name'
    Is the name of the database role used to gate access to change data.role_name is sysname and must be specified.Jeśli jawnie zestaw wartość null, nie bramkowania roli jest używana do ograniczania dostępu do danych zmian.

    Jeśli rola aktualnie istnieje, jest ona używana.Jeśli rola nie istnieje, jest podjęta próba utworzenia rola bazy danych o określonej nazwie.Nazwa roli przycięciu odstępu po prawej stronie ciąg przed próbą utworzenia roli.Jeśli obiekt wywołujący nie posiada uprawnień do tworzenie roli w bazie danych, procedura przechowywana kończy się niepowodzeniem.

  • [ @capture_instance = ] 'capture_instance'
    Is the name of the capture instance used to name instance-specific change data capture objects.capture_instance is sysname and cannot be NULL.

    If not specified, the name is derived from the source schema name plus the source table name in the format schemaname_sourcename.capture_instance cannot exceed 100 characters and must be unique within the database.Czy określone lub, capture_instance wszystkie odstępy z prawej strony ciąg przycięciu.

    A urządzenie źródłowe tabela może mieć maksymalnie dwa wystąpienia przechwytywania.Aby uzyskać więcej informacji, zobacz sys.sp_cdc_help_change_data_capture (Transact-SQL).

  • [ @supports_net_changes = ] supports_net_changes
    Indicates whether support for querying for net changes is to be enabled for this capture instance.supports_net_changes is bit with a default of 1 if the table has a primary key or the table has a unique index that has been identified by using the @index\_name parameter.W przeciwnym razie parametr domyślnie na wartość 0.

    Jeśli jest ustawiona na 0, są generowane tylko funkcje pomocy technicznej do kwerendy dla wszystkich zmian.

    Jeśli jest to 1, generowane są również funkcje, które są potrzebne, aby wykonać kwerendę obroty netto.

    Jeśli supports_net_changes jest ustawiona na wartość 1, index_name musi być określona, lub urządzenie źródłowe tabela musi mieć zdefiniowany klucz podstawowy.

  • [ @index_name = ] **'**index_name'
    The name of a unique index to use to uniquely identify rows in the source table.index_name is sysname and can be NULL.Jeśli określono, index_name musi być prawidłowy unikatowy indeks na urządzenie źródłowe tabela. Jeśli index_name jest określony, kolumny indeksu zidentyfikowanych ma wyższy priorytet niż wszystkie zdefiniowane kolumny klucz podstawowy jako identyfikator unikatowy wiersz w tabela.

  • [ @captured_column_list = ] 'captured_column_list'
    Identifies the source table columns that are to be included in the change table.captured_column_list is nvarchar(max) and can be NULL.Jeśli wartością tą jest NULL, wszystkie kolumny są uwzględniane w tabela Zmiana.

    kolumna nazwy muszą być prawidłowe s kolumna w tabela źródłowej.Kolumny zdefiniowane w indeks klucz podstawowy lub kolumn zdefiniowanych w indeksie przez index_name musi być włączona.

    captured_column_list jest listą rozdzielaną przecinkami kolumna nazwy.Nazw poszczególnych kolumn na liście mogą być opcjonalnie podane przy użyciu albo podwójny cudzysłów ("") i nawiasy kwadratowe ([]).Jeśli nazwa kolumna zawiera osadzony przecinek, musi być podana nazwa kolumna.

    captured_column_list nie mogą zawierać następujących nazw zastrzeżonych kolumna: __ $ start_lsn, __ $ end_lsn, __ $ seqval, Operacja $ __, and __ $ update_mask.

  • [ @filegroup_name = ] 'filegroup_name'
    Is the filegroup to be used for the change table created for the capture instance.filegroup_name is sysname and can be NULL.Jeśli określono, filegroup_name musi być zdefiniowana w bieżącej bazie danych. Jeśli wartością tą jest NULL, grupa plików, w domyślnym jest używany.

    Zaleca się tworzenie oddzielnych grupa plików do przechwytywania danych zmiana zmienianie tabel.Aby uzyskać więcej informacji zobaczKonfigurowanie Zmień przechwytywanie danych.

  • [ @allow_partition_switch= ] 'allow_partition_switch'
    Indicates whether the SWITCH PARTITION command of ALTER TABLE can be executed against a table that is enabled for change data capture.allow_partition_switch is bit, with a default of 1.

    Ustawienie przełącznika jest zawsze 1 nonpartitioned tabel i rzeczywiste ustawienie jest ignorowane.Jeśli ten przełącznik jest jawnie zestaw na 0 w przypadku tabela nonpartitioned ostrzeżenie 22857 wydano oznacza, że przełącznik zestaw ting zostało zignorowane.Jeśli ten przełącznik jest jawnie zestaw na 0 w przypadku tabela partycjonowana, ostrzeżenie 22356 wydaje się wskazują będą niedozwolone operacji przełącznika partycji w tabeli źródłowej.Wreszcie Jeśli ustawienie przełącznika jest albo ustawiona jawnie na 1 lub dozwolone do ustawień domyślnych na 1, tabela włączony jest podzielony na partycje, ostrzeżenie 22855 wydaje się wskazują przełączników partycji nie będą blokowane.Przełączników partycji, jeśli wystąpi przechwytywania danych zmian nie będzie śledzenie zmian, wynikających z przełącznikiem.Spowoduje to niespójności danych podczas zmiany danych jest zużywany.

    Important noteImportant Note:

    Przełącznik PARTITION jest operacją metadane, ale powoduje zmiany danych.Zmiany, które są skojarzone z tej operacji nie są przechwytywane dane zmiany danych przechwytywania zmiany tabel.Należy wziąć pod uwagę tabela, która ma trzy partycje, a zmiany są wprowadzane w tej tabela.Proces przechwytywania będzie śledzić użytkowników wstawiania, aktualizacji i operacji usuwania, które są wykonywane przed w tabela.Niemniej jednak jeśli partycja przełączeniu się do innej tabela (na przykład, aby wykonać usuwanie zbiorcze), wiersze, które zostały przeniesione, jako część tej operacji nie ma być przechwytywane jako usuniętych wierszy w tabela Zmiana.Podobnie jeśli nową partycję, która posiada wstępnie wierszy zostanie dodany do tabela, te wiersze nie są odzwierciedlane w tabela Zmiana.Może to spowodować niespójność danych, gdy zmiany są zużywane przez aplikację i stosowane do obiekt docelowy.

Wartości kodów powrotnych

0 (sukces) lub 1 (brak)

Zestawy wyników

None

Remarks

Przed włączeniem tabela do przechwytywania danych zmian w bazie danych musi być włączony.Aby ustalić, czy baza danych jest skonfigurowany do przechwytywania danych zmian, należy zbadać is_cdc_enabled kolumnasys.Databases Służy do wyświetlania katalogu. Aby włączyć bazę danych, należy użyć sys.sp_cdc_enable_db procedura przechowywana.

Podczas przechwytywania danych zmian jest włączona dla tabeli, tabela zmiany i jedną lub dwie funkcje kwerendy są generowane.Zmienianie tabela służy jako repozytorium urządzenie źródłowe tabela zmiany wyodrębnione z dziennik transakcji przez proces przechwytywania.Funkcje kwerendy są używane do wyodrębniania danych z tabela zmiany.Nazwy te funkcje są obliczane na podstawie capture_instance Parametr w następujący sposób:

  • Wszystkie zmiany funkcja: CDC.fn_cdc_get_all_changes_<capture_instance>

  • Funkcja Obroty netto: CDC.fn_cdc_get_net_changes_<capture_instance>

sys.sp_cdc_enable_table tworzy również przechwytywania i zadań oczyszczania bazy danych, jeśli w tabeli źródłowej jest pierwsza tabela w bazie danych, aby można było włączyć na zmianę przechwytywania danych i nie transakcyjnych publikacji istnieje w bazie danych.Ustawia is_tracked_by_cdc kolumnasys.Tables wyświetlanie katalogu 1.

Uwaga

SQL Server Agent nie musi być uruchomiony podczas przechwytywania danych zmian jest włączona dla tabela.Jednak proces przechwytywania nie obsługuje dziennik transakcji i tworzyć wpisy w tabela Zmiana, chyba że SQL Server Agent jest uruchomiony.

Uprawnienia

Członkostwo w grupie wymaga db_owner stała rola bazy danych.

Przykłady

A.Włączanie zmian przechwytywania danych przez podanie tylko wymaganych parametrów.

Następujące umożliwia przykład zmienić pobierania danych dla HumanResources.Employee Tabela. Wymagane parametry są określone.

USE AdventureWorks;
GO
EXECUTE sys.sp_cdc_enable_table
    @source_schema = N'HumanResources'
  , @source_name = N'Employee'
  , @role_name = N'cdc_Admin';
GO

B.Włączanie zmian przechwytywania danych przez określenie dodatkowych parametrów opcjonalnych

Następujące umożliwia przykład zmienić pobierania danych dla HumanResources.Department Tabela. Wszystkie parametry z wyjątkiem @allow\_partition\_switch zostały określone.

USE AdventureWorks;
GO
EXEC sys.sp_cdc_enable_table
    @source_schema = N'HumanResources'
  , @source_name = N'Department'
  , @role_name = N'cdc_admin'
  , @capture_instance = N'HR_Department' 
  , @supports_net_changes = 1
  , @index_name = N'AK_Department_Name' 
  , @captured_column_list = N'DepartmentID, Name, GroupName' 
  , @filegroup_name = N'PRIMARY';
GO