Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / можно ли узнать, когда последний раз менялись данные в произвольной таблице? / 20 сообщений из 20, страница 1 из 1
19.07.2007, 20:01
    #34671615
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Что-нибудь типа SELECT LAST_UPDATE_TIME FROM SYSIBM.XXXX WHERE TABNAME='MY_TABLE' ?

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

Если бы можно было проверить, что данные таблицы не менялись с момента последней перезагрузки, можно было бы сэкономить немало времени. Да и красивше было бы...
...
Рейтинг: 0 / 0
20.07.2007, 10:30
    #34672343
ппм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
в 9.5 появляется optimistic locking, может, на его основе можно будет. imho
Или самим - generated поле timestamp , и проверять max(поле)
...
Рейтинг: 0 / 0
20.07.2007, 10:37
    #34672368
ппм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
блин - да ведь publish/subscribe придуман для этого.
То есть вам нужен Event Publisher, который бедут publish изменения таблиц[ы]
А ваши приложения сделают subscribe на эти изменения.
Самый сердитый и дешевый способ imho
...
Рейтинг: 0 / 0
20.07.2007, 17:00
    #34674107
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
ппм
блин - да ведь publish/subscribe придуман для этого.
Самый сердитый и дешевый способ imho

Это надо MQ поднимать. Дешевизна способа сразу под сильным вопросом (даже не из-за цены лицензии, а из-за цены поддержки -- нам тут выкатили эстимэйт за NFS под кластером, так сразу почему-то Абрамович вспомнился... а уж за MQ зачарджат по полной).
...
Рейтинг: 0 / 0
20.07.2007, 17:05
    #34674114
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Vladimir DyuzhevЧто-нибудь типа SELECT LAST_UPDATE_TIME FROM SYSIBM.XXXX WHERE TABNAME='MY_TABLE' ?

В принципе, проблему решил бы и запрос, который дал бы хэш поля всех записей таблицы, что-то вроде

Код: plaintext
1.
SELECT MD5( CONCAT(VAL) ) FROM ...

Интересующие поля -- строковые (хотя... одно DECIMAL есть). Однако аггрегатной функции CONCAT я в DB2 не нашел, да и MD5/SHA1/SHA256/anything тоже не обнаруживаются (8.2)...
...
Рейтинг: 0 / 0
23.07.2007, 11:04
    #34676522
Nikolay Kulikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Можно и без even-publisher через обычную SQL рeпликацию.

Не нужно описывать как ты хочешь, что-то сделасть. А зачем это тебе нужно, тогда вариантов решения появлятся больше.
...
Рейтинг: 0 / 0
23.07.2007, 20:57
    #34678480
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Nikolay KulikovМожно и без even-publisher через обычную SQL рeпликацию.
Не нужно описывать как ты хочешь, что-то сделасть. А зачем это тебе нужно, тогда вариантов решения появлятся больше.

Ну, добавим деталей к первому сообщению: есть Java-app, которое предоставляет текущие данные теллерам (курсы валют, стоимости различных межбанковских операций, etc etc). Данные эти меняются нечасто, но более, чем 10-минутных задержек в обновлении быть не должно. Поэтому мы загружаем эти данные раз в 5 минут. База, откуда мы берем данные -- чужая (другой группы), поэтому триггеров на обновление там не поставить. А хочется таки знать -- нужно ли перегружать, или данные всё те же.

Оно, в принципе, и так работает, но хочется совершенства. :)
...
Рейтинг: 0 / 0
24.07.2007, 14:43
    #34680278
ппм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Всё это напоминает классический pub/sub сценарий. imho.
...
Рейтинг: 0 / 0
24.07.2007, 16:57
    #34680928
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
ппмВсё это напоминает классический pub/sub сценарий. imho.

Конечно, напоминает. Идеально -- какой-нибудь мессаджинг и поднять. Но нельзя по финансово-организационным причинам.

Ну да ладно. Я так понял, DB2 время последнего обновления через свои SYSSTAT не предоставляет. Значит, будем жить по старинке -- поллингом.
...
Рейтинг: 0 / 0
24.07.2007, 17:21
    #34681045
bananarama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Vladimir Dyuzhev ппмВсё это напоминает классический pub/sub сценарий. imho.

Конечно, напоминает. Идеально -- какой-нибудь мессаджинг и поднять. Но нельзя по финансово-организационным причинам.

Ну да ладно. Я так понял, DB2 время последнего обновления через свои SYSSTAT не предоставляет. Значит, будем жить по старинке -- поллингом.

