powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Не пойму, как работает WHILE
39 сообщений из 39, показаны все 2 страниц
Не пойму, как работает WHILE
    #39154312
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, я сам в основном MS SQL занимаюсь, но иногда приходится и в DB2 ковыряться.
Подскажите, что не так с этим примитивным запросом?

В скуле я просто пишу:
Код: sql
1.
2.
while 1=1 
select top 1 from new table


и оно РАБОТАЕТ. С учетом "чудес" синтаксиса DB2, пытаюсь запустить то же самое в ней:
Код: sql
1.
2.
3.
4.
5.
WHILE 1 = 1
DO
SELECT * FROM NEW_TABLE
FETCH FIRST 1 ROW ONLY
END WHILE


не работает. Говорит:
Код: plaintext
ERROR [42601] [IBM][DB2/AIX64] SQL0104N  An unexpected token "WHILE 1 = 1  DO" was found following "BEGIN-OF-STATEMENT".  Expected tokens may include:  "<space>".

Что ей надо-то? Гугл и оф.сайт что-то не помогли...
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39154331
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А заодно, как объявить переменную, присвоить ей значение и вывести ее?

Код: sql
1.
2.
3.
declare v_i INTEGER;
set v_i = 1;
select v_i



Такая конструкция также не работает. Вроде абсолютно базовые комманды, но почему-то нужно с бубном танцевать чтобы они заработали...
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39154377
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мде... вижу, что вопросы слишком тупые, чтобы на них отвечать. :)
Ну да ладно, все равно спасибо!
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39154706
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39156272
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо CawaSPb.
Но, как мне кажется, вы слишком глубоко копнули. Меня по сути интересовал синтаксис для организации цикла в DB2. Никаких процедур, функций или, боже упаси, того, на что вы мне дали ссылки, писать я и не собирался.
Моя задача была до неприличия примитивной: в том же Toad'е написать простой скрипт, который в цикле делает insert - select из одной таблички в другую. Все!
В MS SQL это можно сделать, например, как я и написал в первом сообщении (ну, понятно, что там еще можно добавить счетчик в цикл, чтобы он не был бесконечным и т.д. и т.п.) А вот из-за незнания особенностей синтаксиса и отсутствия опыта работы с DB2, там мне не удалось так просто решить эту задачу. Собственно вот...
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39156361
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
declare global temporary table session.tab1 as 
(select tabname from syscat.tables where tabschema='SYSCAT') 
definition only on commit preserve rows not logged@

begin
  declare SQLCODE int default 0;
  declare v_tabname varchar(128);

  -- это только пример цикла.
  -- в реальности, конечно, надо вместо этого использовать для работы с сессионной таблицей
  -- insert into session.tab1 select ...
  for c1 as  
    select tabname from syscat.tables where tabschema='SYSCAT' fetch first 5 rows only
  do
    set v_tabname=c1.tabname;
    insert into session.tab1 values c1.tabname;
    --call dbms_output.put_line(v_tabname);
  end for;  
end@

select * from session.tab1@


2. Работа с процедурами модуля DBMS_OUTPUT (для тех клиентских программ, в которых сделана обработка буфера обмена)
Программа должна делать следующее:
- включать использование буфера сначала в сессии: call dbms_output.enable(null)
- после вызова "сложной" команды или процедуры, где вызываются dbms_output.put* процедуры, выполнять автоматически dbms_output.get* процедуры для отображения того, что пользовательская команда могла поместить в буфер.

Командный процессор DB2 умеет работать в режиме 2. Там, правда, обычно включают использование буфера командой SET SERVEROUTPUT ON.
Умеет ли работать в режиме 2 TOAD, я не знаю.
IBM Data Studio не умеет.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39156840
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 весьма глупым занятием.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39156883
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emperor_bms,

А опишите задачу тогда. Что Вам нужно?
Продублировать приходящие записи? (триггер или какое-либо репликационное решение)
Перелить большую таблицу частями?

А то я тоже, честно говоря, теряюсь, что хочется получить.

Повторюсь, основная идея изложенного - select может встречаться не во всех контекстах. И это скорее вопрос к IDE.

