Вопрос знатокам DB/2

Dan70
Уже с Приветом
Posts: 297
Joined: 01 Oct 2003 03:28
Location: Siberia->Moscow->Chicago->NJ->NY->Montreal

Вопрос знатокам DB/2

Post by Dan70 »

Как бороться с кораптед данными в ДБ2?
Ситуация:
Чужое приложение периодически суёт пробелы, другие символы в поля таблицы типа Децимал. Та прога на РПГ нарисована, открывает таблицы, как обычные файлы.

Мне надо триггера повесить на эту табличку, что я и сотворил.
Но когда меняется рекорд, в котором хотя-бы одно такое поле корявое, триггер валится.
На этапе передачи ему ссылки на новые и старые данные (NEW ROW & OLD ROW) происходит похоже их валидация базой данных, которая и летит.
В теле триггера ни один эксепшн хэндлер не помогает, т.к. до него просто ход не доходит, всё раньше уже валится.

До кучи ещё и лог пишется непонятно куда, который разрастается.

Триггера должны быть системными, т.к. SQL триггера не работают, не позволяют той окоянной проге на РПГ открывать таблицы, как файлы.

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

Как с этим бороться?
Есть-ли например хотя-бы какие установки не писать этот ЛОГ, чтобы диск не забивался, или чистить его по достижении какого-нить размера?

Возможно-ли как-нить предотвратить эту валидацию данных, ну чтобы она шла в триггер по ссылке со всем этим крапом?

Буду очень всем благодарен за советы
Stanislau Sakalou
Posts: 7
Joined: 20 Feb 2004 21:51
Location: Minsk/Belarus

Лог убрать не сложно

Post by Stanislau Sakalou »

Лог уменьшить не большая проблема. Откройте Command Center и поищите там в свойствах базы, размер и количество лог файлов. Только оно постоянно и они по любому затираются. У вас скорее обратная проблема - что начинается какая то цепная транзакция - типа автовалидации базы и транзакшен лог переполняется. Ну мне так кажется. Так что увиличте его. Точно вам говорю размер Log file в Дб2 постоянный. Только там есть primary and secondary log files. Когда первых не хватает она начинает создавать вторые. Но это можно присечь. Кстати все эти настройки можно (и нужно во всяких Юниксах) менять в комадной строке. К сожалению сейчас с ДБ2 не работаю (а жаль - очень мне нравится эта база), так что пример прислать не могу
------------------------------------------------
Take care
Dan70
Уже с Приветом
Posts: 297
Joined: 01 Oct 2003 03:28
Location: Siberia->Moscow->Chicago->NJ->NY->Montreal

Post by Dan70 »

По умолчанию в ДБ2 транзакшн лога нет, как такового.
Его нужно для каждой таблички отдельно создавать (журналом это зовётся)
А я говорил про лог ошибок, в который система пишет все эти крахи валидации, как его ограничить. например?
Stanislau Sakalou
Posts: 7
Joined: 20 Feb 2004 21:51
Location: Minsk/Belarus

Post by Stanislau Sakalou »

Кто вас так обаманул насчёт транзакшен лога ? - если его нету, тогда сделайте небольшой тест. Создайте чистую базу - в ней табличку. В табличке сделайте 50.000 записей. Записи утилитой export перепишите в файл. Удалите из таблички все записи. А потом утилитой import попробуйте их зачесть. Вам выдаст ошику Transaction Log is Fool - потому что default settings маловаты для измениния 50.000 записей за одну транзакцию
------------------------------------------------
Take care
Stanislau Sakalou
Posts: 7
Joined: 20 Feb 2004 21:51
Location: Minsk/Belarus

Post by Stanislau Sakalou »

fool=full :-)
------------------------------------------------
Take care
Dan70
Уже с Приветом
Posts: 297
Joined: 01 Oct 2003 03:28
Location: Siberia->Moscow->Chicago->NJ->NY->Montreal

Post by Dan70 »

Я делал другой тест.
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
Stanislau Sakalou
Posts: 7
Joined: 20 Feb 2004 21:51
Location: Minsk/Belarus

Post by Stanislau Sakalou »

У вас база DB2 for AS/400 а я говорю про DB2 UDB. И последняя версия 8.2 вроде бы. Возможно создатели разных версий используют разную терминологию.
------------------------------------------------
Take care
Dan70
Уже с Приветом
Posts: 297
Joined: 01 Oct 2003 03:28
Location: Siberia->Moscow->Chicago->NJ->NY->Montreal

Post by Dan70 »

Ну на АС400 ровно она и стоит, DB2 UDB,
Эт-ж дефолт база данных, часть операционки АС400.
Или Вы говрите про ДБ2, установленную где-то на Виндах, Линуксах?
Я знаю, для Линукса ИБМ выпустила бесплатную ДБ2, мож она там и разнится от оригинальной для 400, мож там и Транз Лог по умолчанию стоит.
Если да, это здорово.

Но мне-т конечно от этого всего не легче, т.к. мне с еррор логом побороться надо, чтобы он не рос безгранично
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Re: Вопрос знатокам DB/2

Post by zVlad »

