Журнал транзакций SQL растет при использовании отслеживания измененных данных для Oracle по Attunity

Эта статья поможет устранить проблему, из-за которой вы заметили непрерывный рост журнала транзакций для базы данных с поддержкой 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>'

Решение

  1. Выполните следующую команду в окне запроса, подключенном к базе данных с поддержкой CDC в SQL Server:

    EXEC sp_repltrans
    

    Выходные данные должны выглядеть примерно так:

    xdesid xact_seqno xact_seqno
    0x000000260000012C0001 0x0000002A000001B50001
    

    Скопируйте номера последовательности транзакций LSN для следующей команды.

  2. Используя цифры из шага 1, выполните sp_repldone следующую команду, чтобы сообщить, что пары BeginTran и CommitTran LSN уже реплицируются:

    sp_repldone @xactid = 0x000000260000012C0001, @xact_segno = 0x0000002A000001B50001
    
  3. Выполните следующую команду, чтобы убедиться, что транзакция помечена как реплицированная в базе данных CDC:

    DBCC OPENTRAN
    

    Возвращает выходные данные, похожие на следующие данные:

    No active open transactions.
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    
  4. Чтобы убедиться, что журнал транзакций можно повторно использовать, убедитесь, что в базе данных нет другой причины повторного использования:

    SELECT log_reuse_wait_desc, NAME FROM sys.databases WHERE NAME = '<your_cdc_database>'
    

    Возвращает выходные данные, похожие на следующие данные:

    log_reuse_wait_desc name
    NOTHING <your_cdc_database>
    
  5. Теперь вы сможете усечь журнал транзакций с помощью резервных копий журналов. Кроме того, вы сможете сократить файл журнала транзакций, чтобы уменьшить дисковое пространство, которое использовалось. Например, выполните следующую команду:

    BACKUP LOG <your_cdc_database> TO DISK='c:\folder\logbackup.trn'
    DBCC SHRINKFILE (yourcdcdatabase_log, 1024)
    

Дополнительные сведения см. в разделе "Управление размером файла журнала транзакций".

Дополнительная информация

Дополнительные сведения см. в статье об устранении ошибок экземпляра CDC в записи измененных данных Майкрософт для Oracle по Attunity.

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.