Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как решить ситуацию / 16 сообщений из 16, страница 1 из 1
25.01.2012, 20:59
    #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
25.01.2012, 22:45
    #37631786
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решить ситуацию
Вы в курсе, что error "-964" переводится как SQL0964N? (Сперва SQL, потом 4 цифры, дополненные слева нулями, и, если число отрицательное, то справа добавляется N).

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

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

Не вижу прямой связи. Зато SQL0964N на что-то намекает.
...
Рейтинг: 0 / 0
26.01.2012, 15:59
    #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
26.01.2012, 17:45
    #37633527
smalldaewoo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решить ситуацию
[quot Victor Metelitsa]Вы в курсе, что error "-964" переводится как SQL0964N? (Сперва SQL, потом 4 цифры, дополненные слева нулями, и, если число отрицательное, то справа добавляется N).

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

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

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

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

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

Если автокоммит выключен, то зачем увеличивать эти параметры? Ведь логинга нет.
...
Рейтинг: 0 / 0
26.01.2012, 20:50
    #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
26.01.2012, 21:09
    #37633966
шубин_ду
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решить ситуацию
SQL1476N

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

Коммит есть, логгинг поэтому не выключается. Получаем нехватку места в логах на операции "atomic array input operation". Если конечно под этим понимается "insert select from".
...
Рейтинг: 0 / 0
26.01.2012, 22:21
    #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
26.01.2012, 22:30
    #37634069
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решить ситуацию
[quot Victor Metelitsa]CawaSPbVictor Metelitsa,

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

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

С наилучшими пожеланиями,
Александр Веремьев (привет из su.dbms.db2 годов 97-го - 99-го! :)).
...
Рейтинг: 0 / 0
28.01.2012, 14:02
    #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
30.01.2012, 10:16
    #37637748
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решить ситуацию
Victor Metelitsa,

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


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

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

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

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

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


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