Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья поможет устранить проблему, из-за которой вы заметили непрерывный рост журнала транзакций для базы данных с поддержкой CDC.
Исходная версия продукта: SQL Server 2012 и более поздние версии
Исходный номер базы знаний: 2871474
Симптомы
Рассмотрим следующий сценарий:
- Вы используете SQL Server 2017, SQL Server 2016, SQL Server 2014 или SQL Server 2012 в Windows.
- Вы используете Change Data Capture (CDC) для Oracle от Attunity.
- Экземпляр CDC создается для записи изменений из таблиц базы данных Oracle.
- Значения отслеживания изменений хранятся в базах данных отслеживания изменений SQL Server.
- Журнал транзакций в базе данных SQL Server растет, и транзакции не помечены для усечения по мере записи изменений данных.
В этом сценарии рост файла журнала транзакций базы данных SQL Server накапливается и потребляет слишком много места на диске с течением времени.
Причина
При настройке отслеживания измененных данных для экземпляров Oracle база данных SQL, получающая измененные данные, будет иметь зеркальные таблицы с транзакциями, помеченными для репликации. Это происходит из-за того, что CDC для Oracle использует базовые системные хранимые процедуры, аналогичные используемым в CDC для SQL Server. Тем не менее, поскольку репликация SQL CDC не используется только при использовании CDC для Oracle, не существует средства чтения журналов для очистки транзакций, помеченных для репликации. Так как транзакция не должна быть реплицирована в SQL Server, она безопасно вручную пометить транзакцию как распределенную с помощью обходного решения, описанного далее в этой статье.
Чтобы проверить эту точную причину DBCC OPENTRAN , выполните команду при подключении к базе данных CDC SQL Server. Вы увидите нераспределевое номер LSN, как показано в следующем примере:
Replicated Transaction Information:
Oldest distributed LSN : (0:0:0)
Oldest non-distributed LSN : (38:272:1)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
У вас может быть не распределенное LSN, так как CDC для Oracle использует CDC для хранимых процедур SQL, и, в свою очередь, использует средство чтения журналов репликации. Этот нераспределенный LSN соответствует записям журнала для добавления зеркальной таблицы в базу данных CDC Attunity.
При выполнении этого запроса log_reuse_wait_desc параметр возвращает значение REPLICATION, указывающее причину.
SELECT log_reuse_wait_desc FROM sys.databases WHERE name = '<your_cdc_database>'
Решение
Выполните следующую команду в окне запроса, подключенном к базе данных с поддержкой CDC в SQL Server:
EXEC sp_repltransВыходные данные должны выглядеть примерно так:
xdesid xact_seqno xact_seqno 0x000000260000012C0001 0x0000002A000001B50001Скопируйте номера последовательности транзакций LSN для следующей команды.
Используя цифры из шага 1, выполните
sp_repldoneследующую команду, чтобы сообщить, что пары BeginTran и CommitTran LSN уже реплицируются:sp_repldone @xactid = 0x000000260000012C0001, @xact_segno = 0x0000002A000001B50001Выполните следующую команду, чтобы убедиться, что транзакция помечена как реплицированная в базе данных CDC:
DBCC OPENTRANВозвращает выходные данные, похожие на следующие данные:
No active open transactions. DBCC execution completed. If DBCC printed error messages, contact your system administrator.Чтобы убедиться, что журнал транзакций можно повторно использовать, убедитесь, что в базе данных нет другой причины повторного использования:
SELECT log_reuse_wait_desc, NAME FROM sys.databases WHERE NAME = '<your_cdc_database>'Возвращает выходные данные, похожие на следующие данные:
log_reuse_wait_desc name NOTHING <your_cdc_database>Теперь вы сможете усечь журнал транзакций с помощью резервных копий журналов. Кроме того, вы сможете сократить файл журнала транзакций, чтобы уменьшить дисковое пространство, которое использовалось. Например, выполните следующую команду:
BACKUP LOG <your_cdc_database> TO DISK='c:\folder\logbackup.trn' DBCC SHRINKFILE (yourcdcdatabase_log, 1024)
Дополнительные сведения см. в разделе "Управление размером файла журнала транзакций".
Дополнительная информация
Дополнительные сведения см. в статье об устранении ошибок экземпляра CDC в записи измененных данных Майкрософт для Oracle по Attunity.
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.