Abilitare e disabilitare Change Data Capture (SQL Server)Enable and Disable Change Data Capture (SQL Server)

In questo argomento viene descritto come abilitare e disabilitare Change Data Capture per un database e una tabella.This topic describes how to enable and disable change data capture for a database and a table.

Abilitazione di Change Data Capture per un databaseEnable Change Data Capture for a Database

Prima di creare un'istanza di acquisizione per le singole tabelle, è necessario che un membro del ruolo predefinito del server sysadmin abiliti il database per Change Data Capture.Before a capture instance can be created for individual tables, a member of the sysadmin fixed server role must first enable the database for change data capture. Questa operazione viene eseguita eseguendo la stored procedure sys.sp_cdc_enable_db (Transact-SQL) nel contesto del database.This is done by running the stored procedure sys.sp_cdc_enable_db (Transact-SQL) in the database context. Per determinare se un database è già abilitato, eseguire una query sulla colonna is_cdc_enabled nella vista del catalogo sys.databases.To determine if a database is already enabled, query the is_cdc_enabled column in the sys.databases catalog view.

Quando un database è abilitato per Change Data Capture, per il database vengono creati lo schema cdc , l'utente cdc , le tabelle dei metadati e altri oggetti di sistema.When a database is enabled for change data capture, the cdc schema, cdc user, metadata tables, and other system objects are created for the database. Lo schema cdc contiene le tabelle di metadati di Change Data Capture e, dopo l'abilitazione della funzionalità delle tabelle di origine, le singole tabelle delle modifiche fungono da repository per i dati delle modifiche.The cdc schema contains the change data capture metadata tables and, after source tables are enabled for change data capture, the individual change tables serve as a repository for change data. Lo schema cdc contiene anche le funzioni di sistema associate usate per eseguire query sui dati delle modifiche.The cdc schema also contains associated system functions used to query for change data.

Change Data Capture richiede l'uso esclusivo dello schema cdc e dell'utente cdc .Change data capture requires exclusive use of the cdc schema and cdc user. Se in un database è attualmente presente uno schema o un utente di database denominato cdc , il database non può essere abilitato per Change Data Capture fino all'eliminazione o alla ridenominazione dello schema o dell'utente.If either a schema or a database user named cdc currently exists in a database, the database cannot be enabled for change data capture until the schema and or user are dropped or renamed.

Per un esempio di abilitazione di un database, vedere il modello Enable Database for Change Data Capture.See the Enable Database for Change Data Capture template for an example of enabling a database.

Importante

Per individuare i modelli in SQL Server Management StudioSQL Server Management Studio, scegliere Esplora modellidal menu Visualizza, quindi selezionare Modelli di SQL Server.To locate the templates in SQL Server Management StudioSQL Server Management Studio, go to View, click Template Explorer, and then select SQL Server Templates. Change Data Capture è una sottocartella.Change Data Capture is a sub-folder. che contiene tutti i modelli a cui si fa riferimento in questo argomento.Under this folder, you will find all the templates referenced in this topic. È inoltre presente un'icona Esplora modelli sulla barra degli strumenti di SQL Server Management StudioSQL Server Management Studio .There is also a Template Explorer icon on the SQL Server Management StudioSQL Server Management Studio toolbar.

-- ====  
-- Enable Database for CDC template   
-- ====  
USE MyDB  
GO  
EXEC sys.sp_cdc_enable_db  
GO  

Disabilitazione di Change Data Capture per un databaseDisable Change Data Capture for a Database

