powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
19 сообщений из 19, страница 1 из 1
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35813587
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Может кто-либо сталкивался с похожей проблемой?
DB2/NT 8.2.7
Для новых полей, добавленых в таблицу BAZA05A необходимо выполнить присвоение '' (пусто знак), иначе он остается как NULL. Если поле как NULL, то при выполнение SQL запросов на получение полного адреса при выполнении в приложении операции сцепления получается пустое поле для ранее введенных данных (до реорганизации).Если будет присвоено поле '', то операция сцепления работает корректно.
Вот SQL-запрос
--- Шаг 1. Соединение с базой
CONNECT TO CLI_BDR13 user db2admin using xxxxxxxx;
---Шаг 2.Cтабилизировать, другим работать нельзя
QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS;
---Шаг 3.Для пустых полей(NULL) выполнить присвоение '' (пусто знак)
UPDATE DB2ADMIN.BAZA05A SET REGION='' WHERE REGION IS NULL;
UPDATE DB2ADMIN.BAZA05A SET NPUNKT='' WHERE NPUNKT IS NULL;
UPDATE DB2ADMIN.BAZA05A SET RAION='' WHERE RAION IS NULL;
UPDATE DB2ADMIN.BAZA05A SET S_REGION='' WHERE S_REGION IS NULL;
UPDATE DB2ADMIN.BAZA05A SET S_NPUNKT='' WHERE S_NPUNKT IS NULL;
UPDATE DB2ADMIN.BAZA05A SET S_RAION='' WHERE S_RAION IS NULL;
UPDATE DB2ADMIN.BAZA05A SET S_GOROD='' WHERE S_GOROD IS NULL;
UPDATE DB2ADMIN.BAZA05A SET S_ULICA='' WHERE S_ULICA IS NULL;
---- Шаг 4. отменить стабилизацию, нехай работают
UNQUIESCE DATABASE;
--- Шаг 5.Разорвать соединение
CONNECT RESET;

Вот сообщение DB2/NT 8.2.7
11.02.2009 18:50:30 UPDATE DB2ADMIN.BAZA05A SET S_ULICA='' WHERE S_ULICA IS NULL
11.02.2009 18:50:37 SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011

Увеличил размер журнала транзакций (LOGFILSIZ) до 16384 - не помогло!?!
Запрос (Шаг 3) запускал по одному оператору - не помогло!?!
Подскажите,пож.что делать?
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35813850
dronNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так делаю (кстати, не только из-за размера журнала, но и блокировок меньше, и выполняется быстрее)

Разбиваю один UPDATE на много мелких, используя какой-нибудь критерий. примерно так

UPDATE DB2ADMIN.BAZA05A SET REGION='' WHERE REGION IS NULL and serial_num>=0 and serial_num <10000;
commit work;
UPDATE DB2ADMIN.BAZA05A SET REGION='' WHERE REGION IS NULL and serial_num>=10000 and serial_num <20000;
commit work;
UPDATE DB2ADMIN.BAZA05A SET REGION='' WHERE REGION IS NULL and serial_num>=20000 and serial_num <30000;
commit work;
итд

Вместо serial_num нужно подставить свое поле (проиндексированное). У меня serial_num - это ПК.

PS Autocommit включен, надеюсь? Если нет, то может все проще - поставить commit work после каждого UPDATE
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35814132
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Alex W.MidonowПодскажите,пож.что делать?Если вы никуда не спешите:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
create procedure huge_upd(
  sel_stmt varchar( 1024 )
, upd_stmt varchar( 1024 )
, comm_cnt int)
begin
  declare SQLCODE int;
  declare v varchar( 1024 );
  declare i int default  1 ;

  declare c1 cursor with hold for s;
  prepare s from sel_stmt;
  set upd_stmt = upd_stmt || ' where current of c1';
  open c1;
  fetch c1 into v;
  while SQLCODE!= 100  do
    execute immediate upd_stmt;
    if i=comm_cnt then 
      commit;
      set i= 1 ;
    else 
      set i=i+ 1 ;
    end if;
    fetch c1 into v;
  end while;
  commit;
end@

call huge_upd(
  'SELECT REGION FROM DB2ADMIN.BAZA05A WHERE REGION IS NULL for update of REGION'
, 'update DB2ADMIN.BAZA05A set REGION=''''',  1000 )@
...
call huge_upd(
  'SELECT S_ULICA FROM DB2ADMIN.BAZA05A WHERE S_ULICA IS NULL for update of S_ULICA'
, 'update DB2ADMIN.BAZA05A set S_ULICA=''''',  1000 )@
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35814221
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день Mark Barinstein!
Простите за дурацкий вопрос.
Приведенный Вами код прописать в SQL - запросе на шаге 3, вместо моего кода?
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35814301
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex W.MidonowПриведенный Вами код прописать в SQL - запросе на шаге 3, вместо моего кода?Сначала вы создаёте процедуру huge_upd. Эта процедура может быть использована для обновления одного строкового поля любой таблицы. Процедура будет коммитить изменения через каждые N записей (3-й параметр).
Использовать её можно на вашем шаге 3:
вместо:
Код: plaintext
1.
2.
3.
UPDATE DB2ADMIN.BAZA05A SET REGION='' WHERE REGION IS NULL;
...
UPDATE DB2ADMIN.BAZA05A SET S_ULICA='' WHERE S_ULICA IS NULL;
можно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
call huge_upd(
  'SELECT REGION FROM DB2ADMIN.BAZA05A WHERE REGION IS NULL for update of REGION'
, 'update DB2ADMIN.BAZA05A set REGION=''''',  1000 );
...
call huge_upd(
  'SELECT S_ULICA FROM DB2ADMIN.BAZA05A WHERE S_ULICA IS NULL for update of S_ULICA'
, 'update DB2ADMIN.BAZA05A set S_ULICA=''''',  1000 );
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35814401
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день Mark Barinstein!
Простите за еще один дурацкий вопрос.
"Сначала вы создаёте процедуру huge_upd..." Как это сделать? Куда ее поместить?
Если я правильно понял,я и в дальнейшем смогу ее использовать для других БД?
Обычно я делаю так:
ВАТ-файл
rem Вызов скрипта
erase ScrCall.log
DB2CMD.exe DB2SETCP.BAT DB2.EXE -fUP_BAZA.sql -t -lScrCall.log

