在向高斯数据库迁移数据的过程中,需要开启源库及被迁移表的CDC,具体如下:
一、开启源库的CDC
开启源库的CDC命令:
exec sys.sp_cdc_enable_db
二、开启被迁移表的CDC
1、开启单个表的CDC命令
sys.sp_cdc_enable_table
@source_schema='dbo',
@source_name='test1',
@capture_instance='test2',
@supports_net_changes=0,@role_name=null
上述命令代表开启数据库test2中表test1的cdc。
2、开启同一个库中某几个表的CDC命令
USE test;
EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', @source_name = N'test1',
@role_name = null;
USE test
EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', @source_name = N'test2',
@role_name = null;
上述命令代表开启库test中表test1和test2的cdc。
3、批量开启指定库中所有表的CDC命令
BEGIN TRY
DECLARE @source_name varchar(400);
declare @sql varchar(1000)
declare @dbname varchar(100), @enable bit
set @dbname='test';
set @enable = 1
DECLARE the_cursor CURSOR FAST_FORWARD FOR
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES where TABLE_CATALOG=@dbname and table_schema='dbo' and table_name != 'systranschemas'
OPEN the_cursor
FETCH NEXT FROM the_cursor INTO @source_name
WHILE @@FETCH_STATUS = 0
BEGIN
if @enable = 1
set @sql =' Use '+ @dbname+ ';EXEC sys.sp_cdc_enable_table
@source_schema = N''dbo'',@source_name = '+@source_name+'
, @role_name = N'''+'dbo'+''''
else
set @sql =' Use '+ @dbname+ ';EXEC sys.sp_cdc_disable_table
@source_schema = N''dbo'',@source_name = '+@source_name+', @capture_instance =''all'''
exec(@sql)
FETCH NEXT FROM the_cursor INTO @source_name
END
CLOSE the_cursor
DEALLOCATE the_cursor
SELECT 'Successful'
END TRY
BEGIN CATCH
CLOSE the_cursor
DEALLOCATE the_cursor
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH
上述命令代表批量开启库test中所有表的cdc。
三、注意事项
在开启表的CDC前必须先开启库的CDC,查看某一库的CDC是否开启,用如下命令:
select is_cdc_enabled from sys.databases
WHERE NAME='test'
上述命令表示查看库test的CDC是否开启,如果结果是1表示开启,0表示未开启。