Un membro del ruolo predefinito del server sysadmin può eseguire la stored procedure sys.sp_cdc_disable_db (Transact-SQL) nel contesto del database per disabilitare Change Data Capture per un database.A member of the sysadmin fixed server role can run the stored procedure sys.sp_cdc_disable_db (Transact-SQL) in the database context to disable change data capture for a database. Non è necessario disabilitare singole tabelle prima di disabilitare il database.It is not necessary to disable individual tables before you disable the database. La disabilitazione del database comporta la rimozione di tutti i metadati di Change Data Capture associati, inclusi l'utente e lo schema cdc e i processi Change Data Capture.Disabling the database removes all associated change data capture metadata, including the cdc user and schema and the change data capture jobs. Eventuali ruoli di controllo creati da Change Data Capture, tuttavia, non verranno rimossi automaticamente e devono essere eliminati in modo esplicito.However, any gating roles created by change data capture will not be removed automatically and must be explicitly deleted. Per determinare se un database è abilitato, eseguire una query sulla colonna is_cdc_enabled nella vista del catalogo sys.databases.To determine if a database is enabled, query the is_cdc_enabled column in the sys.databases catalog view.

Se viene eliminato un database abilitato per Change Data Capture, i processi Change Data Capture vengono automaticamente rimossi.If a change data capture enabled database is dropped, change data capture jobs are automatically removed.

Per un esempio di disabilitazione di un database, vedere il modello Disable Database for Change Data Capture.See the Disable Database for Change Data Capture template for an example of disabling a database.

Importante

Per individuare i modelli in SQL Server Management StudioSQL Server Management Studio, scegliere Esplora modellidal menu Visualizza, quindi fare clic su Modelli di SQL Server.To locate the templates in SQL Server Management StudioSQL Server Management Studio, go to View, click Template Explorer, and then click SQL Server Templates. Change Data Capture è una sottocartella contenente tutti i modelli a cui si fa riferimento in questo argomento.Change Data Capture is a sub-folder where you will find all the templates that are referenced in this topic. È inoltre presente un'icona Esplora modelli sulla barra degli strumenti di SQL Server Management StudioSQL Server Management Studio .There is also a Template Explorer icon on the SQL Server Management StudioSQL Server Management Studio toolbar.

-- =======  
-- Disable Database for Change Data Capture template   
-- =======  
USE MyDB  
GO  
EXEC sys.sp_cdc_disable_db  
GO  

Abilitazione di Change Data Capture per una tabellaEnable Change Data Capture for a Table

Dopo avere abilitato un database per Change Data Capture, i membri del ruolo predefinito del database db_owner possono creare un'istanza di acquisizione per le singole tabelle di origine usando la stored procedure sys.sp_cdc_enable_table.After a database has been enabled for change data capture, members of the db_owner fixed database role can create a capture instance for individual source tables by using the stored procedure sys.sp_cdc_enable_table. Per determinare se una tabella di origine è attualmente abilitata per Change Data Capture, esaminare la colonna is_tracked_by_cdc nella vista del catalogo sys.tables .To determine whether a source table has already been enabled for change data capture, examine the is_tracked_by_cdc column in the sys.tables catalog view.

Quando si crea un'istanza di acquisizione, è possibile specificare le opzioni seguenti:The following options can be specified when creating a capture instance:

Colonne nella tabella di origine da acquisire.Columns in the source table to be captured.

Per impostazione predefinita, tutte le colonne della tabella di origine vengono identificate come colonne acquisite.By default, all of the columns in the source table are identified as captured columns. Se è necessario rilevare solo un subset di colonne, ad esempio per motivi di privacy o di prestazioni, usare il parametro @captured_column_list per specificare il subset di colonne.If only a subset of columns need to be tracked, such as for privacy or performance reasons, use the @captured_column_list parameter to specify the subset of columns.

Un filegroup per contenere la tabella delle modifiche.A filegroup to contain the change table.

Per impostazione predefinita, la tabella delle modifiche si trova nel filegroup predefinito del database.By default, the change table is located in the default filegroup of the database. I proprietari del database che vogliono controllare la posizione di singole tabelle delle modifiche possono usare il parametro @filegroup_name per specificare un determinato filegroup per la tabella delle modifiche associata all'istanza di acquisizione.Database owners who want to control the placement of individual change tables can use the @filegroup_name parameter to specify a particular filegroup for the change table associated with the capture instance. È necessario che il filegroup specificato sia già presente.The named filegroup must already exist. È in genere consigliabile inserire le tabelle delle modifiche in un filegroup distinto dalle tabelle di origine.Generally, it is recommended that change tables be placed in a filegroup separate from source tables. Vedere il modello Abilitare una tabella specificando l'opzione filegroup per un esempio su come usare il parametro @filegroup_name .See the Enable a Table Specifying Filegroup Option template for an example showing use of the @filegroup_name parameter.

