Використання Sql Server Change Capture Data Capture за допомогою схеми, що часто змінюється


10

Ми намагаємося ввімкнути захоплення даних про зміни сервера Sql для нової підсистеми, яку ми будуємо.

Це насправді не тому, що нам це потрібно, але нас наполягають на повному відстеженні історії, і CDC добре вирішить цю вимогу з мінімальними зусиллями з нашого боку.

Ми слідуємо за гнучким процесом розробки, який у цьому випадку означає, що ми часто вносимо зміни в схему бази даних, наприклад додавання нових стовпців, переміщення даних до інших стовпців тощо.

Ми зробили невеликий тест, де створили таблицю, включили CDC для цієї таблиці, а потім додали до неї новий стовпець. Зміни до нового стовпця не реєструються в таблиці CDC.

Чи існує механізм оновлення таблиці CDC до нової схеми, і чи є найкращі практики щодо роботи з захопленими даними при переміщенні схеми бази даних?


Ви можете отримати кращу / швидшу відповідь, якщо ви опублікували це питання в dba.stackexchange.com
TimG

2
@TimG Мультипостінг питання перешкоджає, міграція буде можливим варіантом - але він має щедрості і не може бути міграційним, поки щедрий активний. З цього приводу, питання та його щедрість були згадані в чаті dba.SE і привернули певну увагу.

Відповіді:


5

Нещодавно ми також почали дивитися на CDC. Я не фахівець з цього питання, але, думаю, у мене є відповіді на ваші запитання.

Здебільшого CDC допоможе вам досягти своєї цілі цілком простежуваної історії, але я не думаю, що вона все пробуде там.

По-перше:

ми часто вносимо зміни в схему бази даних ... Чи існує механізм оновлення таблиці CDC до нової схеми

І саме тут я думаю, що CDC вас провалить. Документація MSDN у розділі "Розуміння відстеження змін змін" досить зрозуміла, що вона не відстежує зміни схеми для вас. Наприклад, за допомогою Alter Table Add Column:

Якщо до таблиці відстежених змін додано новий стовпець, додавання стовпця не відстежується. Відслідковуються лише оновлення та зміни, внесені до нового стовпця.

Drop Column трохи складніше.

Однак вам слід використовувати сценарії БД для зміни вашої схеми, тому вам не обов’язково покладатися тут на CDC. Це дозволяє узгоджувати схеми забезпечення якості та виробництва. І зміна QA повинна виконуватися за сценарієм, щоб ті самі зміни можна було застосувати до Prod. Витягнути зміни схеми з цих сценаріїв не повинно бути надто важко. Це може означати, що "часовий" вимір вашої історії визначається версією замість фактичного часу, але кінцевий результат буде таким самим.

Якщо у вас його ще немає, створіть таблицю для відстеження версії схеми бази даних. А потім помістіть таблицю версій схеми бази даних під CDC, щоб ви могли вирівняти макроскопічні зміни в схемі проти мікроскопічних змін у певній таблиці.

Наскільки я розумію, ви все ще бачите дані, додані до нового стовпця (-ів) незалежно від того, що CDC не відображає зміни схеми. І міграцію даних із таблиці в таблицю слід також збирати CDC.

Чи є найкращі практики щодо роботи з захопленими даними під час міграції схеми бази даних?

Ставтесь до нього так, як ви ставитесь до аудиту. Вам потрібно зрозуміти, що це за обстеження, чому ви його вивчаєте, і як довго вам потрібно зберігати цю інформацію. Обсяг та утримання - це два найбільших помилки, коли мова йде про таке завдання.

Інструменти звітності CDC зрозуміло суворі, тому ви повинні знати контекст змін. Занадто просто сказати "відстежуй усе !" і в кінцевому підсумку немає нічого корисного в результаті. Так само ви можете подвоїти розмір вашої бази даних, зберігаючи копію кожної зміни. На високому стовпчику з багатьма вставками та видаленнями ви закінчите астрономічне зростання. Це само по собі не погано, але вам потрібно сплатити бюджет на зростання та мати засоби для вивчення всіх даних, що утворюються.

Таким чином, ви повертаєтесь до розуміння того, чому вас підштовхують до повного відстеження. Безумовно, є вагомі причини цієї вимоги. Але ви не зможете структурувати ефективний аудит бази даних, поки не дізнаєтесь, чому ви повинні відповідати цій вимозі.


1

Ви можете відстежувати додавання стовпців за допомогою тригерів DDL.

CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] |
EXTERNAL NAME < method specifier > [ ; ] }

Ви можете використовувати групу подій DDL_TABLE_EVENTS для запуску CREATE, DROP або ALTER таблиці.

Однак ви можете поглянути на аудит SQL Server , якщо ви використовуєте підприємство> 2008, оскільки воно може "поєднувати всі можливості аудиту в специфікацію аудиту". Цей посилання msdn містить детальну статтю про нього: http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx .

CREATE SERVER AUDIT audit_name
TO { [ FILE (<file_options> [, ...n]) ] |
APPLICATION_LOG | SECURITY_LOG }
[ WITH ( <audit_options> [, ...n] ) ] }[ ; ]

<file_options>::=
{FILEPATH = 'os_file_path'
[, MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
[, MAX_ROLLOVER_FILES = integer ]
[, RESERVE_DISK_SPACE = { ON | OFF } ] }

<audit_options>::=
{ [ QUEUE_DELAY = integer ]
[, ON_FAILURE = { CONTINUE | SHUTDOWN } ]
[, AUDIT_GUID = uniqueidentifier ]}

Потім ви створюєте специфікації сервера або бази даних.


0

Simple-Talk має чудову статтю про збирання даних про зміни та дуже посібник щодо CDC, а також документація MSDN пояснює різні методи залежно від вимог. Але вони обоє можуть допомогти вам у ваших конкретних вимогах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.