BTW Разные выполнения "SELECT * FROM NEW_TABLE FETCH FIRST 1 ROW ONLY" на одних и тех же данных могут давать разные результаты.
Семантически - это вообще "дай мне не знаю какую строчку из таблицы". В реляционную модель вписывается очень слабо.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39157221
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, я прошу прощения за то, что сразу не объяснил, что мне нужно. Нужно было просто создать абсолютно любую таблицу и забить ее кучей абсолютно любых данных максимально простым способом. Я реально думал, что кто-то просто скинет скриптец а-ля вот этот или напишет что-то типа "поставь begin-end и точки с запятой после строк и все заработает, как есть":
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert into big_table 
WITH T (I) AS ( 
VALUES 1 
  UNION ALL 
SELECT I+1 
FROM T 
WHERE I<1000000) 
SELECT s.* 
FROM T, syscat.tablespaces s


Тот select, что я привел был просто тупым примером, типа "вот такая конструкция в SQL работает, а в ДБ2 не очень. Ребята, как ее заставить работать?". Поэтому глубокого смысла в нем и не было. Просто потом бы я, конечно же, допилил скрипт до нормального (не бредового) состояния.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39159276
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bms,

может такое что-то:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE TEST.DRUMS (FLD INTEGER);

INSERT INTO TEST.DRUMS
WITH A1 (FLD) AS ( SELECT FLD FROM TABLE(VALUES(1)) A0 (FLD)),
A2 (FLD) AS (
SELECT FLD FROM A1
UNION ALL 
SELECT FLD FROM A2)
SELECT A1.FLD FROM A2, A1 
WHERE A1.FLD=A2.FLD
FETCH FIRST 104535 ROWS ONLY;
 



ну там дальше доточить...
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161129
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то вообще какая-то ерунда. База SAMPLE, стандартная. Настройки транзакционального лога:
Код: plaintext
1.
2.
Log file size (4KB)                         (LOGFILSIZ) = 393216
Number of primary log files                (LOGPRIMARY) = 130
Number of secondary log files               (LOGSECOND) = 110

Итого 386 Гигабайт. Делаю db2stop force, затем db2start. Кроме меня никто к БД не коннектится.

Запускаю:
Код: sql
1.
insert into big_table3 select * from big_table fetch first 500000 rows only



через 10 секунд получаю:

ERROR [57011] [IBM][DB2/AIX64] SQL0964C The transaction log for the database is full.

Какого рожна?
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161134
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел в исходной таблице, если поделить колическтво страниц данных на количество строк, получается 0.68 странички на строку, страница 8к, значит строка менее 6к. 500 000 строк по 6к, это менее 3Гб. Как 3 гигами данных можно за 10 секуннд забить журнал размером 386 Гб??? Бд НЕ в режиме архивирования логов. По идее после коммита или роллбэка лог должен очищаться. Ну а после рестарта и подавно...
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161144
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
db2 get db cfg | grep -i '(logarchmeth'



Код: plaintext
1.
 First log archive method                 (LOGARCHMETH1) = OFF
 Second log archive method                (LOGARCHMETH2) = OFF
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161167
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что в диагностическом логе:

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 секунд - ошибка что лог переполнен.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161189
m&n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m&n
Гость
emperor_bms,

на fs места достаточно?
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161199
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161207
m&n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m&n
Гость
emperor_bms,

покажите кусок db2diag.log за тот период, в который возникает ошибка
и заодно db2 get db cfg for ххх | grep -i log
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161239
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161336
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bms,

Что выдает на rsb-dbcdpf1:

Код: plaintext
su - rb052367 -c "ulimit -Ha"
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161344
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) unlimited
pipe size            (512 bytes, -p) 64
stack size              (kbytes, -s) 2097152
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161376
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bms,
Код: sql
1.
2.
3.
4.
select dbpartitionnum, varchar(name, 20) name, varchar(value, 10) val, varchar(deferred_value, 10) d_val
from sysibmadm.dbcfg cfg 
where name in ('logfilsiz', 'logprimary', 'logsecond')
order by dbpartitionnum, name
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161674
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
DBPARTITIONNUM	NAME	VAL	D_VAL
0	logfilsiz	393216	393216
0	logprimary	130	130
0	logsecond	110	110
1	logfilsiz	1000	1000
1	logprimary	3	3
1	logsecond	10	10
2	logfilsiz	1000	1000
2	logprimary	3	3
2	logsecond	10	10