-- =========  
-- Enable a Table Specifying Filegroup Option Template  
-- =========  
USE MyDB  
GO  

EXEC sys.sp_cdc_enable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@role_name     = N'MyRole',  
@filegroup_name = N'MyDB_CT',  
@supports_net_changes = 1  
GO  

Un ruolo per il controllo dell’accesso alla tabella delle modifiche.A role for controlling access to a change table.

Lo scopo del ruolo specificato consiste nel controllare l'accesso ai dati delle modifiche.The purpose of the named role is to control access to the change data. Il ruolo specificato può essere un ruolo predefinito del server esistente o un ruolo del database.The specified role can be an existing fixed server role or a database role. Se il ruolo specificato non è già presente, verrà automaticamente creato un ruolo del database con il nome indicato.If the specified role does not already exist, a database role of that name is created automatically. I membri del ruolo sysadmin o db_owner hanno accesso completo ai dati nelle tabelle delle modifiche.Members of either the sysadmin or db_owner role have full access to the data in the change tables. Tutti gli altri utenti devono disporre dell'autorizzazione SELECT per tutte le colonne acquisite della tabella di origine.All other users must have SELECT permission on all the captured columns of the source table. Quando viene specificato un ruolo, inoltre, gli utenti che non sono membri del ruolo sysadmin o db_owner devono essere anche membri del ruolo specificato.In addition, when a role is specified, users who are not members of either the sysadmin or db_owner role must also be members of the specified role.

Se non si vuole usare un ruolo di controllo, impostare in modo esplicito il parametro @role_name su Null.If you do not want to use a gating role, explicitly set the @role_name parameter to NULL. Vedere il modello Abilitare una tabella senza usare un ruolo di controllo per un esempio su come abilitare una tabella senza un ruolo di controllo.See the Enable a Table Without Using a Gating Role template for an example of enabling a table without a gating role.

-- =========  
-- Enable a Table Without Using a Gating Role template   
-- =========  
USE MyDB  
GO  
EXEC sys.sp_cdc_enable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@role_name     = NULL,  
@supports_net_changes = 1  
GO  

Una funzione per eseguire query per le modifiche delta.A function to query for net changes.

Un'istanza di acquisizione includerà sempre una funzione con valori di tabella per la restituzione di tutte le voci della tabella delle modifiche generate in un intervallo definito.A capture instance will always include a table valued function for returning all change table entries that occurred within a defined interval. Il nome di questa funzione viene creato aggiungendo il nome dell'istanza di acquisizione a "cdc.fn_cdc_get_all_changes_."This function is named by appending the capture instance name to "cdc.fn_cdc_get_all_changes_". Per altre informazioni, vedere cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).For more information, see cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).

Se il parametro @supports_net_changes è impostato su 1, viene generata anche una funzione del rilevamento delle modifiche delta.If the parameter @supports_net_changes is set to 1, a net changes function is also generated for the capture instance. Questa funzione restituisce solo una modifica per ogni riga distinta modificata nell'intervallo specificato nella chiamata.This function returns only one change for each distinct row changed in the interval specified in the call. Per altre informazioni, vedere cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).For more information, see cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).

Per supportare le query sulle modifiche delta, è necessario che la tabella di origine disponga di una chiave primaria o di un indice univoco per identificare le righe in modo univoco.To support net changes queries, the source table must have a primary key or unique index to uniquely identify rows. Se viene usato un indice univoco, il nome dell'indice deve essere specificato con il parametro @index_name .If a unique index is used, the name of the index must be specified using the @index_name parameter. Le colonne definite nella chiave primaria o nell'indice univoco devono essere incluse nell'elenco delle colonne di origine da acquisire.The columns defined in the primary key or unique index must be included in the list of source columns to be captured.

