powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / вопросы по переносу БД
13 сообщений из 13, страница 1 из 1
вопросы по переносу БД
    #36453237
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия db2 8.1.7.445
Вопросы:
1. db2look - при экспорте не выгружаются сиквенсы. Так должно работать или руки кривые?
2. db2move - при импорте в таблицу, в которой есть поля GENERATED ALWAYS, данные не импортируются. Как обойти? ТОЛЬКО использованием IMPORTа с параметром IDENTITYIGNORE для каждой таблицы?
3. насколько корректно переносятся данные с помощью стандартных утилит DB2(db2look и db2move)? Или лучше использовать инструменты сторонних производителей (хотябы для выгрузки структуры)? что посоветуете?
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36458841
Anka_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igor_kz, приходилось работать с db2look у него есть различные ключи вообщем то сносно позволяет сгененить код (ddl) для создания объекта например так db2look -d <NameDB> -t <NameTabl> -a -e -l -x -c -f
При экспорте из таблиц нужно следить за размерностью полей что бы не обрезалось содержимое
При импорте смотреть в лог который пишется при загрузке
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36459259
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Все еще непонятно, как перенести сиквенсы..
2. Нашел решение: на основе db2move.lst генерю скрипт "IMPORT FROM..." два раза для каждой таблицы, один с параметром MODIFIED BY IDENTITYIGNORE второй без параметра. Либо так либо так но данные заливаются...
DDL приходится править.. т.е. сначало создание таблиц в порядке зависимостей, потом процедур, потом данные заливаю, потом внешние связи... геморой полный..
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36460433
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igor_kz1. Все еще непонятно, как перенести сиквенсы..
Селект для генерации команд рестарта сиквенсов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select 'alter '||
case s.seqtype
  when 'S' then 'sequence "'||rtrim(seqschema)||'"."'||seqname||'"'
  else 'table "'||rtrim(c.tabschema)||'"."'||tabname||'" alter "'||c.colname||'"'
end
||' restart with '||char(s.nextcachefirstvalue)
from syscat.sequences s
left join (
     sysibm.sysdependencies d
join syscat.columns as c on c.tabschema = d.dschema and c.tabname = d.dname 
) on d.bname = s.seqname and d.bschema = s.seqschema 
and c.identity = 'Y' and d.dtype = 'T' and d.btype =  'Q' and s.seqtype = 'I';
Аналогично можно сгенерировать команды создания сиквенсов по syscat.sequences для seqtype='S' - там все их параметры есть.
igor_kz2. Нашел решение: на основе db2move.lst генерю скрипт "IMPORT FROM..." два раза для каждой таблицы, один с параметром MODIFIED BY IDENTITYIGNORE второй без параметра. Либо так либо так но данные заливаются...db2move действительно не может загружать таблицы с generate always полями.
Поэтому лучше генерировать самому скрипты с командами export / load, что-то типа такого:
Селекты генерации команд export / load
Код: 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.
-- generate series of export commands
select 
  'export to '||tabschema||'.'||tabname||'.ixf of ixf'
||coalesce(' modified by'||nullif(modified, ''), '')
||' select * from "'||tabschema||'"."'||tabname||'"'
from (
select rtrim(tabschema) tabschema, tabname
,
case when exists (select  1  from syscat.columns c where c.tabschema=t.tabschema and c.tabname=t.tabname and c.typename like '%LOB%') 
then ' lobsinfile' else '' end modified
from syscat.tables t
where type='T' and tabschema not like 'SYS%')
;

-- generate series of load commands
select 
  'load from '||tabschema||'.'||tabname||'.ixf of ixf'
||coalesce(' modified by'||nullif(modified, ''), '')
||' replace into "'||tabschema||'"."'||tabname||'"'
from (
select rtrim(tabschema) tabschema, tabname
,
case when exists (select  1  from syscat.columns c where c.tabschema=t.tabschema and c.tabname=t.tabname and c.typename like '%LOB%') 
then ' lobsinfile' else '' end
||
case when exists (select  1  from syscat.columns c where c.tabschema=t.tabschema and c.tabname=t.tabname and c.identity='Y') 
then ' identityoverride' else '' end
||
case when exists (select  1  from syscat.columns c where c.tabschema=t.tabschema and c.tabname=t.tabname and c.generated!='') 
then ' generatedignore' else '' end as modified
from syscat.tables t
where type='T' and tabschema not like 'SYS%')
;
После загрузки некоторые таблицы могут встать в check pending state (syscat.tables.status='C') и их из него надо будет выводить командой
set integrity for t1, ..., tN immediate checked
причём связанные таблицы (parent-child) должны быть перечислены в одной команде set integrity.
Загружать с identityignore не надо, а то оно присвоит значения само и не факт, что в том же порядке, как изначально, и если на эти identity поля будут ссылаться дочерние таблицы, то вы кашу получите...
igor_kzDDL приходится править.. т.е. сначало создание таблиц в порядке зависимостей, потом процедур, потом данные заливаю, потом внешние связи... геморой полный..У db2look есть ключ -ct - генерация команд создания объектов в порядке их создания.
Не помню, когда оно появилось, но на моей 8.1.17 она уже есть, как и возможность выгрузки команд создания сиквенсов (c ключом -e - получается).
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36476963
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Mark! Всетаки придется фикспаки качать...
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36479056
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скачнул фикспак 18-й, так это оказывается, СУБД полностью)) я то думал просто апдэйт.. в связи с чем вопросы:
как применить? снести старую db2, потом поставить которую скачал? или можно поверх?
с базами как быть? бэкапить потом восстанавливать?
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36479268
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark, установил db2 версии v8.1.18.980.
Но в опциях db2look нет ключа -ct.. странно..
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36482986
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
import from... - работает.