Хм.. а почему для 1 и 2 партиции значения параметров для транзакционных логов остались по умолчанию?
В этом проблема?
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161710
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161728
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 по одному? Не нашел в документации.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161893
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bms,

Можно использовать конструкцию <<+N< , вот напрмер:
Код: sql
1.
db2_all "<<+1< db2 UPDATE DB CFG FOR DBNAME USING LOGFILSIZ 393216"
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161920
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А то есть вариантов типа:
Код: sql
1.
2.
3.
4.
connect to node N 
connect to dbname at node N
attach to instancename at node N
...



Таких нет чтоли???
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39161945
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bms,

Да можно проще:
Код: sql
1.
 UPDATE DB CFG FOR DBNAME DBPARTITIONNUM 1 USING ....



http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001987.html?lang=en
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39162030
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... замечательно. А вот для
Код: sql
1.
get db cfg


такого ключа нет. Придется лезть в SYSIBMADM.DBCFG

Как-то вот все все-таки немного не по людски... не user friendly, так сказать...
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39162033
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну или db2_all пользовать...
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39162061
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот выкопал совет, как подключится к ноде. Надо мол каталогизировать базы таким образом:
Код: sql
1.
2.
db2 catalog db DBASE as DBASE1 at node DB2HOST1
db2 catalog db DBASE as DBASE2 at node DB2HOST2



Но вот незадача, а если партиции/ноды висят на одном хосте. Как вообще получить список нод с их именами?

Код: sql
1.
db2 list database directory 



выдает лишь партицию 0

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = SAMPLE
 Database name                        = SAMPLE
 Local database directory             = /db2path
 Database release level               = f.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

Код: sql
1.
db2 list nodes


выводит
Код: plaintext
1.
2.
3.
4.
DATABASE PARTITION NUMBER
----------------------------
                           0
                           1
                           2
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39162954
Фотография -_Михаил_-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emperor_bms (LOGFILSIZ) = 393216


В моей умной книжке стоит, что максимальный размер LOGFILSIZ состовляет 262 Гигабайта

Может конечно я и ошибаюсь
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39162987
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-_Михаил_-,

1.
UNIX
1000 [4 - 1 048 572] до - 4Gb
Windows
1000 [4 - 1 048 572]

2.

The upper limit of log file size, combined with the upper limit of the number of log files (logprimary + logsecond), gives an upper limit of 1024 GB of active log space.

http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.config.doc/doc/r0000239.html?cp=SSEPGG_9.7.0/2-2-6-7-63&lang=en

3.
The number of primary and secondary log files must comply with the following:

If logsecond has a value of -1, logprimary <= 256.
If logsecond does not have a value of -1, (logprimary + logsecond) <= 256.

http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.config.doc/doc/r0000240.html?cp=SSEPGG_9.7.0/2-2-6-7-67&lang=en
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39163912
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bms
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
DBPARTITIONNUM	NAME	VAL	D_VAL
0	logfilsiz	393216	393216
0	logprimary	130	130
0	logsecond	110	110
1	logfilsiz	1000	1000
1	logprimary	3	3
1	logsecond	10	10
2	logfilsiz	1000	1000
2	logprimary	3	3
2	logsecond	10	10

Хм.. а почему для 1 и 2 партиции значения параметров для транзакционных логов остались по умолчанию?
В этом проблема?
По-умолчанию при update db cfg параметры меняются на всех разделах одновременно. Но есть возможность менять только на нужном разделе, что, скорее всего, и сделали ранее.
Переполнение журнала у вас, судя по db2diag.log, было на разделе 1. Поэтому да, проблема была в этом.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39163932
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
knudsenemperor_bms,

Можно использовать конструкцию <<+N< , вот напрмер:
Код: sql
1.
db2_all "<<+1< db2 UPDATE DB CFG FOR DBNAME USING LOGFILSIZ 393216"

