|
|
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Доброе время суток, уважаемые знатоки. Есть проблема которую не могу решить без вашей помощи, подскажите пожалуйста. Мне нужно исключить операции delete в определенный промежуток времени, например с 1 до 5 (AM). Только их и только в это время. Я нашел конструкцию FILTER, текущее время @DATENOW, приведение даты @DATE, конверт строки в число @NUMSTR: Итого может сработать, что-то типа такого: FILTER(IGNORE DELETE, @NUMSTR(@DATE('HH','YYYY-MM-DD HH:MI:SS',@DATENOW)) >= 1 and @NUMSTR(@DATE('HH','YYYY-MM-DD HH:MI:SS',@DATENOW)) <= 5) Подскажите, пожалуйста, такая конструкция будет работать или как сделать грамотно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 10:58 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
@datenow... Что будете делать, если репликат отстанет от источника, скажем, на сутки и придется его догонять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 11:03 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Конечно лучше иметь время транзакции, но как его заполучить на нашел, поэтому использую @DATENOW. Там более прецедентов с отставанием репликации не было. andrey_anonymous, а ты знаешь как получить время транзакции? Вообще такая маска будет работать @DATE('HH','YYYY-MM-DD HH:MI:SS',@DATENOW) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 11:11 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
О - это время транзакции @GETENV ('GGHEADER', 'COMMITTIMESTAMP') ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 11:13 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2О - это время транзакции @GETENV ('GGHEADER', 'COMMITTIMESTAMP') ?! В первом приближении - да. Но есть ньюанс. В дефолтном режиме экстракта TCPSOURCETIMER это время будет скорректировано на время передачи конкретной LCR по сети на сайт репликата, что дает "дрейф" этого показателя, временами - весьма заметный. Можно поставить экстракт в NOTCPSOURCETIMER. Можно сложить committimestamp в пользовательский токен на пампе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 11:25 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2Доброе время суток, уважаемые знатоки. Есть проблема которую не могу решить без вашей помощи, подскажите пожалуйста. Мне нужно исключить операции delete в определенный промежуток времени, например с 1 до 5 (AM). Только их и только в это время. Я нашел конструкцию FILTER, текущее время @DATENOW, приведение даты @DATE, конверт строки в число @NUMSTR: Итого может сработать, что-то типа такого: FILTER(IGNORE DELETE, @NUMSTR(@DATE('HH','YYYY-MM-DD HH:MI:SS',@DATENOW)) >= 1 and @NUMSTR(@DATE('HH','YYYY-MM-DD HH:MI:SS',@DATENOW)) <= 5) Подскажите, пожалуйста, такая конструкция будет работать или как сделать грамотно?Если это пакетная работа и вы ее контролируете, то лучше это сделать под отдельным пользователем, либо пометить эту транзакцию тэгом. Потом на extract отсеивать этого пользователя/тэг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 11:43 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
К сожалению delete делает "черный ящик"..... Я конечно могу беспринципно залезть в него, но при обновлении ПО - тэг точно затрется, а для пользователя есть вероятность что он поменяется. Хотя и время подрезки БД, тоже могут поменять. Как по мне, исключения delete по времени меньшее из зол.. Но за наводку по пользователю спасибо - этот вопрос я подниму. А пользователь БД или OS ? Что-то я только про OS USER вижу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 11:59 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2К сожалению delete делает "черный ящик"..... Я конечно могу беспринципно залезть в него, но при обновлении ПО - тэг точно затрется, а для пользователя есть вероятность что он поменяется. Хотя и время подрезки БД, тоже могут поменять. Как по мне, исключения delete по времени меньшее из зол.. Но за наводку по пользователю спасибо - этот вопрос я подниму. А пользователь БД или OS ? Что-то я только про OS USER вижу...По пользователю БД - tranlogoptions excludeuser ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 12:18 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Спасибо Андрей и Александр, время получил. Теперь дело за малым, завернуть это время в фильтр... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 12:31 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Ребята, фильтр не работает. Падает репликат с ошибкой OGG-00375: Error in FILTER clause. Фильтр такой: Код: plsql 1. Что может быть не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 14:58 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2Ребята, фильтр не работает. Падает репликат с ошибкой OGG-00375: Error in FILTER clause. Фильтр такой: Код: plsql 1. Что может быть не так? А что, так можно было? http://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_datainteg.htm#g1110854 Table 12-6 Using Multiple FILTER Statements Там же, Example 12-4 Using the @RANGE Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 15:12 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2Ребята, фильтр не работает. Падает репликат с ошибкой OGG-00375: Error in FILTER clause. Фильтр такой: Код: plsql 1. Что может быть не так?Обычно в репорте ГГ подсвечивает, где ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 15:28 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
2017-07-03 16:35:55 INFO OGG-02243 Opened trail file /gg12c/dirdat/av000000061 at 2017-07-03 16:35:55.600863. 2017-07-03 16:35:55 INFO OGG-03506 The source database character set, as determined from the trail file, is UTF-8. 2017-07-03 16:35:55 INFO OGG-06505 MAP resolved (entry to_del_id_disc): MAP "to_del_id_disc", target del_id_discounts_2,FILTER(IGNORE DELETE, @NUMSTR(@DATE('HH','YYYY-MM-DD H H:MI:SS',@DATENOW)) >= 14 and @NUMSTR(@DATE('HH','YYYY-MM-DD HH:MI:SS',@DATENOW)) < 15). 2017-07-03 16:35:55 INFO OGG-02756 The definition for table to_del_id_disc is obtained from the trail file. 2017-07-03 16:35:55 INFO OGG-06511 Using following columns in default map by name: CASH_ID, ID. Source Context : SourceModule : [er.init] SourceID : [/scratch/aime/adestore/views/aime_adc4150330/oggcore/OpenSys/src/app/er/init.cpp] SourceFunction : [compile_filter] SourceLine : [986] ThreadBacktrace : [18] elements : [/gg12c/libgglog.so(CMessageContext::AddThreadContext()+0x1b) [0x7f40ac8904eb]] : [/gg12c/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...)+0x135) [0x7f40ac88a5c5]] : [/gg12c/libgglog.so(_MSG_ERR_STARTUP_PARAMERROR_FILTER_CLAUSE_PARSE_ERROR(CSourceContext*, CMessageFactory::MessageDisposition)+0x29) [0x7f40ac878b44]] : [/gg12c/replicat(compile_filter(ggs::gglib::ggunicode::UString const&, file_def*)+0x240) [0x5b7720]] : [/gg12c/replicat(get_map_entry(ggs::gglib::ggunicode::UString const&, int, wc_def*, int, unsigned int, unsigned int, ggs::gglib::ggmetadata::CTblMetadata*, ggs::gglib::ggmetadata::C MetadataReader*, bool, bool, bool)+0x3df4) [0x5d3344]] : [/gg12c/replicat(wc_def::resolve_wc_entry(ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1> const&, int, unsigned int*, ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1>*, int, ggs::ggl ib::ggmetadata::CTblMetadata*, ggs::gglib::ggmetadata::CMetadataReader*)+0x1ee) [0x6a3c0e]] : [/gg12c/replicat(WILDCARD_check_table(ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1> const*, int, unsigned int*, int, unsigned int, ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1>* , int, ggs::gglib::ggmetadata::CTblMetadata*, ggs::gglib::ggmetadata::CMetadataReader*, bool)+0x195) [0x6a4225]] : [/gg12c/replicat(REP_find_source_file_wc(ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1> const&, unsigned int, ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1>*, int, ggs::gglib::ggm etadata::CTblMetadata*, ggs::gglib::ggmetadata::CMetadataReader*, bool)+0x1ad) [0x5cd2ad]] : [/gg12c/replicat(source_file_lookup(ggs::gglib::gglcr::CommonLCR const*, ggs::gglib::ggmetadata::CMetadataReader*)+0x496) [0x5b2c26]] : [/gg12c/replicat(ggs::er::ReplicatContext::processReplicatLoop(ggs::Heartbeat::MapGeneratorParams&)+0xd86) [0x5f69e6]] : [/gg12c/replicat(ggs::er::ReplicatContext::run(ggs::Heartbeat::MapGeneratorParams&)+0x29) [0x5eae39]] : [/gg12c/replicat() [0x633c7b]] : [/gg12c/replicat(ggs::gglib::MultiThreading::MainThread::ExecMain()+0x60) [0x6ecbe0]] : [/gg12c/replicat(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*)+0x14d) [0x6edbfd]] : [/gg12c/replicat(ggs::gglib::MultiThreading::MainThread::Run(int, char**)+0xb1) [0x6edce1]] : [/gg12c/replicat(main+0x3b) [0x636c9b]] : [/lib64/libc.so.6(__libc_start_main+0xfd) [0x3ea741ed1d]] : [/gg12c/replicat() [0x56c559]] 2017-07-03 16:35:55 ERROR OGG-00375 Error in FILTER clause. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 16:41 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2, Тут 'YYYY-MM-DD HH:MI:SS' попробуйте так 'YYYY-MM-DD:HH:MI:SS' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 10:28 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Не работает. Конструкцию FILTER() вообще возможно использовать без указания source column ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 10:52 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2, Filter ((Условие1) And (Условие2)) по факту у вас множественное преобразование типов да еще с проверкой на условия Может и "потеряться" Этож все таки СИ а тама любят "красоту" и "порядок" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 11:30 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Evgeny2Не работает. Может, все-таки по ссылочке почитать? 20609351 и изобразить что-то вроде Код: plsql 1. 2. или Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 12:17 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Причина падения нашлась. Каждое условие нужно закрывать в скобки! Filter ((Условие1) And (Условие2)) Спасибо всем за участие и подсказки. Особенно Alik Wishin. Alik Wishin, а что Вы имел ввиду: авторЭтож все таки СИ а тама любят "красоту" и "порядок" Разве условие не красивое или беспорядочное? А как бы Вы написал его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 15:09 |
|
||
|
Oracle GoldenGate. Фильтр по времени.
|
|||
|---|---|---|---|
|
#18+
Блин - рано порадовался!!!! Начал делать вставку и опять падает с ошибками. Попробовал и мульти фильтры и @VALONEOF и просто фильтр с одним условием типа FILTER(IGNORE DELETE, @NUMSTR(@DATE('HH','YYYY-MM-DD HH:MI:SS',@DATENOW)) >= 1) Что делать? У кого-нибудь есть работающий GG с конструкцией FILTER(filter_clause), где filter_clause не содержит поля из таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2017, 15:57 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39481636&tid=1885666]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 444ms |

| 0 / 0 |