а анализировать какой-нибудь transaction log? Или там тоже нет нужной инфы?
...
Рейтинг: 0 / 0
24.07.2007, 20:34
    #34681575
Nikolay Kulikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Настроить SQL-репликацию в режиме push.
...
Рейтинг: 0 / 0
25.07.2007, 10:30
    #34682232
ппм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
V9.5 в рамках optimistic locking предоставляет timestamp поле, контролируемое базой.
Ну или сами generated.
...
Рейтинг: 0 / 0
25.07.2007, 17:43
    #34683826
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
ппмV9.5 в рамках optimistic locking предоставляет timestamp поле, контролируемое базой.
Ну или сами generated.

Это здорово! Молодцы. Только у нас 8.2 :(

А generated ... не, не дадут базу трогать. Ладно, спасибо всем за помощь!
...
Рейтинг: 0 / 0
25.07.2007, 17:52
    #34683868
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
А generated ... не, не дадут базу трогать. Ладно, спасибо всем за помощь!

GENERATED ALWAYS же только на INSERT срабатывает, а при обновлении данных -- увы.
...
Рейтинг: 0 / 0
25.07.2007, 17:57
    #34683897
Nikolay Kulikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Настройте SQL репликацию push, уже давно решилибы все вопросы.
...
Рейтинг: 0 / 0
26.07.2007, 22:06
    #34687451
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Nikolay KulikovНастройте SQL репликацию push, уже давно решилибы все вопросы.

Пролистал репликацию по диагонали, и не уверен, что все вопросы бы решились. Как репликация поможет жабоприложению?
...
Рейтинг: 0 / 0
27.07.2007, 09:37
    #34687811
petsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Если вы настроите репликацию с использованием относительных моментов времени и частотой репликации 5 мин, Вы можете быть уверены, что каждые 5 минут у Вас целевая таблица будет обновлена
...
Рейтинг: 0 / 0
27.07.2007, 14:25
    #34689162
gals
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
На свою таблицу вы можете настроить триггеры?
Пишем MERGE для переливания данных.
Триггеры срабатывает на вставку или модификацию данных в вашу таблицу и пишут протокол обновления.
Остается только считать этот протокол, чтобы выяснить, надо ли обновлять данные в вашей программе.

Если внешняя таблица не доступна на уровне вашей базы, сливаем данные во временную таблицу и запускаем MERGE на эти данне. После этого очищаем временную таблицу - готовим для очередного пришествия данных.
...
Рейтинг: 0 / 0
27.07.2007, 19:52
    #34690277
Vladimir Dyuzhev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
galsНа свою таблицу вы можете настроить триггеры?
Пишем MERGE для переливания данных.
Триггеры срабатывает на вставку или модификацию данных в вашу таблицу и пишут протокол обновления.
Остается только считать этот протокол, чтобы выяснить, надо ли обновлять данные в вашей программе.

Если внешняя таблица не доступна на уровне вашей базы, сливаем данные во временную таблицу и запускаем MERGE на эти данне. После этого очищаем временную таблицу - готовим для очередного пришествия данных.

Ага, это уже интереснее. То есть, если я правильно понял, реплицируем с "их" базы в "свою", а в своей отлавливаем факт записи во временную таблицу? Да, работоспособно. Правда, существенно сложнее, чем хотелось. :) Будем думать.

Спасибо всем!
...
Рейтинг: 0 / 0
27.07.2007, 23:42
    #34690431
gals
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли узнать, когда последний раз менялись данные в произвольной таблице?
Vladimir Dyuzhev
Ага, это уже интереснее. То есть, если я правильно понял, реплицируем с "их" базы в "свою", а в своей отлавливаем факт записи во временную таблицу? Да, работоспособно. Правда, существенно сложнее, чем хотелось. :) Будем думать.


То, что надо писать в промежуточную таблицу, это факт :)
Оператор MERGE - это сравнивалка старых и новых данных. Если данные разные - делает UPDATE вашей "кэшируемой" таблицы. Если данных в старой таблице нет - делает INSERT. Если данные в "кэшируемой" таблице есть, а во временной нет - делает DELETE.
Тригеры отхватывают эти события и пишут лог в свою таблицу.
После этого достаточно посмотреть, а были ли изменения для данной таблицы.

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

Скорость работы MERGE может быть гораздо выше, нежели обработка каждой строки в цикле.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / можно ли узнать, когда последний раз менялись данные в произвольной таблице? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]