powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как почистить лог транзакций при удалении
13 сообщений из 13, страница 1 из 1
Как почистить лог транзакций при удалении
    #39841400
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при выполнении команды

Код: sql
1.
2.
delete from My_table
where MY_DATE > CAST('08.07.2019' AS DATE);



получаю ошибку
Lookup Error - DB2 Database Error: ERROR [57011] [IBM][DB2/NT64] SQL0964C The transaction log for the database is full.

кол-во удаляемых записей около 170 000
Как этот лог почистить или обойти ошибку?
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841441
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жалуется, что маленькие размеры журналов транзакций.
Запустите db2cmd и выполните команду:

Код: sql
1.
db2 get db cfg > bd.config



приложите bd.config.
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841481
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GuzyaЖалуется, что маленькие размеры журналов транзакций.
Запустите db2cmd и выполните команду:

Код: sql
1.
db2 get db cfg > bd.config



приложите bd.config.

при выполнении этой команды в файле всего одна строка
авторSQL1024N A database connection does not exist. SQLSTATE=08003
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841482
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
db2cmd запустила вбив ее в cmd.exe
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841506
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про соединение с БД забыл

Код: sql
1.
2.
3.
db2 connect to <БАЗА>
db2 get db cfg > bd.config
db2 connect reset
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841508
use-se
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
db2 get db cfg for <db_name> | find /i "log"
Нужно смотреть и читать про параметры:
LOGFILSIZ, LOGPRIMARY, LOGSECOND
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841512
maxkmn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ольга СеменоваКак ... обойти ошибку?

delete from My_tablewhere MY_DATE > CAST('08.07.2019' AS DATE) fetch first 10000 row only;

вместо 10000 можно подобрать подходящее значение эмпирически
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841552
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxkmnОльга СеменоваКак ... обойти ошибку?

delete from My_tablewhere MY_DATE > CAST('08.07.2019' AS DATE) fetch first 10000 row only;

вместо 10000 можно подобрать подходящее значение эмпирически

помогло - спасибо
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39841817
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга Семеноваmaxkmnпропущено...


delete from My_tablewhere MY_DATE > CAST('08.07.2019' AS DATE) fetch first 10000 row only;

вместо 10000 можно подобрать подходящее значение эмпирически

помогло - спасибо
Для понимания процесса:
"Лог транзакций" - журнал текущих операций. Если немного упрощённо, от первых существующих на текущий момент незакрытых транзакций и включая все последующие закрытые (committed или rolled back) и незакрытые.

Физически лог транзакций представлен набором файлов S#######.LOG заданного размера.
Количество файлов в журнале определяется параметрами базы LOGPRIMARY (постоянно аллокированных) + LOGSECOND (создаваемых по мере необходимости). В сумме LOGPRIMARY + LOGSECOND ограничиваются 256 файлами.
Размер каждого файла - LOGFILSIZ (в 4K страницах).
Это определяет максимально возможный размер пространства журналов транзакций.

Текущий лог транзакций необходим для операций rollback и recovery (восстановление консистентного состояния БД после сбоя/выключения рубильника).

Отсутствие/повреждение любого из текущих файлов транзакций "компрометирует" состояние данных - неизвестно, что менялось в БД в рамках отсутствующего/повреждённого журнала => СУБД считает всю базу corrupted и закрывает к ней доступ. Что-либо сделать в такой ситуации можно или утилитой db2dart (для offline вытаскивания данных из таблиц "как есть") или только с помощью поддержки IBM.