где UP_BAZA.sql SQL-запрос ScrCall.log - сообщения ВАТ-файла
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35814423
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помещаете в файл crt_proc.ddl команды:
Код: plaintext
1.
2.
3.
4.
5.
6.
CONNECT TO CLI_BDR13 user db2admin using xxxxxxxx@

create procedure huge_upd(
...
end@

connect reset@
из db2cw вызываете:
Код: plaintext
db2 -td@ -vf crt_proc.ddl -z crt_proc.log
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35814475
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день Mark Barinstein!
Я Вам еще не надоел?
А как поместить в crt_proc.ddl команды?
Пож.если располагаете временем!
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35815172
Vladimir Kiselev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex W.Midonow,

это обычный текстовый файл. Выделите текст, создайте в любом редакторе файл и вставьте в него скопированный текст.
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35815177
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex W.MidonowА как поместить в crt_proc.ddl команды?С копируйте текст процедуры, который приведён на этой странице, в буфер обмена windows, создайте файл crt_proc.ddl (например, с помощью текстового редактора notepad) и вставьте в этот файл содержимое буфера обмена.
Вы умеете пользоваться буфером обмена в windows?
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35815263
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, если кому интересно.
Эту процедуру можно немного модифицировать на общий случай:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create procedure huge_upd(
  sel_stmt varchar( 1024 )
, upd_stmt varchar( 1024 )
, comm_cnt int)
begin
  declare SQLCODE int;
  declare dummy_var int;
  declare i int default  1 ;
  declare c1 cursor with hold for s;

  prepare s from sel_stmt;
  set upd_stmt = upd_stmt || ' where current of c1';
  open c1;
  fetch c1 into dummy_var;
  while SQLCODE!= 100  do
    execute immediate upd_stmt;
    if i=comm_cnt then 
      commit;
      set i= 1 ;
    else 
      set i=i+ 1 ;
    end if;
    fetch c1 into dummy_var;
  end while;
  commit;
  close c1;
end@
и, если все изменения в таблице можно сделать одним запросом, как в данном случае, то:
Код: plaintext
1.
2.
call huge_upd(
  'SELECT 1, REGION, ..., S_ULICA FROM DB2ADMIN.BAZA05A WHERE REGION IS NULL or ... or S_ULICA IS NULL FOR UPDATE OF REGION, ..., S_ULICA'
, 'UPDATE DB2ADMIN.BAZA05A SET (REGION, ..., S_ULICA)=('''', ..., '''')',  1 );
Идея в том, что для fetch необязательно указывать переменные для всех полей, возвращаемых селектом.
Но, чтобы fetch сработал, в нём мы должны указать хотя бы 1 переменную (dummy_var в данном случае), для чего на первом месте в селекте должна быть всегда какая-то int константа (или int выражение).
Поля, которые мы потом обновляем позиционным update, фетчить необязательно...
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35815782
dronNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Марк,
спасибо, пригодится! А удалять записи таким способом можно?
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35815912
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dronNNМарк,
спасибо, пригодится! А удалять записи таким способом можно?Можно.
Код: plaintext
call huge_upd('select 1 from some_table where <condition>', 'delete from some_table',  1000 );
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35816910
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Kiselev,
Добрый день Владимир.
А дальше-то что делать?
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35818894
Vladimir Kiselev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex W.Midonow,

Вам Марк уже ответил на Ваш вопрос:

из db2cw вызываете:
db2 -td@ -vf crt_proc.ddl -z crt_proc.log
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35820427
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день Vladimir Kiselev!
Если есть время,объясните пож.поподробнее.
Вот текстовым редактором(AkelPad) создал файл D:\ABM\Docs\BAT_SQL\crt_proc.ddl ,
туда скопировал через буфер обмена предложенную Марком процедуру. В БАТ_файле (в той же папке) прописал строку
db2 -td@ -vf crt_proc.ddl -z crt_proc.log
Запустил его - выдалось сообщение: произошла ошибка доступа к файлу crt_proc.log
Запустил
db2 -td@ -vf crt_proc.ddl
- выдалось сообщение: среда командной строки не инициализирована
Пож.поподробнее,как бы Вы поступили?
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35821381
Vladimir Kiselev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex W.Midonow,

> db2cw
> D:
> cd \ABM\Docs\BAT_SQL
> db2 -td@ -vf crt_proc.ddl
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35821888
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день Vladimir Kiselev.
Спасибо!Это то,что мне нужно!
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
    #35822657
Alex W.Midonow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Вопрос закрыт.Все получилось.Остается только сожалеть,что не в мою голову пришли эти идеи.
Всем спасибо!Особенно Mark Barinstein и Vladimir Kiselev!Спасибо!
C уважением,Александр В.Мидонов
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL0964C Журнал транзакций для базы данных заполнен. SQLSTATE=57011
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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