powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как решить ситуацию
16 сообщений из 16, страница 1 из 1
Как решить ситуацию
    #37631684
smalldaewoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток
Ситуация в следующем необходимо отключить логирование при вставке в таблицу
Выполняю следующее
ALTER TABLE TEST_TRUNCATE ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;

insert into TEST_TRUNCATE select t.* from TEST_TRUNCATE2 t where t.ordered_id > 100;

commit;

если таблица select возвращает меньше 2 млн все работает чудесно и даже достаточно быстро если привышает 2млн получаем:

DB2 Database Error: ERROR [40506] [IBM][DB2/NT] SQL1476N The current transaction was rolled back because of error "-964". SQLSTATE=40506

Как решить ситуацию?
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37631786
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы в курсе, что error "-964" переводится как SQL0964N? (Сперва SQL, потом 4 цифры, дополненные слева нулями, и, если число отрицательное, то справа добавляется N).

Вы не забыли выключить autocommit? (UPDATE COMMAND OPTIONS USING C OFF или соотв. опция CLP)
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633080
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa,
Autocommit, видимо, выключен, иначе бы SQL1476N не вылезало.

smalldaewoo,
А что в db2diag.log?
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633128
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CawaSPbAutocommit, видимо, выключен, иначе бы SQL1476N не вылезало.

Не вижу прямой связи. Зато SQL0964N на что-то намекает.
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633227
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa,

Ну, из всего, про что SQL1476N говорит,
Код: plaintext
1.
2.
3.
4.
2. A table was being created with the NOT LOGGED INITIALLY option, or
   NOT LOGGED INITIALLY was activated for an existing table. During the
   same unit of work, either an error occurred, or a ROLLBACK TO
   SAVEPOINT statement was issued. ...
наиболее похоже на относящееся к данной ситуации.

Т.е. тот error, в который завёрнут SQL0964N, имеет отношение к таблице, находящейся в NOT LOGGED INITIALLY состоянии, следовательно коммита перед insert into не было.

Возможно там триггера на табличку понавешаны (логирующие изменения, к примеру).


PS load from cursor супротив insert into в приводимой ситуации будет быстрее. Работает как из пушки (ну то есть вплоть до того, что чуть не в сотню/другую раз быстрее).
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633527
smalldaewoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Victor Metelitsa]Вы в курсе, что error "-964" переводится как SQL0964N? (Сперва SQL, потом 4 цифры, дополненные слева нулями, и, если число отрицательное, то справа добавляется N).

autocommit - выключен, работаю вторую неделю с db2 поэтому не знал что "-964" это и есть SQL0964N
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633544
smalldaewoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Триггеров нет вообще

Ситуация свободно решилась увеличением параметров logfilsiz logprimary logsecond
20 млн свободно вставляются

Щас попробую load from cursor
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633888
шубин_ду
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smalldaewooТриггеров нет вообще

Ситуация свободно решилась увеличением параметров logfilsiz logprimary logsecond
20 млн свободно вставляются

Щас попробую load from cursor

Если автокоммит выключен, то зачем увеличивать эти параметры? Ведь логинга нет.
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633944
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шубин_дуsmalldaewooТриггеров нет вообще

Ситуация свободно решилась увеличением параметров logfilsiz logprimary logsecond
20 млн свободно вставляются

Щас попробую load from cursor

Если автокоммит выключен, то зачем увеличивать эти параметры? Ведь логинга нет.

"Видишь суслика? И я не вижу, а он есть!" (C)

Пришедший SQL0964N недвусмысленно говорит о том, что кончились логи, значит что-то логируется, причём так неслабо.
Можно, конечно, просто пространство для активных логов увеличить, но логирование для TEST_TRUNCATE отключается, видимо, не просто так, а для ускорения операции. Между тем, эта цель явно не достигается.

Код: plsql
1.
2.
3.
4.
5.
6.
DECLARE TEST_T_C CURSOR FOR select t.* from TEST_TRUNCATE2 t where t.ordered_id > 100; 
LOAD FROM TEST_T_C OF CURSOR 
    MESSAGES messages.log
    REPLACE INTO TEST_TRUNCATE2
    NONRECOVERABLE
    CHECK PENDING CASCADE IMMEDIATE;


поправит ситуацию, но в исходной проблеме было бы неплохо разобраться.
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37633966
шубин_ду
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL1476N

4. A severe error occurred during an atomic array input operation.

Коммит есть, логгинг поэтому не выключается. Получаем нехватку места в логах на операции "atomic array input operation". Если конечно под этим понимается "insert select from".
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37634055
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CawaSPbVictor Metelitsa,

