Вопрос знатокам DB/2
-
- Уже с Приветом
- Posts: 297
- Joined: 01 Oct 2003 03:28
- Location: Siberia->Moscow->Chicago->NJ->NY->Montreal
Вопрос знатокам DB/2
Как бороться с кораптед данными в ДБ2?
Ситуация:
Чужое приложение периодически суёт пробелы, другие символы в поля таблицы типа Децимал. Та прога на РПГ нарисована, открывает таблицы, как обычные файлы.
Мне надо триггера повесить на эту табличку, что я и сотворил.
Но когда меняется рекорд, в котором хотя-бы одно такое поле корявое, триггер валится.
На этапе передачи ему ссылки на новые и старые данные (NEW ROW & OLD ROW) происходит похоже их валидация базой данных, которая и летит.
В теле триггера ни один эксепшн хэндлер не помогает, т.к. до него просто ход не доходит, всё раньше уже валится.
До кучи ещё и лог пишется непонятно куда, который разрастается.
Триггера должны быть системными, т.к. SQL триггера не работают, не позволяют той окоянной проге на РПГ открывать таблицы, как файлы.
РПГ прогу убрать, переписать нельзя, исправить кораптед рекорды не поможет, т.к. РПГ прога напихает их по-новой через некоторое время.
Как с этим бороться?
Есть-ли например хотя-бы какие установки не писать этот ЛОГ, чтобы диск не забивался, или чистить его по достижении какого-нить размера?
Возможно-ли как-нить предотвратить эту валидацию данных, ну чтобы она шла в триггер по ссылке со всем этим крапом?
Буду очень всем благодарен за советы
Ситуация:
Чужое приложение периодически суёт пробелы, другие символы в поля таблицы типа Децимал. Та прога на РПГ нарисована, открывает таблицы, как обычные файлы.
Мне надо триггера повесить на эту табличку, что я и сотворил.
Но когда меняется рекорд, в котором хотя-бы одно такое поле корявое, триггер валится.
На этапе передачи ему ссылки на новые и старые данные (NEW ROW & OLD ROW) происходит похоже их валидация базой данных, которая и летит.
В теле триггера ни один эксепшн хэндлер не помогает, т.к. до него просто ход не доходит, всё раньше уже валится.
До кучи ещё и лог пишется непонятно куда, который разрастается.
Триггера должны быть системными, т.к. SQL триггера не работают, не позволяют той окоянной проге на РПГ открывать таблицы, как файлы.
РПГ прогу убрать, переписать нельзя, исправить кораптед рекорды не поможет, т.к. РПГ прога напихает их по-новой через некоторое время.
Как с этим бороться?
Есть-ли например хотя-бы какие установки не писать этот ЛОГ, чтобы диск не забивался, или чистить его по достижении какого-нить размера?
Возможно-ли как-нить предотвратить эту валидацию данных, ну чтобы она шла в триггер по ссылке со всем этим крапом?
Буду очень всем благодарен за советы
-
- Posts: 7
- Joined: 20 Feb 2004 21:51
- Location: Minsk/Belarus
Лог убрать не сложно
Лог уменьшить не большая проблема. Откройте Command Center и поищите там в свойствах базы, размер и количество лог файлов. Только оно постоянно и они по любому затираются. У вас скорее обратная проблема - что начинается какая то цепная транзакция - типа автовалидации базы и транзакшен лог переполняется. Ну мне так кажется. Так что увиличте его. Точно вам говорю размер Log file в Дб2 постоянный. Только там есть primary and secondary log files. Когда первых не хватает она начинает создавать вторые. Но это можно присечь. Кстати все эти настройки можно (и нужно во всяких Юниксах) менять в комадной строке. К сожалению сейчас с ДБ2 не работаю (а жаль - очень мне нравится эта база), так что пример прислать не могу
------------------------------------------------
Take care
Take care
-
- Уже с Приветом
- Posts: 297
- Joined: 01 Oct 2003 03:28
- Location: Siberia->Moscow->Chicago->NJ->NY->Montreal
-
- Posts: 7
- Joined: 20 Feb 2004 21:51
- Location: Minsk/Belarus
Кто вас так обаманул насчёт транзакшен лога ? - если его нету, тогда сделайте небольшой тест. Создайте чистую базу - в ней табличку. В табличке сделайте 50.000 записей. Записи утилитой export перепишите в файл. Удалите из таблички все записи. А потом утилитой import попробуйте их зачесть. Вам выдаст ошику Transaction Log is Fool - потому что default settings маловаты для измениния 50.000 записей за одну транзакцию
------------------------------------------------
Take care
Take care
-
- Posts: 7
- Joined: 20 Feb 2004 21:51
- Location: Minsk/Belarus
-
- Уже с Приветом
- Posts: 297
- Joined: 01 Oct 2003 03:28
- Location: Siberia->Moscow->Chicago->NJ->NY->Montreal
Я делал другой тест.
50000 записей, у всех например одно из полей "АА" равно НОЛЬ (0)
пишешь
update table set aa=1
пока оно ранится, прерываешь его.
Будь там хоть малейший намёк на транзакшн лог (может на нормальный Транзакшн ЛОГ), я-бы после этого получил-бы начальные данные.
Ан нет, после этого у меня половина записей с полем АА=1, половина с нулями.
Или ещё, пишешь
begin Transaction
select ...
update ...
commit transaction
Она скулит, что для этой таблички надо установить Jornaling
transact_isolation level типа не позволяет транзакции.
Версия АС400 = 5.2, т.е. распоследняя, тоже самое было и в 4.5 и в 5.1
50000 записей, у всех например одно из полей "АА" равно НОЛЬ (0)
пишешь
update table set aa=1
пока оно ранится, прерываешь его.
Будь там хоть малейший намёк на транзакшн лог (может на нормальный Транзакшн ЛОГ), я-бы после этого получил-бы начальные данные.
Ан нет, после этого у меня половина записей с полем АА=1, половина с нулями.
Или ещё, пишешь
begin Transaction
select ...
update ...
commit transaction
Она скулит, что для этой таблички надо установить Jornaling
transact_isolation level типа не позволяет транзакции.
Версия АС400 = 5.2, т.е. распоследняя, тоже самое было и в 4.5 и в 5.1
-
- Posts: 7
- Joined: 20 Feb 2004 21:51
- Location: Minsk/Belarus
-
- Уже с Приветом
- Posts: 297
- Joined: 01 Oct 2003 03:28
- Location: Siberia->Moscow->Chicago->NJ->NY->Montreal
Ну на АС400 ровно она и стоит, DB2 UDB,
Эт-ж дефолт база данных, часть операционки АС400.
Или Вы говрите про ДБ2, установленную где-то на Виндах, Линуксах?
Я знаю, для Линукса ИБМ выпустила бесплатную ДБ2, мож она там и разнится от оригинальной для 400, мож там и Транз Лог по умолчанию стоит.
Если да, это здорово.
Но мне-т конечно от этого всего не легче, т.к. мне с еррор логом побороться надо, чтобы он не рос безгранично
Эт-ж дефолт база данных, часть операционки АС400.
Или Вы говрите про ДБ2, установленную где-то на Виндах, Линуксах?
Я знаю, для Линукса ИБМ выпустила бесплатную ДБ2, мож она там и разнится от оригинальной для 400, мож там и Транз Лог по умолчанию стоит.
Если да, это здорово.
Но мне-т конечно от этого всего не легче, т.к. мне с еррор логом побороться надо, чтобы он не рос безгранично
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Вопрос знатокам DB/2
Dan70 wrote:Как бороться с кораптед данными в ДБ2?
Ситуация:
Чужое приложение периодически суёт пробелы, другие символы в поля таблицы типа Децимал. Та прога на РПГ нарисована, открывает таблицы, как обычные файлы.
Мне надо триггера повесить на эту табличку, что я и сотворил.
Но когда меняется рекорд, в котором хотя-бы одно такое поле корявое, триггер валится.
На этапе передачи ему ссылки на новые и старые данные (NEW ROW & OLD ROW) происходит похоже их валидация базой данных, которая и летит.
В теле триггера ни один эксепшн хэндлер не помогает, т.к. до него просто ход не доходит, всё раньше уже валится.
................
Триггера должны быть системными, т.к. SQL триггера не работают, не позволяют той окоянной проге на РПГ открывать таблицы, как файлы.
РПГ прогу убрать, переписать нельзя, исправить кораптед рекорды не поможет, т.к. РПГ прога напихает их по-новой через некоторое время.
............
Возможно-ли как-нить предотвратить эту валидацию данных, ну чтобы она шла в триггер по ссылке со всем этим крапом?
Буду очень всем благодарен за советы
Dan70, я не спец для DB2 на AS/400 - я спец для DB2 на мэйнфрэйм. Хочу тем не менее Вам помощь. Для этого хотелось бы уточнить:
- что значит "......пробелы, другие символы в поля таблицы типа Децимал".
Если поля в таблице объявлены DECIMAL, то (для DB2 UDB) нет никакой возможности вставить в них не численные данные.
- что значит ".....открывает таблицы, как обычные файлы". В тех DB2 которые мне известны нет такой возможности.
- что значит: "....Триггера должны быть системными, т.к. SQL триггера не работают".
Никогда не слышал о триггерах системных и SQL - триггер в DB2 один - DB2 триггер.
-
- Уже с Приветом
- Posts: 1377
- Joined: 14 May 2003 20:37
- Location: NY, USA
Re: Вопрос знатокам DB/2
"Dan70":
Какие-то странные вещи вы рассказываете
Не могли бы вы привести DDL таблицы, триггера а также образцы SQL запросов, которые клиент шлет на сервер? Что сервер отвечает, какие значения SQLCODE, SQLSTATE возвращаются?
Какие-то странные вещи вы рассказываете