Vedere il modello Abilitare una tabella per le query All e Net Changes per un esempio che descrive la creazione di un'istanza di acquisizione con entrambe le funzioni di query.See the Enable a Table for All and Net Changes Queries template for an example demonstrating the creation of a capture instance with both query functions.

-- =============  
-- Enable a Table for All and Net Changes Queries template   
-- =============  
USE MyDB  
GO  
EXEC sys.sp_cdc_enable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@role_name     = N'MyRole',  
@supports_net_changes = 1  
GO  

Nota

Se Change Data Capture è abilitato in una tabella con una chiave primaria esistente e non viene usato il parametro @index_name per identificare un indice univoco alternativo, la funzionalità Change Data Capture userà la chiave primaria.If change data capture is enabled on a table with an existing primary key, and the @index_name parameter is not used to identify an alternative unique index, the change data capture feature will use the primary key. Non saranno consentite modifiche successive alla chiave primaria se prima non si disabilita Change Data Capture per la tabella.Subsequent changes to the primary key will not be allowed without first disabling change data capture for the table. Questa regola è sempre valida, indipendentemente dal fatto che durante la configurazione di Change Data Capture sia stato o meno richiesto il supporto per le query sulle modifiche delta.This is true regardless of whether support for net changes queries was requested when change data capture was configured. Se in una tabella non è presente alcuna chiave primaria al momento dell'abilitazione di Change Data Capture, l'aggiunta successiva di una chiave primaria verrà ignorata da Change Data Capture.If there is no primary key on a table at the time it is enabled for change data capture, the subsequent addition of a primary key is ignored by change data capture. Poiché Change Data Capture non utilizzerà una chiave primaria creata in seguito all'abilitazione della tabella, la chiave e le colonne chiave possono essere rimosse senza restrizioni.Because change data capture will not use a primary key that is created after the table was enabled, the key and key columns can be removed without restrictions.

Disabilitazione di Change Data Capture per una tabellaDisable Change Data Capture for a Table

I membri del ruolo predefinito del database db_owner possono rimuovere un'istanza di acquisizione per le singole tabelle di origine usando la stored procedure sys.sp_cdc_disable_table.Members of the db_owner fixed database role can remove a capture instance for individual source tables by using the stored procedure sys.sp_cdc_disable_table. Per determinare se una tabella di origine è attualmente abilitata per Change Data Capture, esaminare la colonna is_tracked_by_cdc nella vista del catalogo sys.tables .To determine whether a source table is currently enabled for change data capture, examine the is_tracked_by_cdc column in the sys.tables catalog view. Se in seguito alla disabilitazione non è presente alcuna tabella abilitata per il database, vengono rimossi anche i processi Change Data Capture.If there are no tables enabled for the database after the disabling takes place, the change data capture jobs are also removed.

Se viene eliminata una tabella abilitata per Change Data Capture, i metadati di Change Data Capture associati alla tabella vengono automaticamente rimossi.If a change data capture-enabled table is dropped, change data capture metadata that is associated with the table is automatically removed.

Per un esempio di disabilitazione di una tabella, vedere il modello Disable a Capture Instance for a Table.See the Disable a Capture Instance for a Table template for an example of disabling a table.

-- =====  
-- Disable a Capture Instance for a Table template   
-- =====  
USE MyDB  
GO  
EXEC sys.sp_cdc_disable_table  
@source_schema = N'dbo',  
@source_name   = N'MyTable',  
@capture_instance = N'dbo_MyTable'  
GO  

Vedere ancheSee Also

Rilevare le modifiche ai dati (SQL Server) Track Data Changes (SQL Server)
Informazioni su Change Data Capture (SQL Server) About Change Data Capture (SQL Server)
Utilizzare i dati delle modifiche (SQL Server) Work with Change Data (SQL Server)
Amministrare e monitorare Change Data Capture (SQL Server) Administer and Monitor Change Data Capture (SQL Server)