Часовой пояс для COMMIT_TIMESTAMP в V $ LOGMNR_CONTENTS

В V$LOGMNR_CONTENTS словарь просмотреть TIMESTAMP а также COMMIT_TIMESTAMP столбцы из DATEтип данных - без информации о часовом поясе. Так в каком часовом поясе они находятся - часовой пояс базы данных, часовой пояс хоста или UTC? Есть ли параметр базы данных для настройки их часового пояса?

2 ответа

Решение

Я предполагаю, что это временная зона операционной системы сервера баз данных. Просто потому чтоSYSDATE который может использоваться для вставки, также возвращается в часовом поясе операционной системы сервера базы данных.

Возможно, Oracle использует DATE тип данных вместо TIMESTAMPтип данных по историческим причинам. Я не знаю когдаTIMESTAMP был введен но конечно DATE приходил раньше.

Когда оператор SELECT выполняется для представления V$LOGMNR_CONTENTS, файлы журнала повторного выполнения архивов читаются последовательно. Эти архивные файлы журнала повторного выполнения находятся в месте назначения архивного журнала. Переведенные записи из файлов журнала повторного выполнения возвращаются в виде строк в этом представлении. Это продолжается до тех пор, пока не будут выполнены критерии фильтрации, указанные при запуске (EndTime или endScn), или пока не будет достигнут конец файла архивного журнала.

Поле TIMESTAMP - это отметка времени, когда было внесено изменение в базу данных. Эта временная метка соответствует преобразованию SCN SCN_TO_TIMESTAMP, так что для данного SCN у вас есть соответствующая временная метка.

Поле COMMIT_TIMESTAMP - это отметка времени, когда транзакция была зафиксирована; имеет смысл только в том случае, если в вызове DBMS_LOGMNR.START_LOGMNR() была выбрана опция COMMITTED_DATA_ONLY. Как вы знаете, запрос журналов повторного выполнения и архивных журналов требует, чтобы вы вызывали этот пакет в сеансе майнера журналов.

На самом деле Oracle иногда использует типы данных DATE, когда, вероятно, следует использовать TIMESTAMP во множестве различных полей словаря. Почему? Я, честно говоря, не знаю, это то же самое, когда они используют для некоторых словарных представлений владельца, для других table_owner и для других owner_name.

DBTIMEZONE указывается в операторе CREATE DATABASE, поэтому в момент создания базы данных. вы можете изменить DBTIMEZONE, используя ALTER DATABASE

alter database set time_zone = 'EST';

Имейте в виду, что изменение часового пояса базы данных вступит в силу только после выключения / запуска, и это не рекомендуется.

TIMESTAMP WITH TIME ZONE - это вариант TIMESTAMP, который включает в свое значение имя региона часового пояса или смещение часового пояса. Смещение часового пояса - это разница (в часах и минутах) между местным временем и временем по Гринвичу (всемирное координированное время, бывшее время по Гринвичу).

База данных Oracle нормализует все новые данные TIMESTAMP WITH LOCAL TIME ZONE к часовому поясу базы данных, когда данные хранятся на диске. База данных Oracle не обновляет автоматически существующие данные в базе данных в новом часовом поясе. Следовательно, вы не можете сбросить часовой пояс базы данных, если в базе данных есть данные TIMESTAMP WITH LOCAL TIME ZONE. Сначала необходимо удалить или экспортировать данные TIMESTAMP WITH LOCAL TIME ZONE, а затем сбросить часовой пояс базы данных. По этой причине Oracle не рекомендует изменять часовой пояс базы данных, содержащей данные.

Пример моего случая: у меня есть база данных Oracle в Azure (где все серверы используют UTC). В моем случае я решил использовать UTC вместо использования другого DBTIMEZONE. Затем я создал функцию для преобразования любой временной метки, хранящейся в любой таблице, в мой часовой пояс.

Интересно, зачем вам читать журналы повтора / архивирования, нужно ли восстанавливать потерянные транзакции? Я надеюсь, что объяснение удовлетворительное, пожалуйста, не стесняйтесь комментировать или спрашивать любые другие сомнения, которые могут у вас возникнуть.

Другие вопросы по тегам