์ด ํ์ด์ง์์๋ SQL Server์ฉ Cloud SQL์์ ๋ณ๊ฒฝ ๋ฐ์ดํฐ ์บก์ฒ(CDC)๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
CDC๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ฉด ๋ค์ํ ์ ํ์ ๋ณ๊ฒฝ์ฌํญ์ ์บก์ฒํ ์ ์์ต๋๋ค. CDC ์ฌ์ฉ ์ค์ ๋ฐ ์ฌ์ฉ ์ค์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ Microsoft ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ฉด sqlserver ์ฌ์ฉ์๊ฐ ๋ค์ํ CDC ์์
์ ์ํํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ๋ ์ฐธ์กฐํ์ธ์.
์์ํ๊ธฐ ์ ์
์ธ์คํด์ค์ CDC๋ฅผ ๊ตฌํํ๊ธฐ ์ ์ ์ด ํ์ด์ง์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฒํ ํฉ๋๋ค.
๊ธฐ๋ฅ ์ ๊ณต ์ฌ๋ถ ํ์ธ
CDC๋ ๋ค์ SQL Server์ฉ Cloud SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- SQL Server 2022 Standard
- SQL Server 2022 Enterprise
- SQL Server 2019 Standard
- SQL Server 2019 Enterprise
- SQL Server 2017 Standard
- SQL Server 2017 Enterprise
CDC ์ฌ์ฉ ์ค์ ๋ฐ CDC ์บก์ฒ ์์ ์์
๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ sqlserver ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋ ์ ์ฐจ๊ฐ ์์ต๋๋ค.
msdb.dbo.gcloudsql_cdc_enable_dbmsdb.dbo.gcloudsql_cdc_disable_db
CDC ์ฌ์ฉ ์ค์
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ํ์ํ ์ ์ฅ ์ ์ฐจ๋ฅผ ์คํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ ์ ๋ฌํ์ธ์. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'
CDC ์ฌ์ฉ ์ค์ง
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉ ์ค์งํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'
CDC ์บก์ฒ ์์ ์์
CDC๊ฐ ์ฌ์ฉ ์ค์ ๋๋ฉด ์บก์ฒ ๋ฐ ์ ๋ฆฌ๋ฅผ ์ํ ์์
์ด ์์ฑ๋ฉ๋๋ค. SQL Server Management Studio(SSMS)์์๋ sqlserver ์ฌ์ฉ์์๊ฒ ์์
์ด ํ์๋์ง ์์ต๋๋ค.
ํ์ง๋ง ๋ด์ฅ ์ ์ฅ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์์
์ ์์ ํ ์ ์์ต๋๋ค. ๋ํ ๋ค์ ์ ์ฅ ์ ์ฐจ๋ฅผ ํตํด ์์
์ ๋ณผ ์ ์์ต๋๋ค.
์ ๋ฆฌ ์์ ์ ์์ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
EXEC sys.sp_cdc_start_job @job_type = N'cleanup'
์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
EXEC sys.sp_cdc_change_job @job_type = N'capture',
@maxtrans = 20,
@pollinginterval = NULL,
@maxscans = NULL,
@continuous = NULL
์์ ์์ ๋ฐ ๋ณ๊ฒฝ์ ๋ํ ์์ธ ์ค๋ช ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
sys.sp_cdc_add_job๋ ์ฐธ์กฐํ์ธ์.
ํ ์ด๋ธ์์ CDC ์ฌ์ฉ ์ค์
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ CDC๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ฉด dbo(๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์) ์ก์ธ์ค ๊ถํ์ด ์๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋ํ ์ถ์ ์ ์ค์ ํ ์ ์์ต๋๋ค.
ํ์ค CDC ๋ช ๋ น์ด ๋ฐ ์ต์ ์ ๋ํ ์์ธ ์ค๋ช ์ ๋ณ๊ฒฝ ๋ฐ์ดํฐ ์บก์ฒ ์ฌ์ฉ ์ค์ ๋ฐ ์ฌ์ฉ ์ค์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ ์ด๋ธ์์ ๋ณ๊ฒฝ์ฌํญ ์ถ์
ํ
์ด๋ธ์ ์ถ์ ํ๋ ค๋ฉด sys.sp_cdc_enable_table ์ ์ฅ ์ ์ฐจ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'customer',
@role_name = N'CDC'
ํ ์ด๋ธ์์ CDC๊ฐ ์ฌ์ฉ ์ค์ ๋์๋์ง ํ์ธ
ํ
์ด๋ธ์ CDC๊ฐ ์ฌ์ฉ ์ค์ ๋์ด ์๋์ง ํ์ธํ๋ ค๋ฉด sys.sp_cdc_help_change_data_capture ์ ์ฅ ์ ์ฐจ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
EXECUTE sys.sp_cdc_help_change_data_capture
@source_schema = N'dbo',
@source_name = N'customer'
CDC ๋ณ๊ฒฝ ํ ์ด๋ธ์ ํตํ ์ฟผ๋ฆฌ ๋ณ๊ฒฝ์ฌํญ
ํ
์ด๋ธ์ CDC ๋ณ๊ฒฝ์ฌํญ์ ๋ณด๋ ค๋ฉด ํ
์ด๋ธ์์ CDC๋ฅผ ์ฌ์ฉ ์ค์ ํ ๋ ์๋์ผ๋ก ์์ฑ๋๋ ํ
์ด๋ธ์ SELECT ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ธ์.
ํ ์ด๋ธ ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<schema>_<table_name>_CT
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
SELECT * FROM cdc.dbo_customer_CT
์บก์ฒ ์ธ์คํด์ค๊ฐ ์ง์ ๋ ํ ์ด๋ธ์์ CDC ์ฌ์ฉ ์ค์
'์บก์ฒ ์ธ์คํด์ค'๋ก ํ
์ด๋ธ์ ์ถ์ ํ๋ ค๋ฉด sys.sp_cdc_enable_table ์ ์ฅ ์ ์ฐจ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'customer',
@role_name = N'CDC',
@capture_instance = N'customer_cdc',
@supports_net_changes = 1
์บก์ฒ ์ธ์คํด์ค ๋ด์ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ ์ฟผ๋ฆฌ
'์ธ์คํด์ค ์บก์ฒ' ๋ด์ ํ
์ด๋ธ์์ ์ํ๋ CDC ๋ณ๊ฒฝ์ฌํญ์ ๋ณด๋ ค๋ฉด cdc.fn_cdc_get_all_changes_<capture_instance> ์ ์ฅ ์ ์ฐจ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๋น์ทํ SQL ๋ฌธ์ ์ง์ ํ ์ ์์ต๋๋ค.
DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn = sys.fn_cdc_get_min_lsn(N'customer_cdc')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_customer_cdc(@from_lsn, @to_lsn, N'all');
ํ ์ด๋ธ์์ CDC ์ฌ์ฉ ์ค์ง
ํ
์ด๋ธ์ CDC ์ถ์ ์ ์ค์งํ๋ ค๋ฉด sys.sp_cdc_disable_table ์ ์ฅ ํ๋ก์์ ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์บก์ฒ ์ธ์คํด์ค๋ฅผ ์ง์ ํ์ฌ ์ค์งํฉ๋๋ค. ๋๋ 'all'๋ก ์บก์ฒ ์ธ์คํด์ค๋ฅผ ์ง์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ์ฌ ํ ์ด๋ธ์ CDC๋ฅผ ์ค์งํ ์ ์์ต๋๋ค.
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'customer',
@capture_instance = N'all'
CDC๊ฐ ์ฌ์ฉ ์ค์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ CDC๊ฐ ์ฌ์ฉ ์ค์ ๋์ด ์๋๋ฐ ์ด๋ฅผ ์ญ์ ํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ CDC๋ฅผ ์ค์งํ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์งํ๊ณ ์ญ์ ํ๋ฉด ๋ฉ๋๋ค.
EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME' DROP DATABASE 'DATABASE_NAME'
์ฐ๊ฒฐ์ด ์ด๋ ค ์์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ์ ํ์ธํฉ๋๋ค.
select db_name(dbid),* from sys.sysprocesses where db_name(dbid)= 'DATABASE_NAME'
์ด๋ ค ์๋ ๋ชจ๋ ์ฐ๊ฒฐ์ ๋ซ์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ CDC๋ฅผ ์ฌ์ฉ ์ค์งํ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
CDC๊ฐ ์ฌ์ฉ ์ค์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ธ์ค๊ธฐ
CDC ์ฌ์ฉ ์ค์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ ธ์ฌ ๋ SQL ์๋ฒ์ฉ Cloud SQL์ KEEP_CDC ํ๋๊ทธ๋ฅผ ์ฌ์ฉ ์ค์ ๋ ์ํ๋ก ์ ์งํ๋ฉฐ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์บก์ฒ ๋ฐ ์ญ์ ์์ ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.