Как только все транзакции в наиболее старом журнале становятся закрытыми, файл журнала подлежит или удалению (переиспользованию после переименования) при circular logging, или перемещению в архив (archive logging).
В случае archive logging мы можем по журналам восстановить состояние БД на заданный момент времени (от имеющегося backup'а).

Размер пространства журналов должен быть сбалансирован.
Больший размер позволит провести большего размера транзакцию, но они могут потребовать большего времени на откат (что может быть недопустимо) и потребуется больше времени на операцию Recovery при поднятии БД после сбоя.


Ситуацию переполнения журналов может вызвать не только большая транзакция, но и забытая незакрытая транзакция.
Места в журналах она занимает мало, но "держит" все последующие журналы, не позволяя их архивировать.
Бороться с этим - "резать к чёртовой матери!" или выставить NUM_LOG_SPAN - пусть БД сама режет.

Альтернативы - использовать infinity logging, который позволяет архивировать активные журналы (со своими рисками) или ждать, когда IBM допилит экспериментальный Advanced Log Space Management, который может переносить старые мелкие транзакции в конец журнала.


Ну и да, большие транзакции дробить на части или проводить с помощью нелогируемых операций (когда это возможно, и понимая риски).
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39844413
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GuzyaПро соединение с БД забыл

Код: sql
1.
2.
3.
db2 connect to <БАЗА>
db2 get db cfg > bd.config
db2 connect reset



файл приложила. На какие параметры нужно смотреть и как их изменить чтобы не было ошибки переполнения лога транзакций?
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39844417
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
use-se
Код: plaintext
db2 get db cfg for <db_name> | find /i "log"
Нужно смотреть и читать про параметры:
LOGFILSIZ, LOGPRIMARY, LOGSECOND

Log retain for recovery status = NO
User exit for logging status = YES
Catalog cache size (4KB) (CATALOGCACHE_SZ) = 1000
Log buffer size (4KB) (LOGBUFSZ) = 2150
Log file size (4KB) (LOGFILSIZ) = 40000
Number of primary log files (LOGPRIMARY) = 128
Number of secondary log files (LOGSECOND) = 128
Changed path to log files (NEWLOGPATH) =
Path to log files = d:\data\my_db\NODE0
000\LOGSTREAM0000\
Overflow log path (OVERFLOWLOGPATH) =
Mirror log path (MIRRORLOGPATH) =
First active log file = S0007130.LOG
Block log on disk full (BLK_LOG_DSK_FUL) = NO
Block non logged operations (BLOCKNONLOGGED) = NO
Percent max primary log space by transaction (MAX_LOG) = 0
Num. of active log files for 1 active UOW(NUM_LOG_SPAN) = 0
Percent log file reclaimed before soft chckpt (SOFTMAX) = 520
HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC
HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = 0
HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0
First log archive method (LOGARCHMETH1) = DISK:H:\ARCHLOG\
Archive compression for logarchmeth1 (LOGARCHCOMPR1) = OFF
Options for logarchmeth1 (LOGARCHOPT1) =
Second log archive method (LOGARCHMETH2) = DISK:H:\ARCHLOG2\
Archive compression for logarchmeth2 (LOGARCHCOMPR2) = ON
Options for logarchmeth2 (LOGARCHOPT2) =
Failover log archive path (FAILARCHPATH) =
Number of log archive retries on error (NUMARCHRETRY) = 5
Log archive retry Delay (secs) (ARCHRETRYDELAY) = 20
Log pages during index build (LOGINDEXBUILD) = OFF
Log DDL Statements (LOG_DDL_STMTS) = NO
Log Application Information (LOG_APPL_INFO) = NO
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39844430
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не на той БД запросила лог
вот БД на которой сыпится ошибка лога при удалении данных в таблицах

db2 get db cfg for NFTG_DWH | find /i "log"
Log retain for recovery status = NO
User exit for logging status = YES
Catalog cache size (4KB) (CATALOGCACHE_SZ) = 300
Log buffer size (4KB) (LOGBUFSZ) = 2149
Log file size (4KB) (LOGFILSIZ) = 1024
Number of primary log files (LOGPRIMARY) = 13
Number of secondary log files (LOGSECOND) = 12
Changed path to log files (NEWLOGPATH) =
Path to log files = D:\data\my_db\DB2\
NODE0000\SQL00001\LOGSTREAM0000\
Overflow log path (OVERFLOWLOGPATH) =
Mirror log path (MIRRORLOGPATH) =
First active log file = S0023960.LOG
Block log on disk full (BLK_LOG_DSK_FUL) = NO
Block non logged operations (BLOCKNONLOGGED) = NO
Percent max primary log space by transaction (MAX_LOG) = 0
Num. of active log files for 1 active UOW(NUM_LOG_SPAN) = 0
Percent log file reclaimed before soft chckpt (SOFTMAX) = 0
HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC
HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(0)
HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0
First log archive method (LOGARCHMETH1) = DISK:E:\archlogs\
Archive compression for logarchmeth1 (LOGARCHCOMPR1) = OFF
Options for logarchmeth1 (LOGARCHOPT1) =
Second log archive method (LOGARCHMETH2) = OFF
Archive compression for logarchmeth2 (LOGARCHCOMPR2) = OFF
Options for logarchmeth2 (LOGARCHOPT2) =
Failover log archive path (FAILARCHPATH) =
Number of log archive retries on error (NUMARCHRETRY) = 5
Log archive retry Delay (secs) (ARCHRETRYDELAY) = 20
Log pages during index build (LOGINDEXBUILD) = OFF
Log DDL Statements (LOG_DDL_STMTS) = NO
Log Application Information (LOG_APPL_INFO) = NO
...
Рейтинг: 0 / 0
Как почистить лог транзакций при удалении
    #39844505
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ольга,

Вам надо понять, как DB2 работает с журналами транзакций. См. словесное описание выше.
Вот на картинке :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 LOGPRIMARY   = P
 LOGSECOND    = S
 LOGFILSIZ    = N (4 KB)
 
 LOG_SIZE_KB  = (N/4) * (P + S)

 NUM_LOG_SPAN = X * (P + S)
 X = {0, ..., 1}


| LOGPRIMARY|   | LOGSECOND |
  1   -   P      P+1  -  P+S  
|---|...|---| + |---|...|---|

  |.. <- T1
           |.....| <- T2
                         |..x <- T3
                            ^
                            |
                            LOG FULL
  |  NUM_LOG_SPAN |
                  ^
                  |
                  ROLLBACK T1

Тут приведена ситуация с незавершенными транзакциями при конечном размере журнала. По-умолчанию NUM_LOG_SPAN = 0 (отсутствие ограничений для транзакций).
Транзакция T1 началась в журнале 1, и пока она не завершится, журнал остается активным. Транзакция может изменить любое кол-во данных, суть от этого не меняется. Другие транзакции в это время пишут в следующие журналы, кол-во их растет, все они - активные. В конце концов все P + S журналов становятся активными, и возникает LOG FULL ситуация.
Бороться можно с этим 2-мя способами.
- Сделать журнал бесконечным (LOGSECOND = -1). Но тут вам может понадобиться бесконечное пространство для хранение архивных журналов. Ну и откат транзакций, если это потребуется, может идти значительно дольше - нужный активный файл надо сначала достать обратно из места с архивными журналами.
- Установить NUM_LOG_SPAN в какое-то <> 0 значение, например, 0.5 * (LOGPRIMARY + LOGSECOND). В этом случае, как только выяснится, что незакрытая транзакция простирается через кол-во журналов, большее чем в NUM_LOG_SPAN, то приложение, запустившее эту транзакцию, будет автоматически отключено, и транзакция откатится (при текущей позиции записи в журнал, указанной как ROLLBACK T1), что позволит журналу перестать быть активным. Желательно не устанавливать NUM_LOG_SPAN в значение, близкое к LOGPRIMARY + LOGSECOND, т.к. откат транзакции в общем случае не происходит мгновенно, и пока он не закончится, журнал не может стать неактивным. А другие транзакци могут успеть переполнить журнал в это время.

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


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