Поделиться через


Базы данных CDC Oracle

Внимание

Запись измененных данных для Oracle по Attunity устарела. Дополнительные сведения см. в объявлении.

Экземпляр Oracle CDC связан с базой данных SQL Server с тем же именем в целевом экземпляре SQL Server. Эта база данных называется базой данных Oracle (или базой данных CDC).

База данных CDC создается и настраивается с помощью консоли конструктора CDC Oracle, она содержит следующие элементы.

  • Схема cdc , созданная путем включения CDC SQL Server в базе данных.

  • Набор таблиц cdc.xdbcdc_xxxx , используемых экземпляром CDC Oracle.

  • Набор пустых зеркальных таблиц с определениями отслеживаемых таблиц в исходной базе данных Oracle.

  • Набор таблиц изменений и функций доступа к изменениям, создаваемых механизмом CDC SQL Server и идентичных используемым в обычном CDC SQL Server.

Первоначально к схеме cdc имеют доступ только члены предопределенной роли базы данных dbowner . Доступ к таблицам изменений и функциям изменений определяется той же моделью безопасности, что и в CDC SQL Server. Дополнительные сведения о модели безопасности см. в разделе Модель безопасности.

Создание базы данных CDC

В большинстве случаев создание базы данных CDC производится в консоли конструктора CDC, но ее также можно создать с помощью скрипта развертывания CDC, подготовленного в консоли конструктора CDC. Системный администратор SQL Server может изменить параметры базы данных при необходимости (для таких элементов, как хранилище, безопасность или доступность).

Дополнительные сведения об использовании консоли конструктора CDC для создания таблиц базы данных и необходимых скриптах см. в разделе Использование мастера создания экземпляра.

Роли пользователей базы данных CDC

Когда база данных CDC создается и включена для CDC, пользователь базы данных с именем cdc_service создается в базе данных CDC и связан с именем входа SQL Server, с которым была настроена служба Oracle CDC. Этот пользователь становится членом ролей базы данных db_datareader, db_datawriterи db_ddladmin . Если имя входа SQL Server также связано с dbo пользователем, cdc_service не создается.

Такое назначение ролей позволяет службе CDC Oracle обновлять таблицы, построенные по схеме cdc с данными отслеживания и управления.

При создании базы данных CDC и настройке исходных таблиц CDC в Oracle владелец базы данных CDC может предоставить разрешение SELECT для зеркальных таблиц и определить шлюзовые роли CDC SQL Server, что позволяет управлять доступом к информации об изменениях.

Зеркальные таблицы

Для каждой сканируемой таблицы <имя_схемы>.<имя_таблицы> в базе данных-источнике Oracle создается аналогичная пустая таблица в базе данных CDC, имеющая ту же схему и имя таблицы. Исходные таблицы Oracle с именем cdc схемы (не учитывает регистр), не могут быть записаны, так как cdc схема в SQL Server зарезервирована для CDC SQL Server.

Зеркальные таблицы пусты, в них нет никаких данных. Они служат для поддержки стандартной инфраструктуры CDC SQL Server, которая используется экземпляром CDC Oracle. Чтобы данные не вставлялись в зеркальные таблицы и не обновлялись в них, все операции UPDATE, DELETE и INSERT запрещены для PUBLIC. Это гарантирует, что они не будут изменены.

Доступ к информации об изменениях

Из-за модели безопасности SQL Server, используемой для получения доступа к измененным данным, связанным с экземпляром записи, пользователю необходимо предоставить select доступ ко всем захваченным столбцам связанной таблицы зеркало (разрешения доступа к исходным таблицам Oracle не предоставляют доступ к таблицам изменений в SQL Server). Сведения о модели безопасности SQL Server см. в разделе "Модель безопасности".

Кроме того, если при создании экземпляра отслеживания задана шлюзовая роль, вызывающий также должен быть членом указанной шлюзовой роли. Другие общие функции системы отслеживания измененных данных для доступа к метаданным доступны пользователям через роль PUBLIC, хотя доступ к возвращенным метаданным обычно регулируется доступом с правом выборки к базовым исходным таблицам, а также членством во всех определенных шлюзовых ролях.

Информацию об изменениях можно считать путем вызова специальных табличных функций, формируемых компонентом CDC SQL Server при создании экземпляра отслеживания. Дополнительные сведения об этой функции см. в разделе Функции отслеживания измененных данных (Transact-SQL).

