Преобразовать поле даты для Oracle GoldenGate

У меня есть установка Oracle GoldenGate с базой данных Oracle в качестве источника и целью, отличной от Oracle. Моя исходная база данных находится в часовом поясе A. Есть ли способ настроить извлечение/реплицирование так, чтобы все данные в моей цели были в формате UTC или в каком-либо настраиваемом часовом поясе B?

Чтобы было понятнее, предположим, что у меня есть база данных в EST, где у меня есть столбец даты со значением 2018-11-26 17:01:49. Я хочу, чтобы данные были преобразованы в UTC, а реплицированное значение было бы 2018-11-26 22:01:49. Есть ли чистый (или любой) способ добиться этого?


person Arjun    schedule 26.11.2018    source источник


Ответы (1)


Это преобразование работает только с REPLICAT. Он выполняет полный расчет времени и переходит от исходного столбца даты с именем dt к целевому столбцу с именем dt5, который должен быть преобразован в дату + 5 часов (вы можете настроить его на любой часовой пояс, в котором вы должны преобразовать данные). Предполагается, что ваша исходная таблица t4, а целевая таблица t4_copy (для SCHEMA scratch)

MAP scratch.t4, TARGET scratch.t4_copy,
COLMAP ( USEDEFAULTS,
dt5 = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS',
@COMPUTE (@DATE ('JTS', 'YYYY-MM-DD HH:MI:SS', dt) + 18000000000 ) ) 
);

JTS (Временная метка Джуйлана) дает числа, которые можно использовать в числовых выражениях. Единицей измерения являются микросекунды (поэтому +18000000000)

person Lyuboslav Karmidzhanov    schedule 13.12.2018
comment
Я не думаю, что это сработает в моем случае. 1. Я хочу, чтобы это преобразование произошло или для всех таблиц, без необходимости сопоставлять каждую таблицу/поле вручную. 2. Смещение должно быть от одного часового пояса к другому. Это преобразование будет меняться в зависимости от перехода на летнее время. Сын с фиксированным значением смещения не будет работать. - person Arjun; 13.12.2018
comment
Ну, есть параметры PRESERVETARGETTIMEZONE и SOURCETIMEZONE, которые вы можете использовать, но я почти уверен, что они предназначены только для метаданных в файлах следа. Поэтому, если данные не привязаны к этим метаданным, я сомневаюсь, что они изменятся без преобразования. В любом случае вы должны указать, какие столбцы вы хотите преобразовать (что, если у вас есть столбцы даты/времени, которые вы не хотите преобразовывать?). Если вы хотите преобразовать все столбцы даты, вы можете сделать SELECT column_name FROM all_tabs_columns WHERE data_type ='DATE' AND owner = 'scratch'; и найти способ заменить dt5 вводом этого - person Lyuboslav Karmidzhanov; 14.12.2018