Такой командой мы изменим параметры на ВСЕХ разделах, а не на 1-ом, несмотря на то, что подключаемся мы в этом случае к разделу 1.
Если вдруг надо менять на одном разделе, то не важно, к какому разделу мы подключаемся, надо использовать кляузу DBPARTITIONNUM в команде.
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39164027
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bmsА вот выкопал совет, как подключится к ноде. Надо мол каталогизировать базы таким образом:
Код: sql
1.
2.
db2 catalog db DBASE as DBASE1 at node DB2HOST1
db2 catalog db DBASE as DBASE2 at node DB2HOST2



Но вот незадача, а если партиции/ноды висят на одном хосте. Как вообще получить список нод с их именами?
Это неправильный совет.
Вы можете подключтиться к любому разделу, если надо, но делать надо так.

Для подключений из командного процессора DB2
- С помощью set client
$ db2 set client connect_dbpartitionnum 3
$ db2 connect to my_db

- С помощью установки системной переменной DB2NODE
$ export DB2NODE=2
$ db2 terminate
$ db2 connect to my_db

Проверить, к какому вы подключены можно так:
$ db2 values current node


Для приложений ODBC/CLI/JDBC
Используется свойство соединения connectNode (см. доку, как устанавливать).
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39164043
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bms,

Про имена нод.

Их нет, db2 свои ноды никакими особенными именами не называет :)

Есть запрос на информацию, сколько их, на каких серверах они работают, какие логические порты имеют.
Код: sql
1.
2.
select * from table(DB_PARTITIONS())
select * from sysibmadm.db2_member -- доп. возможность, начиная с db2 10.1


То же самое примерно можно получить так с сервера:
Код: plaintext
$ cat ~${DB2INSTANCE}/sqllib/db2nodes.cfg
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39164140
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bmsХм... замечательно. А вот для
Код: sql
1.
get db cfg


такого ключа нет. Придется лезть в SYSIBMADM.DBCFG

Как-то вот все все-таки немного не по людски... не user friendly, так сказать...
В отличие от update db cfg, get db cfg выдает парметры для раздела, с которым вы соединены в данный момент.
Поэтому, если надо получить из командной строки значение парметра на определенном разделе, то для получения значения с диска (может отличаться от текущего):
Код: plaintext
$ db2_all "<<+ N < db2 get db cfg for mydb | grep LOGSECOND"
или текущего:
Код: plaintext
$ db2_all "<<+ N < db2 connect to mydb; db2 get db cfg | grep LOGSECOND; db2 connect reset"
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39164215
emperor_bms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinПо-умолчанию при update db cfg параметры меняются на всех разделах одновременно. Но есть возможность менять только на нужном разделе, что, скорее всего, и сделали ранее.
Переполнение журнала у вас, судя по db2diag.log, было на разделе 1. Поэтому да, проблема была в этом.
Хм... интересная информация. Спасибо большое, Марк, за все ответы, а то я уже думал, что никто не подскажет. Поделюсь и я своими изысканиями:
Я менял параметры БД из Toad. При этом он отображает параметры БД по-нодово , и там есть 2 вида отображения этих параметров: Tabbed view и side-by-side view. По умолчанию стоит Tabbed, то есть параметры каждой ноды на своей вкладке. Так вот когда меняешь параметры БД на ноде 0, при таком отображении, они меняются во всех вкладках, то есть как бы для всех нод. HO! На самом деле это не так!
Стоит только переключиться в режим side-by-side, в котором параметры всех нод отображаются одной табличкой, мы увидим, что изменения вступили в силу лишь на 0 ноде. Toad даже подсвечивает название параметра, который имеет различные значения на разных нодах. Преключаемся обратно в Tabbed и опять видим, что на всех нодах значения одинаковые. Вот такой вот баг в Toad for DB2 6.1.0.134. Я его отправил разработчикам, кстати.

Марк, а как по сообщениям в db2diag.log понять, что речь идет о 1ой ноде?
...
Рейтинг: 0 / 0
Не пойму, как работает WHILE
    #39164251
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emperor_bmsМарк, а как по сообщениям в db2diag.log понять, что речь идет о 1ой ноде?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Не пойму, как работает WHILE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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