Ну, из всего, про что SQL1476N говорит,
Код: plaintext
1.
2.
3.
4.
2. A table was being created with the NOT LOGGED INITIALLY option, or
   NOT LOGGED INITIALLY was activated for an existing table. During the
   same unit of work, either an error occurred, or a ROLLBACK TO
   SAVEPOINT statement was issued. ...
наиболее похоже на относящееся к данной ситуации.

Нет, непохоже.

Если вы делаете что-то типа insert into ... select ... from и во время выполнения произошла какая-то "левая" (в смысле, не относящаяся к данной теме) ошибка, типа деления на ноль, вот об этом пункт 2 - транзакция откачена, таблица безвозвратно испорчена (очень жаль). Вот, кстати, способ узнать, был ли вправду отключён автокоммит - проверить, попортилась ли она, напр., сделать после insert'а
select ,,, from... fetch first 1 row only

SQL0964N, переполнение логов, с NOT LOGGED INITIALLY обычно не ожидается.
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37634069
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Victor Metelitsa]CawaSPbVictor Metelitsa,

Если вы делаете что-то типа insert into ... select ... from и во время выполнения произошла какая-то "левая" (в смысле, не относящаяся к данной теме) ошибка, типа деления на ноль, вот об этом пункт 2 - транзакция откачена, таблица безвозвратно испорчена (очень жаль). В смысле, при NOT LOGGED INITIALLY - пункт 2. Не при NOT LOGGED INITIALLY - не пункт 2, таблица не портится, но всё равно SQL1476N может быть.
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37635897
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor MetelitsaВ смысле, при NOT LOGGED INITIALLY - пункт 2. Не при NOT LOGGED INITIALLY - не пункт 2, таблица не портится, но всё равно SQL1476N может быть.

Может, но как-то я вот так с ходу не вижу, к чему бы оно ("не пункт 2") вылезало на представленном "insert into ...".
Хорошо бы дождаться информации от smalldaewoo, как там оно на самом деле.

С наилучшими пожеланиями,
Александр Веремьев (привет из su.dbms.db2 годов 97-го - 99-го! :)).
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37636463
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё это легко проверяется. Создаём тестовую базу, урезаем логи до минимума (чтобы побыстрее было), и видим
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
UPDATE COMMAND OPTIONS USING C OFF  
DB20000I  The UPDATE COMMAND OPTIONS command completed successfully.

drop table x1
DB20000I  The SQL command completed successfully.

create table x1( i bigint, v varchar(100) ) not logged initially
DB20000I  The SQL command completed successfully.

insert into x1 with t (i, v) as ( values(1, rpad('?',99,'x')) union all select i+1, rpad('?',99,'x') from t where i+1<1000000000000 ) select * from t
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL1476N  The current transaction was rolled back because of error "-964".  
SQLSTATE=40506


и
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
UPDATE COMMAND OPTIONS USING C ON  
DB20000I  The UPDATE COMMAND OPTIONS command completed successfully.

drop table x1
DB20000I  The SQL command completed successfully.

create table x1( i bigint, v varchar(100) ) not logged initially
DB20000I  The SQL command completed successfully.

insert into x1 with t (i, v) as ( values(1, rpad('?',99,'x')) union all select i+1, rpad('?',99,'x') from t where i+1<1000000000000 ) select * from t
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0964C  The transaction log for the database is full.  SQLSTATE=57011


(Краснея) Что я могу сказать? Ну... у меня это не так часто встречается, чтобы помнить, какие коды когда. Раньше нарывался на переполнение логов слишком много раз, и теперь стараюсь выделить как можно больше.
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37637748
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsa,

BTW Это означает, что не смотря на выставленное состояние not logged initially в лог таки что-то идёт, причём объём зависит от количества вставляемых записей. Интересно, что.


Victor MetelitsaРаньше нарывался на переполнение логов слишком много раз, и теперь стараюсь выделить как можно больше.
Один фиг, найдётся кто-нибудь, кто "забудет" открытую транзакцию, и при достаточной нагрузке оно рано или поздно упрётся в ограничение. Спасают массовые расстрелы :)
...
Рейтинг: 0 / 0
Как решить ситуацию
    #37638162
A.Panskikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CawaSPb,

если LOAD FROM CURSOR отрабатывает нормально, а insert в таблицу NOT LOGGED - нет, то:

- триггер (переполняет журналы)
- не проходит поле (сваливаемся на ошибке)

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

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


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