Доступ к данным CDC через компонент источника CDC служб Integration Services распространяется на те же правила.

Таблицы базы данных CDC

В этом разделе описываются следующие таблицы из базы данных CDC.

Таблицы изменений (_CT)

Таблицы изменений создаются на основе зеркальных таблиц. Они содержат информацию об изменениях, которые отслеживаются в базе данных Oracle. Имена этих таблиц формируются в соответствии со следующим соглашением:

[cdc].[<экземпляр_сканирования>_CT]

При включении отслеживания для таблицы <schema-name>.<table-name>экземпляр отслеживания по умолчанию получит имя <schema-name>_<table-name>. Например, имя экземпляра отслеживания по умолчанию для таблицы Oracle HR.EMPLOYEES будет HR_EMPLOYEES, а имя связанной таблицы изменений ― [cdc]. [HR_EMPLOYEES_CT].

Запись в таблицы изменений выполняется экземпляром CDC Oracle. Они считываются с помощью специальных табличных функций, создаваемых SQL Server при создании экземпляра записи. Например, fn_cdc_get_all_changes_HR_EMPLOYEES. Дополнительные сведения об этих функциях CDC см. в разделе Функции отслеживания измененных данных (Transact-SQL).

cdc.lsn_time_mapping

Таблица [cdc].[lsn_time_mapping] создается компонентом CDC SQL Server. Ее использование при работе с CDC Oracle отличается от обычного.

Значения LSN для CDC Oracle, хранящиеся в этой таблице, основаны на значении номера SCN Oracle, связанном с изменением. Первые 6 байтов значения LSN — это исходный номер Oracle SCN.

Кроме того, при использовании CDC Oracle столбцы времени (tran_begin_time и tran_end_time) хранят время UTC изменения, а не локальное время, которое используется при выполнении CDC SQL Server. Это гарантирует, что переход на летнее время не оказывает влияния на данные, хранящиеся в lsn_time_mapping.

cdc.xdbcdc_config

Эта таблица содержит данные конфигурации для экземпляра CDC Oracle. Она обновляется с помощью консоли конструктора CDC. Эта таблица содержит только одну строку.

В следующей таблице приводится описание столбцов таблицы cdc.xdbcdc_config .

Позиция Description
версия Отслеживает версию конфигурации экземпляра CDC. Обновляется при каждом обновлении таблицы, а также при добавлении нового экземпляра или удалении существующего экземпляра отслеживания.
connect_string Строки подключения Oracle. Простой пример:

<server>:<port>/<instance> (например, erp.contoso.com:1521/orcl).

В строке подключения также может указываться дескриптор подключения Oracle Net, например (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl)))

Если используется сервер каталогов или файл tnsname, то строкой подключения может быть имя соединения.

Дополнительные сведения о строках подключения Oracle см. в статье https://go.microsoft.com/fwlink/?LinkId=231153, которая содержит подробную информацию о строках подключения к базам данных Oracle для клиента Oracle Instant Client, используемого службой CDC Oracle Service.
use_windows_authentication Логическое значение, которое может быть.

0: имя пользователя и пароль Oracle указываются для проверки подлинности (по умолчанию)

1: проверка подлинности Windows используется для соединения с базой данных Oracle. Этот параметр можно использовать только в том случае, если в базе данных Oracle настроено использование проверки подлинности Windows.
username Имя пользователя базы данных Oracle, выполняющего интеллектуальный анализ журнала. Обязателен только в том случае, если use_windows_authentication = 0.
password Пароль пользователя базы данных Oracle, выполняющего интеллектуальный анализ журнала. Обязателен только в том случае, если use_windows_authentication = 0.
transaction_staging_timeout Время (в секундах), в течение которого незафиксированная транзакция Oracle сохраняется в памяти перед записью в таблицу cdc.xdbcdc_staged_transactions . Значение по умолчанию — 120 секунд.
memory_limit Максимальный объем памяти (МБ), который может использоваться для кэширования данных в памяти. Если указать небольшое значение, то в таблицу cdc.xdbcdc_staged_transactions можно записать большее число транзакций. Значение по умолчанию — 50 МБ.
options Список параметров в формате имя[=значение][; ]. Служит для указания вторичных параметров (например, tracing, tuning). В следующей таблице приведено описание доступных параметров.

В следующей таблице описаны доступные параметры.

