|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
при выполнении команды Код: sql 1. 2.
получаю ошибку Lookup Error - DB2 Database Error: ERROR [57011] [IBM][DB2/NT64] SQL0964C The transaction log for the database is full. кол-во удаляемых записей около 170 000 Как этот лог почистить или обойти ошибку? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 14:04 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
Жалуется, что маленькие размеры журналов транзакций. Запустите db2cmd и выполните команду: Код: sql 1.
приложите bd.config. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 14:58 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
GuzyaЖалуется, что маленькие размеры журналов транзакций. Запустите db2cmd и выполните команду: Код: sql 1.
приложите bd.config. при выполнении этой команды в файле всего одна строка авторSQL1024N A database connection does not exist. SQLSTATE=08003 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 15:51 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
db2cmd запустила вбив ее в cmd.exe ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 15:53 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
Про соединение с БД забыл Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:42 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
Код: plaintext
LOGFILSIZ, LOGPRIMARY, LOGSECOND ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:43 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
Ольга СеменоваКак ... обойти ошибку? delete from My_tablewhere MY_DATE > CAST('08.07.2019' AS DATE) fetch first 10000 row only; вместо 10000 можно подобрать подходящее значение эмпирически ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:46 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
maxkmnОльга СеменоваКак ... обойти ошибку? delete from My_tablewhere MY_DATE > CAST('08.07.2019' AS DATE) fetch first 10000 row only; вместо 10000 можно подобрать подходящее значение эмпирически помогло - спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 17:46 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
Ольга Семенова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, который может переносить старые мелкие транзакции в конец журнала. Ну и да, большие транзакции дробить на части или проводить с помощью нелогируемых операций (когда это возможно, и понимая риски). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2019, 11:44 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
GuzyaПро соединение с БД забыл Код: sql 1. 2. 3.
файл приложила. На какие параметры нужно смотреть и как их изменить чтобы не было ошибки переполнения лога транзакций? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 09:17 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
use-se Код: plaintext
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 09:22 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
не на той БД запросила лог вот БД на которой сыпится ошибка лога при удалении данных в таблицах 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 09:37 |
|
Как почистить лог транзакций при удалении
|
|||
---|---|---|---|
#18+
Ольга, Вам надо понять, как 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.
Тут приведена ситуация с незавершенными транзакциями при конечном размере журнала. По-умолчанию 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, т.к. откат транзакции в общем случае не происходит мгновенно, и пока он не закончится, журнал не может стать неактивным. А другие транзакци могут успеть переполнить журнал в это время. Всё написанное здесь вам надо хорошо понять. Только вы можете после этого решить, как поступить в вашей системе. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 11:15 |
|
|
start [/forum/topic.php?fid=43&fpage=4&tid=1600242]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
94ms |
get tp. blocked users: |
2ms |
others: | 296ms |
total: | 468ms |
0 / 0 |