Не могли бы вы привести DDL таблицы, триггера а также образцы SQL запросов, которые клиент шлет на сервер? Что сервер отвечает, какие значения SQLCODE, SQLSTATE возвращаются?
-
- Уже с Приветом
- Posts: 3982
- Joined: 13 Jul 2000 09:01
- Location: SVX -> BOS -> BUR -> SJC
zVlad, Flying Hen
Судя по оригинальному посту, у Dan70 проблема в том, что чья-то левая приблуда вместо запуска SQL запросов находит файло на диске с таблицей и пишет прямо туда. Благо формат более-менее известен. Кстати, некторые DB2-утилиты умеют по-крайней мере читать данные минуя SQL. Ну а та левая приблуда пишет в DECIMAL поля пробелы.
Бороться с этим можно только одним способом - руки выдернуть программистам.
Судя по оригинальному посту, у Dan70 проблема в том, что чья-то левая приблуда вместо запуска SQL запросов находит файло на диске с таблицей и пишет прямо туда. Благо формат более-менее известен. Кстати, некторые DB2-утилиты умеют по-крайней мере читать данные минуя SQL. Ну а та левая приблуда пишет в DECIMAL поля пробелы.
Бороться с этим можно только одним способом - руки выдернуть программистам.

I hated LA
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
WildVlad wrote:zVlad, Flying Hen
...... Кстати, некторые DB2-утилиты умеют по-крайней мере читать данные минуя SQL. Ну а та левая приблуда пишет в DECIMAL поля пробелы.
Бороться с этим можно только одним способом - руки выдернуть программистам.
DB2 утилиты могут не только читать, но и писать данные минуя SQL. Как то утилиты LOAD, REORG. Но делается это так что только утилиты так могут делать и они (утилиты) строго координируют свою деятельность с RDBMS. Прямой же доступ к файлам должен быть по идеи присекаться операционной системой поскольку RDBMS должна размещать те файлы для себя.
AS/400 при этом может иметь свои особенности. В этой системе база данных изначально была частью операционной системы.
Остается ждать уточнений и разъяснений от Dan70.
-
- Уже с Приветом
- Posts: 297
- Joined: 01 Oct 2003 03:28
- Location: Siberia->Moscow->Chicago->NJ->NY->Montreal
zVlad wrote:WildVlad wrote:zVlad, Flying Hen
...... Кстати, некторые DB2-утилиты умеют по-крайней мере читать данные минуя SQL. Ну а та левая приблуда пишет в DECIMAL поля пробелы.
Бороться с этим можно только одним способом - руки выдернуть программистам.
DB2 утилиты могут не только читать, но и писать данные минуя SQL. Как то утилиты LOAD, REORG. Но делается это так что только утилиты так могут делать и они (утилиты) строго координируют свою деятельность с RDBMS. Прямой же доступ к файлам должен быть по идеи присекаться операционной системой поскольку RDBMS должна размещать те файлы для себя.
AS/400 при этом может иметь свои особенности. В этой системе база данных изначально была частью операционной системы.
Остается ждать уточнений и разъяснений от Dan70.
Да в том-то и дело, что эта самая левая приблуда, написанная на RPG, работает с файлами ровно так, как с физическими файлами. Ни малейших намёков о SQL там нет. Поэтому затолкать пробелы в созданные самим-же собой таблицы и поля типа Decimal, Numeric, Date, Time тому программеру и его проге не представляется сложным.
Как я выяснил, что там левизна в полях?
1) Если пытаешься с помощью SQL ретривить значения этих полей, то всё просто рушится, запрос виснит.
2) Пытаешься как-нить преобразовать, типа IFNULL(xxx,0) - не работает, но не валится, зато в Job Log пишет, что ошибка преобразования данных
3) Наконец гвоздём программы стала функция HEX(xxx), которая ничего не проверяю (тип данных и т.д.), просто показала хекс значение того, что там внутри.
Именно против этих корявых рекордов и полей было 4040 (два пробела на Эбседеке)
Не верится?
Разумеется, мы также после этого полезли и физически посмотрели этот файл и эту велицину. И именно пробелы туда были затолканы, не что иное.
-
- Уже с Приветом
- Posts: 10000
- Joined: 16 Jul 2003 18:47
- Location: CA->AZ->DE->NJ-> AZ->GA->AZ
zVlad wrote: Прямой же доступ к файлам должен быть по идеи присекаться операционной системой поскольку RDBMS должна размещать те файлы для себя.
Не знаю как в AS400, а в Юниксе я не вижу способа методами OS запретить какой-то программе писать в файл, если у нее есть на это права.
А пристыдишь их - и сальцо найдется, и горилочка...
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris