Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Коллеги, я сам в основном MS SQL занимаюсь, но иногда приходится и в DB2 ковыряться. Подскажите, что не так с этим примитивным запросом? В скуле я просто пишу: Код: sql 1. 2. и оно РАБОТАЕТ. С учетом "чудес" синтаксиса DB2, пытаюсь запустить то же самое в ней: Код: sql 1. 2. 3. 4. 5. не работает. Говорит: Код: plaintext Что ей надо-то? Гугл и оф.сайт что-то не помогли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 10:56 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
А заодно, как объявить переменную, присвоить ей значение и вывести ее? Код: sql 1. 2. 3. Такая конструкция также не работает. Вроде абсолютно базовые комманды, но почему-то нужно с бубном танцевать чтобы они заработали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 11:27 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Мде... вижу, что вопросы слишком тупые, чтобы на них отвечать. :) Ну да ладно, все равно спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 12:03 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, Для понимания Вам необходимо подняться на уровень выше. Есть интерактивный DB2 CLP, в котором Вы можете выполнять запросы. В том числе и селекты. А есть процедурный SQL PL, который _совсем_ не Basic. И даже более того, бывает двух разных видов - Compiled и Inlined: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0004240.html http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0004239.html И вот там отдельно "висящий" select совсем неуместен. Это не язык интерактивной работы с базой. Кроме того, если Вы внимательно почитаете документацию, Вы не увидите возможности использовать селект в том контексте, который приводите: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0005655.html Надо - пользуйтесь отладчиком, модулем DBMS_OUTPUT ( http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/r0053551.html) + SET SERVER OUTPUT ( http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0053562.html) или обвязкой из внешнего языка (shell, PowerShell, ...). В последнем случае Вам будет полезна опция -x. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 15:34 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Спасибо CawaSPb. Но, как мне кажется, вы слишком глубоко копнули. Меня по сути интересовал синтаксис для организации цикла в DB2. Никаких процедур, функций или, боже упаси, того, на что вы мне дали ссылки, писать я и не собирался. Моя задача была до неприличия примитивной: в том же Toad'е написать простой скрипт, который в цикле делает insert - select из одной таблички в другую. Все! В MS SQL это можно сделать, например, как я и написал в первом сообщении (ну, понятно, что там еще можно добавить счетчик в цикл, чтобы он не был бесконечным и т.д. и т.п.) А вот из-за незнания особенностей синтаксиса и отсутствия опыта работы с DB2, там мне не удалось так просто решить эту задачу. Собственно вот... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 10:31 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, В db2 есть "простые" запросы, состоящие из одной команды, и "сложные", состоящие из нескольких команд, заключенных в BEGIN ... END (compiled compound) и BEGIN ATOMIC ... END (inlined compound). Если вы выполняете "простые" запросы в IBM Data Studio или командном процессоре DB2, то результаты SELECT печатаются автоматически. Если "сложные", то не печатаются. Для передачи выводных данных из "сложных" запросов можно использовать 2 подхода: 1. Временные таблицы Пример кода Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 2. Работа с процедурами модуля DBMS_OUTPUT (для тех клиентских программ, в которых сделана обработка буфера обмена) Программа должна делать следующее: - включать использование буфера сначала в сессии: call dbms_output.enable(null) - после вызова "сложной" команды или процедуры, где вызываются dbms_output.put* процедуры, выполнять автоматически dbms_output.get* процедуры для отображения того, что пользовательская команда могла поместить в буфер. Командный процессор DB2 умеет работать в режиме 2. Там, правда, обычно включают использование буфера командой SET SERVEROUTPUT ON. Умеет ли работать в режиме 2 TOAD, я не знаю. IBM Data Studio не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 11:53 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bmsСпасибо CawaSPb. Но, как мне кажется, вы слишком глубоко копнули. Меня по сути интересовал синтаксис для организации цикла в DB2. Никаких процедур, функций или, боже упаси, того, на что вы мне дали ссылки, писать я и не собирался. Моя задача была до неприличия примитивной: в том же Toad'е написать простой скрипт, который в цикле делает insert - select из одной таблички в другую. Все! В MS SQL это можно сделать, например, как я и написал в первом сообщении (ну, понятно, что там еще можно добавить счетчик в цикл, чтобы он не был бесконечным и т.д. и т.п.) А вот из-за незнания особенностей синтаксиса и отсутствия опыта работы с DB2, там мне не удалось так просто решить эту задачу. Собственно вот... Можно подумать, что люди рождаются со знанием диалекта MS SQL. Я вот так и не знаю, какую задачу вот этим "while 1=1 select top 1 from new table" вы решаете. Слова знакомые, а смысл не то, что ускользает - его просто не видно. Ни 20 лет работы с DB2, ни 15 с Oracle к этому не подготовили. Но всё равно, делать insert/select циклом должно быть и в MS SQL весьма глупым занятием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 18:08 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, А опишите задачу тогда. Что Вам нужно? Продублировать приходящие записи? (триггер или какое-либо репликационное решение) Перелить большую таблицу частями? А то я тоже, честно говоря, теряюсь, что хочется получить. Повторюсь, основная идея изложенного - select может встречаться не во всех контекстах. И это скорее вопрос к IDE. BTW Разные выполнения "SELECT * FROM NEW_TABLE FETCH FIRST 1 ROW ONLY" на одних и тех же данных могут давать разные результаты. Семантически - это вообще "дай мне не знаю какую строчку из таблицы". В реляционную модель вписывается очень слабо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2016, 19:00 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Коллеги, я прошу прощения за то, что сразу не объяснил, что мне нужно. Нужно было просто создать абсолютно любую таблицу и забить ее кучей абсолютно любых данных максимально простым способом. Я реально думал, что кто-то просто скинет скриптец а-ля вот этот или напишет что-то типа "поставь begin-end и точки с запятой после строк и все заработает, как есть": Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Тот select, что я привел был просто тупым примером, типа "вот такая конструкция в SQL работает, а в ДБ2 не очень. Ребята, как ее заставить работать?". Поэтому глубокого смысла в нем и не было. Просто потом бы я, конечно же, допилил скрипт до нормального (не бредового) состояния. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2016, 10:41 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, может такое что-то: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ну там дальше доточить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2016, 20:20 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Что-то вообще какая-то ерунда. База SAMPLE, стандартная. Настройки транзакционального лога: Код: plaintext 1. 2. Итого 386 Гигабайт. Делаю db2stop force, затем db2start. Кроме меня никто к БД не коннектится. Запускаю: Код: sql 1. через 10 секунд получаю: ERROR [57011] [IBM][DB2/AIX64] SQL0964C The transaction log for the database is full. Какого рожна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 15:08 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Посмотрел в исходной таблице, если поделить колическтво страниц данных на количество строк, получается 0.68 странички на строку, страница 8к, значит строка менее 6к. 500 000 строк по 6к, это менее 3Гб. Как 3 гигами данных можно за 10 секуннд забить журнал размером 386 Гб??? Бд НЕ в режиме архивирования логов. По идее после коммита или роллбэка лог должен очищаться. Ну а после рестарта и подавно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 15:14 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 15:22 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Вот что в диагностическом логе: ADM1823E The active log is full and is held by application handle "0-52". Terminate this application by COMMIT, ROLLBACK or FORCE APPLICATION. ZRC=0x85100009=-2062548983=SQLP_NOSPACE "Log File has reached its saturation point" DIA8309C Log file was full. Делаю и коммит и force application all и стоп-старт. Заново запускаю скрипт - менее 10 секунд - ошибка что лог переполнен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 15:41 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, на fs места достаточно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 15:51 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
m&nemperor_bms, на fs места достаточно? Filesystem GB blocks Free %Used Iused %Iused Mounted on /dev/lvTST0 799.50 568.51 29% 217 1% /db2path/rb052367/NODE0000 /dev/lvTST1 799.50 797.75 1% 87 1% /db2path/rb052367/NODE0001 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 15:58 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, покажите кусок db2diag.log за тот период, в который возникает ошибка и заодно db2 get db cfg for ххх | grep -i log ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 16:03 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
db2diag 2016-02-02-16.03.38.579944+180 E1112728A571 LEVEL: Warning PID : 34341008 TID : 10594 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 10594 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data management, sqldEscalateLocks, probe:3 MESSAGE : ADM5502W The escalation of "12684" locks on table "RB052367.BIG_TABLE3" to lock intent "X" was successful. 2016-02-02-16.03.44.890594+180 E1113300A625 LEVEL: Error PID : 34341008 TID : 10594 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 10594 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data protection services, sqlpgResSpace, probe:2860 MESSAGE : ADM1823E The active log is full and is held by application handle "0-90". Terminate this application by COMMIT, ROLLBACK or FORCE APPLICATION. 2016-02-02-16.03.44.891477+180 E1113926A590 LEVEL: Error PID : 34341008 TID : 10594 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 10594 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data protection services, sqlpgResSpace, probe:6666 MESSAGE : ZRC=0x85100009=-2062548983=SQLP_NOSPACE "Log File has reached its saturation point" DIA8309C Log file was full. 2016-02-02-16.03.44.892003+180 I1114517A588 LEVEL: Error PID : 34341008 TID : 10594 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 10594 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data protection services, sqlpWriteLR, probe:6680 MESSAGE : ZRC=0x85100009=-2062548983=SQLP_NOSPACE "Log File has reached its saturation point" DIA8309C Log file was full. 2016-02-02-16.04.28.604380+180 E1115106A861 LEVEL: Warning PID : 34341008 TID : 11107 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 11107 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data management, sqldEscalateLocks, probe:2 MESSAGE : ADM5500W The database manager is performing lock escalation. The affected application is named "db2bp", and is associated with the workload name "SYSDEFAULTUSERWORKLOAD" and application ID "*N0.rb052367.160202124940" at member "1". The total number of locks currently held is "12688", and the target number of locks to hold is "6344". Reason code: "1" 2016-02-02-16.04.28.605134+180 E1115968A571 LEVEL: Warning PID : 34341008 TID : 11107 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 11107 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data management, sqldEscalateLocks, probe:3 MESSAGE : ADM5502W The escalation of "12684" locks on table "RB052367.BIG_TABLE3" to lock intent "X" was successful. 2016-02-02-16.04.33.438981+180 E1116540A625 LEVEL: Error PID : 34341008 TID : 11107 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 11107 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data protection services, sqlpgResSpace, probe:2860 MESSAGE : ADM1823E The active log is full and is held by application handle "0-90". Terminate this application by COMMIT, ROLLBACK or FORCE APPLICATION. 2016-02-02-16.04.33.439788+180 E1117166A590 LEVEL: Error PID : 34341008 TID : 11107 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 11107 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data protection services, sqlpgResSpace, probe:6666 MESSAGE : ZRC=0x85100009=-2062548983=SQLP_NOSPACE "Log File has reached its saturation point" DIA8309C Log file was full. 2016-02-02-16.04.33.440241+180 I1117757A588 LEVEL: Error PID : 34341008 TID : 11107 PROC : db2sysc 1 INSTANCE: rb052367 NODE : 001 DB : SAMPLE APPHDL : 0-90 APPID: *N0.rb052367.160202124940 AUTHID : RB052367 HOSTNAME: rsb-dbcdpf1 EDUID : 11107 EDUNAME: db2agntp (SAMPLE) 1 FUNCTION: DB2 UDB, data protection services, sqlpWriteLR, probe:6680 MESSAGE : ZRC=0x85100009=-2062548983=SQLP_NOSPACE "Log File has reached its saturation point" DIA8309C Log file was full. db2 get db cfg for SAMPLE | grep -i log Log retain for recovery status = NO User exit for logging status = NO Catalog cache size (4KB) (CATALOGCACHE_SZ) = (MAXAPPLS*5) Log buffer size (4KB) (LOGBUFSZ) = 10000 Log file size (4KB) (LOGFILSIZ) = 393216 Number of primary log files (LOGPRIMARY) = 130 Number of secondary log files (LOGSECOND) = 110 Changed path to log files (NEWLOGPATH) = Path to log files = /db2path/rb052367/NODE0000/SQL00001/LOGSTREAM0000/ Overflow log path (OVERFLOWLOGPATH) = Mirror log path (MIRRORLOGPATH) = First active log file = 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) = 100 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) = OFF 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.02.2016, 16:30 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, Что выдает на rsb-dbcdpf1: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 17:34 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 17:45 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 18:23 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Хм.. а почему для 1 и 2 партиции значения параметров для транзакционных логов остались по умолчанию? В этом проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:19 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
emperor_bms, Посмотрите: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.partition.doc/doc/c0005829.html?lang=en ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:58 |
|
||
|
Не пойму, как работает WHILE
|
|||
|---|---|---|---|
|
#18+
knudsenemperor_bms, Посмотрите: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.partition.doc/doc/c0005829.html?lang=en Спасибо! А как все-таки подключатся к каждой партиции(ноде) в отдельности чтобы поправить DB CFG по одному? Не нашел в документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 11:23 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=39161710&tid=1600660]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 178ms |

| 0 / 0 |