Dan70 wrote:Как бороться с кораптед данными в ДБ2?
Ситуация:
Чужое приложение периодически суёт пробелы, другие символы в поля таблицы типа Децимал. Та прога на РПГ нарисована, открывает таблицы, как обычные файлы.

Мне надо триггера повесить на эту табличку, что я и сотворил.
Но когда меняется рекорд, в котором хотя-бы одно такое поле корявое, триггер валится.
На этапе передачи ему ссылки на новые и старые данные (NEW ROW & OLD ROW) происходит похоже их валидация базой данных, которая и летит.
В теле триггера ни один эксепшн хэндлер не помогает, т.к. до него просто ход не доходит, всё раньше уже валится.

................

Триггера должны быть системными, т.к. SQL триггера не работают, не позволяют той окоянной проге на РПГ открывать таблицы, как файлы.

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

............
Возможно-ли как-нить предотвратить эту валидацию данных, ну чтобы она шла в триггер по ссылке со всем этим крапом?

Буду очень всем благодарен за советы



Dan70, я не спец для DB2 на AS/400 - я спец для DB2 на мэйнфрэйм. Хочу тем не менее Вам помощь. Для этого хотелось бы уточнить:

- что значит "......пробелы, другие символы в поля таблицы типа Децимал".
Если поля в таблице объявлены DECIMAL, то (для DB2 UDB) нет никакой возможности вставить в них не численные данные.

- что значит ".....открывает таблицы, как обычные файлы". В тех DB2 которые мне известны нет такой возможности.

- что значит: "....Триггера должны быть системными, т.к. SQL триггера не работают".
Никогда не слышал о триггерах системных и SQL - триггер в DB2 один - DB2 триггер.
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: Вопрос знатокам DB/2

Post by Flying Hen »

"Dan70":

Какие-то странные вещи вы рассказываете :wink:

Не могли бы вы привести DDL таблицы, триггера а также образцы SQL запросов, которые клиент шлет на сервер? Что сервер отвечает, какие значения SQLCODE, SQLSTATE возвращаются?
User avatar
WildVlad
Уже с Приветом
Posts: 3982
Joined: 13 Jul 2000 09:01
Location: SVX -> BOS -> BUR -> SJC

Post by WildVlad »

zVlad, Flying Hen

Судя по оригинальному посту, у Dan70 проблема в том, что чья-то левая приблуда вместо запуска SQL запросов находит файло на диске с таблицей и пишет прямо туда. Благо формат более-менее известен. Кстати, некторые DB2-утилиты умеют по-крайней мере читать данные минуя SQL. Ну а та левая приблуда пишет в DECIMAL поля пробелы.

Бороться с этим можно только одним способом - руки выдернуть программистам. :mrgreen:
I hated LA
zVlad
Уже с Приветом
Posts: 15420
Joined: 30 Apr 2003 16:43
Has thanked: 1 time

Post by zVlad »

WildVlad wrote:zVlad, Flying Hen

...... Кстати, некторые DB2-утилиты умеют по-крайней мере читать данные минуя SQL. Ну а та левая приблуда пишет в DECIMAL поля пробелы.

Бороться с этим можно только одним способом - руки выдернуть программистам. :mrgreen:


DB2 утилиты могут не только читать, но и писать данные минуя SQL. Как то утилиты LOAD, REORG. Но делается это так что только утилиты так могут делать и они (утилиты) строго координируют свою деятельность с RDBMS. Прямой же доступ к файлам должен быть по идеи присекаться операционной системой поскольку RDBMS должна размещать те файлы для себя.
AS/400 при этом может иметь свои особенности. В этой системе база данных изначально была частью операционной системы.
Остается ждать уточнений и разъяснений от Dan70.
Dan70
Уже с Приветом
Posts: 297
Joined: 01 Oct 2003 03:28
Location: Siberia->Moscow->Chicago->NJ->NY->Montreal

Post by Dan70 »

zVlad wrote:
WildVlad wrote:zVlad, Flying Hen

...... Кстати, некторые DB2-утилиты умеют по-крайней мере читать данные минуя SQL. Ну а та левая приблуда пишет в DECIMAL поля пробелы.

Бороться с этим можно только одним способом - руки выдернуть программистам. :mrgreen:


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 (два пробела на Эбседеке)

Не верится?
Разумеется, мы также после этого полезли и физически посмотрели этот файл и эту велицину. И именно пробелы туда были затолканы, не что иное.
User avatar
Митяй
Уже с Приветом
Posts: 10000
Joined: 16 Jul 2003 18:47
Location: CA->AZ->DE->NJ-> AZ->GA->AZ

Post by Митяй »

zVlad wrote: Прямой же доступ к файлам должен быть по идеи присекаться операционной системой поскольку RDBMS должна размещать те файлы для себя.


Не знаю как в AS400, а в Юниксе я не вижу способа методами OS запретить какой-то программе писать в файл, если у нее есть на это права.
А пристыдишь их - и сальцо найдется, и горилочка...
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

В NT в файлы MS SQL тоже можно писать
Другое дело что если база запущена то эти файлы всегда открыты в эксклузивном режиме
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014

Return to “Работа и Карьера в IT”