Skip to content

Commit 07eb3e7

Browse files
authored
merge bootstrap scripts (#954)
## Description - This PR merges the separate CDC enablement bootstrap scripts for NBS_ODSE and NBS_SRTE into a single, unified script to simplify database initialization. - Additionally, it improves the `002-fix-database-ownership.sql` script to more reliably ensure correct database ownership and updates the related documentation in `bootstrap/README.md` and `containers/db/initialize/README.md`.
1 parent 12cea9e commit 07eb3e7

6 files changed

Lines changed: 277 additions & 250 deletions

bootstrap/101-enable_cdc_on_odse_database-001.sql

Lines changed: 0 additions & 84 deletions
This file was deleted.
Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
IF IS_SRVROLEMEMBER('sysadmin') <> 1
2+
BEGIN
3+
THROW 50000,
4+
'This bootstrap script must be run by a SQL Server sysadmin. Please rerun it using an account with sysadmin permissions.',
5+
1;
6+
END
7+
GO
8+
9+
-- ------------------------------------------
10+
-- 1. Enable CDC at Database Level - NBS_ODSE
11+
-- ------------------------------------------
12+
IF (
13+
SELECT is_cdc_enabled FROM sys.databases
14+
WHERE name = 'NBS_ODSE'
15+
) = 0
16+
BEGIN
17+
-- for aws
18+
IF
19+
EXISTS (
20+
SELECT 1 FROM sys.databases
21+
WHERE name = 'rdsadmin'
22+
)
23+
BEGIN
24+
PRINT 'AWS RDS detected. Enabling CDC for NBS_ODSE using rds_cdc_enable_db';
25+
EXEC msdb.dbo.rds_cdc_enable_db 'NBS_ODSE';
26+
END
27+
ELSE
28+
BEGIN
29+
PRINT 'Standard SQL Server detected. Enabling CDC for NBS_ODSE using sp_cdc_enable_db';
30+
EXEC ('USE [NBS_ODSE]; EXEC sys.sp_cdc_enable_db;');
31+
END
32+
END
33+
ELSE
34+
BEGIN
35+
PRINT 'CDC is already enabled for NBS_ODSE';
36+
END
37+
GO
38+
39+
-- ------------------------------------------
40+
-- 2. Enable CDC for Tables - NBS_ODSE
41+
-- ------------------------------------------
42+
USE nbs_odse;
43+
GO
44+
45+
DECLARE @odseTablesToEnable TABLE (tablename NVARCHAR(128));
46+
47+
INSERT INTO @odseTablesToEnable (tablename)
48+
SELECT tablename
49+
FROM (
50+
VALUES
51+
('Act_relationship'),
52+
('Auth_user'),
53+
('CT_contact'),
54+
('Intervention'),
55+
('Interview'),
56+
('NBS_page'),
57+
('NBS_rdb_metadata'),
58+
('NBS_ui_metadata'),
59+
('Notification'),
60+
('Observation'),
61+
('Organization'),
62+
('Page_cond_mapping'),
63+
('Person'),
64+
('Place'),
65+
('Public_health_case'),
66+
('state_defined_field_data'),
67+
('State_Defined_Field_Metadata'),
68+
('Treatment'),
69+
('NBS_configuration'),
70+
('LOOKUP_QUESTION')
71+
) AS newrows (tablename)
72+
EXCEPT
73+
SELECT name
74+
FROM sys.tables
75+
WHERE is_tracked_by_cdc = 1;
76+
77+
DECLARE @odseTableName NVARCHAR(128);
78+
DECLARE odseCur CURSOR FOR SELECT tablename FROM @odseTablesToEnable;
79+
80+
OPEN odseCur;
81+
FETCH NEXT FROM odseCur INTO @odseTableName;
82+
83+
WHILE @@FETCH_STATUS = 0
84+
BEGIN
85+
PRINT 'Enabling CDC for table: ' + @odseTableName;
86+
BEGIN TRY
87+
EXEC sys.sp_cdc_enable_table
88+
@source_schema = N'dbo',
89+
@source_name = @odseTableName,
90+
@role_name = NULL;
91+
END TRY
92+
BEGIN CATCH
93+
PRINT 'ERROR: Could not enable CDC for table '
94+
+ @odseTableName
95+
+ '. Error: '
96+
+ ERROR_MESSAGE();
97+
END CATCH
98+
99+
FETCH NEXT FROM odseCur INTO @odseTableName;
100+
END
101+
102+
CLOSE odseCur;
103+
DEALLOCATE odseCur;
104+
GO
105+
106+
-- ------------------------------------------
107+
-- 3. Enable CDC at Database Level - NBS_SRTE
108+
-- ------------------------------------------
109+
IF (
110+
SELECT is_cdc_enabled FROM sys.databases
111+
WHERE name = 'NBS_SRTE'
112+
) = 0
113+
BEGIN
114+
-- for aws
115+
IF
116+
EXISTS (
117+
SELECT 1 FROM sys.databases
118+
WHERE name = 'rdsadmin'
119+
)
120+
BEGIN
121+
PRINT 'AWS RDS detected. Enabling CDC for NBS_SRTE using rds_cdc_enable_db';
122+
EXEC msdb.dbo.rds_cdc_enable_db 'NBS_SRTE';
123+
END
124+
ELSE
125+
BEGIN
126+
PRINT 'Standard SQL Server detected. Enabling CDC for NBS_SRTE using sp_cdc_enable_db';
127+
EXEC ('USE [NBS_SRTE]; EXEC sys.sp_cdc_enable_db;');
128+
END
129+
END
130+
ELSE
131+
BEGIN
132+
PRINT 'CDC is already enabled for NBS_SRTE';
133+
END
134+
GO
135+
136+
-- ------------------------------------------
137+
-- 4. Enable CDC for Tables - NBS_SRTE
138+
-- ------------------------------------------
139+
USE nbs_srte;
140+
GO
141+
142+
DECLARE @srteTablesToEnable TABLE (tablename NVARCHAR(128));
143+
144+
INSERT INTO @srteTablesToEnable (tablename)
145+
SELECT tablename
146+
FROM (
147+
VALUES
148+
('Anatomic_site_code'),
149+
('City_code_value'),
150+
('Cntycity_code_value'),
151+
('Code_value_clinical'),
152+
('Code_value_general'),
153+
('Codeset'),
154+
('Codeset_Group_Metadata'),
155+
('Condition_code'),
156+
('Country_code'),
157+
('Country_Code_ISO'),
158+
('Country_XREF'),
159+
('ELR_XREF'),
160+
('IMRDBMapping'),
161+
('Investigation_code'),
162+
('Jurisdiction_code'),
163+
('Jurisdiction_participation'),
164+
('Lab_coding_system'),
165+
('Lab_result'),
166+
('Lab_result_Snomed'),
167+
('Lab_test'),
168+
('Labtest_loinc'),
169+
('Labtest_Progarea_Mapping'),
170+
('Language_code'),
171+
('LDF_page_set'),
172+
('LOINC_code'),
173+
('Loinc_condition'),
174+
('Loinc_snomed_condition'),
175+
('NAICS_Industry_code'),
176+
('Occupation_code'),
177+
('Participation_type'),
178+
('Program_area_code'),
179+
('Race_code'),
180+
('Snomed_code'),
181+
('Specimen_source_code'),
182+
('Standard_XREF'),
183+
('State_code'),
184+
('State_county_code_value'),
185+
('State_model'),
186+
('TotalIDM'),
187+
('Treatment_code'),
188+
('Unit_code'),
189+
('Zip_code_value'),
190+
('Zipcnty_code_value')
191+
) AS newrows (tablename)
192+
EXCEPT
193+
SELECT name
194+
FROM sys.tables
195+
WHERE is_tracked_by_cdc = 1;
196+
197+
DECLARE @srteTableName NVARCHAR(128);
198+
DECLARE srteCur CURSOR FOR SELECT tablename FROM @srteTablesToEnable;
199+
200+
OPEN srteCur;
201+
FETCH NEXT FROM srteCur INTO @srteTableName;
202+
203+
WHILE @@FETCH_STATUS = 0
204+
BEGIN
205+
PRINT 'Enabling CDC for table: ' + @srteTableName;
206+
BEGIN TRY
207+
EXEC sys.sp_cdc_enable_table
208+
@source_schema = N'dbo',
209+
@source_name = @srteTableName,
210+
@role_name = NULL;
211+
END TRY
212+
BEGIN CATCH
213+
PRINT 'ERROR: Could not enable CDC for table '
214+
+ @srteTableName
215+
+ '. Error: '
216+
+ ERROR_MESSAGE();
217+
END CATCH
218+
219+
FETCH NEXT FROM srteCur INTO @srteTableName;
220+
END
221+
222+
CLOSE srteCur;
223+
DEALLOCATE srteCur;
224+
GO

0 commit comments

Comments
 (0)