Имя. По умолчанию. Min Max Статические Description
трассировка False - - False Возможные значения:

Истина

False

on

off
cdc_update_state_interval 10 1 120 False Размер (в килобайтах) фрагментов памяти, выделяемых для транзакции (транзакции может быть выделено несколько фрагментов). См. столбец memory_limit в таблице cdc.xdbcdc_config .
target_max_batched_transactions 100 1 1000 Истина Максимальное количество транзакций Oracle, которые могут быть обработаны в виде одной транзакции в рамках обновления таблиц SQL Server CT.
target_idle_lsn_update_interval 10 0 1 False Интервал (в секундах) обновления таблицы lsn_time_mapping , когда отслеживаемые таблицы неактивны.
trace_retention_period 24 1 24*31 False Время (в часах), в течение которого сообщения хранятся в таблице трассировки).
sql_reconnect_interval 2 2 3600 False Время ожидания (в секундах) перед повторным подключением к SQL Server. Этот интервал используется в дополнение к времени ожидания подключения клиента SQL Server.
sql_reconnect_limit -1 -1 -1 False Максимальное количество повторного подключения SQL Server. По умолчанию значение -1 означает, что процесс пытается установить повторное соединение до тех пор, пока он не будет остановлен.
cdc_restart_limit 6 -1 3600 False В большинстве случаев служба CDC автоматически перезапускает экземпляр CDC, работа которого завершилась аварийно. Это свойство определяет, через какое количество сбоев в час служба перестанет перезапускать экземпляр. Значение -1 означает, что экземпляр следует перезапускать всегда.

Служба снова начинает перезапускать экземпляр после любого обновления таблицы конфигурации.
cdc_memory_report 0 0 1000 False Если значение параметра было изменено, то экземпляр CDC печатает его отчет о памяти в таблицу трассировки.
target_command_timeout 600 1 3600 False Время ожидания команды, работающее с SQL Server.
source_character_set - - - Истина Можно задать конкретную кодировку Oracle, которая должна будет использоваться вместо кодовой страницы базы данных Oracle. Это может оказаться полезным в том случае, когда фактическая кодировка символьных данных отличается от кодовой страницы базы данных Oracle.
source_error_retry_interval 30 1 3600 False Используется перед повторной попыткой при нескольких ошибках, например при возникновении ошибки соединения или при временном отсутствии синхронизации между системными таблицами.
source_prefetch_size 100 1 10000 Истина Размер пакета упреждающей выборки.
source_max_tables_in_query 100 1 10000 Истина Максимальное число таблиц в предложении WHERE перед переключением на чтение журнала Oracle без фильтрации таблиц.
source_read_retry_interval 2 1 3600 False Время, в течение которого источник ожидает перед следующей попыткой чтения журналов транзакций Oracle при обнаружении EOF.
source_reconnect_interval 30 1 3600 False Время ожидания (в секундах) перед попыткой установить повторное соединение с базой данных-источником.
source_reconnect_limit -1 -1 False Максимальное число попыток повторного соединения с базой данных-источником. Значение по умолчанию -1 означает, что процесс пытается установить соединение подключения до тех пор, пока он не будет остановлен.
source_command_timeout 30 1 3600 False Время ожидания соединения при работе с Oracle.
source_connection_timeout 30 1 3600 False Подключение время ожидания ожидания, работающее с SQL Server.
trace_data_errors Истина - - False Логическое значение. ЗначениеTrue указывает, что в журнале будут регистрироваться ошибки преобразования данных и усечения.
CDC_stop_on_breaking_schema_changes False - - False Логическое значение. ЗначениеTrue указывает, что при обнаружении изменения, нарушающего схему, будет произведен останов.

ЗначениеFalse указывает, что необходимо удалить зеркальную таблицу и экземпляр отслеживания.
source_oracle_home - - False Может быть задан определенный путь Oracle Home или имя Oracle Home Name, которое экземпляр CDC будет использовать для соединения с Oracle.

cdc.xdbcdc_state

Эта таблица содержит сведения о сохраненном состоянии экземпляра CDC Oracle. Состояние отслеживания используется при восстановлении и отработке отказа для мониторинга исправности.

В следующей таблице описаны столбцы таблицы cdc.xdbcdc_state .

Позиция Description
статус Код текущего состояния экземпляра CDC Oracle. Этот столбец описывает текущее состояние для CDC.
sub_status Состояние второго уровня, которое представляет дополнительные сведения о текущем состоянии.
active Логическое значение, которое может быть.