Запускаю load from...
Выдает ошибку(если указан полный путь к файлу):
Код: plaintext
1.
2.
3.
SQL3109N  Утилита начинает загружать данные из файла "C:\new_test\test.ixf".

SQL2036N  Недопустимый путь для файла или недопустимое устройство 
"C:\new_test\test.ixf".

если не полный:
Код: plaintext
SQL3025N  Неправильный параметр, задающий имя файла или путь.
что за параметры? где прописаны?
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36483488
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igor_kz,

про ключ -ct я вероятно ошибся, его действительно нет в v8.
Вы можете поставить v9 клиента и через него db2look с этим ключом запустить.

приведите полный вид команды load.
имейте ввиду, что по-умолчанию файлы с сервера берутся, если вы только load client не указываете.
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36485053
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark, спасибо! Действительно, с параметром <client> сработало!
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36485054
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Селект для генерации команд рестарта сиквенсов
select 'alter '||
case s.seqtype
  when 'S' then 'sequence "'||rtrim(seqschema)||'"."'||seqname||'"'
  else 'table "'||rtrim(c.tabschema)||'"."'||tabname||'" alter "'||c.colname||'"'
end
||' restart with '||char(s.nextcachefirstvalue)
from syscat.sequences s
left join (
     sysibm.sysdependencies d
join syscat.columns as c on c.tabschema = d.dschema and c.tabname = d.dname 
) on d.bname = s.seqname and d.bschema = s.seqschema 
and c.identity = 'Y' and d.dtype = 'T' and d.btype =  'Q' and s.seqtype = 'I';

s.nextcachefirstvalue - у меня во вьюшке нет такого поля.. нашел в таблице sysibm.syssequences поле lastassignedval, только значение в этом поле отличается от следующего генерируемого..
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36485065
igor_kz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark, а если отпарсить файл со структурой, и из создания таблиц убрать создание полей с GENERATED ALWAYS, т.е. было
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 CREATE TABLE "DB2ADMIN"."TEST"  (
		  "ID" BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (  
		    START WITH + 0   
		    INCREMENT BY + 1 
		    MINVALUE + 0   
		    MAXVALUE + 9223372036854775807   
		    NO CYCLE  
		    NO CACHE  
		    NO ORDER ) , 
		  "NAME" VARCHAR( 50 ) NOT NULL )   
		 IN "USERSPACE1" ; 
стало
Код: plaintext
1.
2.
3.
 CREATE TABLE "DB2ADMIN"."TEST"  (
		  "ID" BIGINT NOT NULL , 
		  "NAME" VARCHAR( 50 ) NOT NULL )   
		 IN "USERSPACE1" ; 
затем залить данные и затем alter table
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
alter table "DB2ADMIN"."TEST" alter column ID set GENERATED ALWAYS AS IDENTITY (  
		    START WITH + 0   
		    INCREMENT BY + 1 
		    MINVALUE + 0   
		    MAXVALUE + 9223372036854775807   
		    NO CYCLE  
		    NO CACHE  
		    NO ORDER );
затем restart with, соответственно.. Это как будет смотреться, в плане корректности? или не стоит так извращаться?
...
Рейтинг: 0 / 0
вопросы по переносу БД
    #36485633
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igor_kzs.nextcachefirstvalue - у меня во вьюшке нет такого поля.. нашел в таблице sysibm.syssequences поле lastassignedval, только значение в этом поле отличается от следующего генерируемого..
это поле имеет такое выражение:
Код: plaintext
1.
2.
3.
4.
5.
6.
case when a.lastassignedval + a.increment > maxvalue 
and a.increment >  0  
then case when a.cycle = 'Y' then a.minvalue else null end 
when a.lastassignedval + a.increment < a.minvalue 
and a.increment <  0  
then case when a.cycle = 'Y' then a.maxvalue else null end 
else coalesce(a.lastassignedval + a.increment, a.start) end
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / вопросы по переносу БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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