0: процесс экземпляра CDC Oracle неактивен.

1: процесс экземпляра CDC Oracle активен.
error Логическое значение, которое может быть.

0: процесс экземпляра CDC Oracle находится не в состоянии ошибки.

1: процесс экземпляра CDC Oracle находится в состоянии ошибки.
status_message Строка, содержащая описание ошибки или состояния.
TIMESTAMP Отметка времени в формате (UTC), когда состояние отслеживания обновлялось в последний раз.
active_capture_node Имя компьютера (это может быть узел кластера), на котором в данный момент работает служба CDC Oracle и экземпляр CDC Oracle (обрабатывающий журналы транзакций Oracle).
last_transaction_timestamp Отметка времени в формате (UTC), когда в таблицы изменений была записана последняя транзакция.
last_change_timestamp Отметка времени в формате (UTC), когда последняя запись об изменении была считана из исходного журнала транзакций Oracle. Эта отметка времени помогает определить текущую задержку процесса CDC.
transaction_log_head_cn Номер последнего изменения (CN), который был считан в журнале транзакций Oracle.
transaction_log_tail_cn Номер изменения (CN) в журнале транзакций, куда помещается экземпляр CDC Oracle в случае перезапуска или восстановления.
current_cn Номер последнего изменения (CN), которое было внесено в базу данных-источник.
software_version Внутренняя версия службы CDC Oracle Service.
completed_transactions Число транзакций, обработанных с момента последнего сброса CDC.
written_changes Количество записей изменений, записанных в таблицы изменений SQL Server.
read_changes Количество записей об изменениях, считанных в исходном журнале транзакций Oracle.
staged_transactions Число активных в данный момент транзакций, которые занесены в таблицу cdc.xdbcdc_staged_transactions .

cdc.xdbcdc_trace

Эта таблица содержит сведения об операции экземпляра CDC. Сведения, хранящиеся в этой таблице, включают в себя записи об ошибках, важные изменения состояния и записи трассировки. Сведения об ошибках также записываются в журнал событий Windows для обеспечения доступа к ним в том случае, если таблица cdc.xcbcdc_trace будет недоступна.

В следующей таблице приводится описание столбцов таблицы cdc.xdbcdc_trace.

Позиция Description
TIMESTAMP Точная отметка времени в формате UTC, когда была создана запись трассировки.
type Содержит одно из следующих значений:

ОШИБКА

INFO

ТРАССИРОВКА
node Имя узла, на котором была создана запись.
статус Код состояния, который используется в таблице состояний.
sub_status Код подсостояния, который используется в таблице состояний.
status_message Сообщение состояния, которое используется в таблице состояний.
. Дополнительные данные в тех случаях, когда запись ошибки или трассировки содержит полезную информацию (например, запись о поврежденном журнале).

cdc.xdbcdc_staged_transactions

В этой таблице хранятся записи об изменениях для больших и длительных транзакциях до того момента, как будет обнаружено событие фиксации или отката транзакции. Служба CDC Oracle упорядочивает отслеживаемые записи журналов по времени фиксации транзакции, а затем в хронологическом порядке для каждой транзакции. Записи журнала для одной транзакции хранятся в памяти до завершения транзакции, а затем записываются в целевую таблицу изменений или удаляются (в случае отката). Поскольку объем памяти ограничен, большие транзакции записываются в таблицу cdc.xdbcdc_staged_transactions , где и хранятся до их завершения. Транзакции также записываются в промежуточную таблицу, когда они выполняются в течение длительного времени. Поэтому при перезапуске экземпляра CDC Oracle не придется повторно считывать старые изменения из журналов транзакций Oracle.

В следующей таблице приводится описание столбцов таблицы cdc.xdbcdc_staged_transactions .

Позиция Description
transaction_id Уникальный идентификатор транзакции, которая заносится в промежуточную таблицу.
seq_num Номер строки xcbcdc_staged_transactions для текущей транзакции (начиная с 0).
data_start_cn Номер изменения (CN) для первого изменения данных в этой строке.
data_end_cn Номер изменения (CN) для последнего изменения данных в этой строке.
. Изменения для транзакций в виде большого двоичного объекта, занесенные в промежуточную таблицу.

См. также

Конструктор системы отслеживания измененных данных для Oracle компании Attunity