##db2跨平台数据迁移
db2v9.5->db2v9.7
aix 6.1->linux 5.5
ixf文件仅包含表和索引的定义不包含约束的定义
db2move+db2look工具迁移
#===========计算迁移空间
select sum(DATA_OBJECT_L_SIZE+INDEX_OBJECT_L_SIZE+LONG_OBJECT_L_SIZE+LOB_OBJECT_L_SIZE+XML_OBJECT_L_SIZE)/1024 as MB
from SYSIBMADM.ADMINTABINFO where TABSCHEMA in ('OWK','UF')
call GET_DBSIZE_INFO (?,?,?,0) --数据库总空间 DATABASESIZE/1024/1024/1024 GB
#===========导出
#迁移模式下指定模式下所有表结构和数据
db2move ptss export -sn OWK,UF --sn 导出指定schema下所有表数据
#lobs导出
#【注意】需确定指定模式下是否包含其它模式下的序列,如包含,应该将全库DDL导出,找出所有sequence DDL
#查询所有sequence的以一个顺序号 序列较大需改‘char(nextval for’处char函数的大小
select 'select ''alter sequence '||seqschema||'.'||seqname||' restart with '' || char(nextval for '||seqschema||'.'||seqname||')||'';'' from sysibm.sysdummy1 ;'
from syscat.SEQUENCES where (seqschema not like '%SYS%' or seqschema not like '%IBM%') and seqtype<>'I'
and seqschema in ('OWK','UF') --范围可变
--生成seq_inc.ddl
#查询所有自增列的以一个顺序号 序列较大需改‘char(nextval for’处char函数的大小
select 'alter table '||a.TABSCHEMA||'.'||a.TABNAME||' alter '||b.COLNAME||' restart with '||char(int(b.nextcachefirstvalue))||';' from SYSCAT.COLUMNS a,SYSCAT.COLIDENTATTRIBUTES b
where a.TABSCHEMA not like 'SYS%' and a.IDENTITY='Y'
and a.TABSCHEMA=b.TABSCHEMA and a.TABNAME=b.TABNAME and a.COLNAME=b.COLNAME
and a.TABSCHEMA in ('OWK','UF') --范围可变
--生成iden_inc.ddl
检查导出结果more EXPORT.out
#导出除表结构外的DDL(索引、触发器、序列)
db2look -d ptss -e -z OWK -o ptss_ddl_owk.db2
db2look -d ptss -e -z UF -o ptss_ddl_uf.db2
#===========ftp二进制传输
#============导入
#对导入库进行全库冷备
mkdir -p /var/backup/db2/db2inst3/ptss/fuloff_20130416
quiesce db immediate
force application all
db2 terminate
db2 connect to ptss
backup db ptss to /var/backup/db2/db2inst3/ptss/fuloff_20130416 --停库冷备
unquiesce db
#修改ptss_ddl.db2的登录用户
connect to dbname user usr_db2name using 123456
新建用户无法执行DDL的创建?
db2 grant dbadm on database to user usr_ptss
#替换ptss_ddl.db2的表空间名称
#创建表结构DDL
db2 -tvf ptss_ddl_uf.db2 > ptss_ddl_uf.log
db2 -tvf ptss_ddl_owk.db2 > ptss_ddl_owk.log
#查看ptss_ddl.log日志,出错进行还原
db2 restore db PTSS from /var/backup/db2/db2inst3/ptss/fuloff_20130416/ taken at 20130418071828 replace existing without rolling forward
#导入数据
db2move ptss import -io insert --默认-io replace_create
或
db2move ptss load -sn OWK,UF -io insert --需备份表空间或全库备份或取消pending操作
检查导入结果more IMPORT.out
#含identity列的表的导入
一般的identity列导出时含restart with,不需处理
但是sequence导出时不含restart with,需要手工处理!
/*
db2move不支持含always identity列的表的导入,只能通过load单独导入
--always
load from tab4.ixf of ixf modified by identityoverride insert into tabschema.tabname --仅支持load
--default 推荐使用
import from tab4.ixf of ixf modified by identityignore insert into tabschema.tabname --数据文件含自增列,import/load忽略该值
import from tab4.ixf of ixf modified by identitymissing insert into tabschema.tabname --数据文件不含自增列,import/load
/*
如出现重复值问题,请采用更改表定义start with方法解决或通过alter restart
select max(colname) as maxnum from tabname
alter table tabname alter colname restart with maxnum+1
*/
*/
load导入后检查表的pending状态
#sequence和自增列导入后的序号调整
执行seq_inc.ddl 和 iden_inc.ddl
#lobs导入
#回收指定权限对dbadm不起作用
select 'revoke '||case when PRIVILEGE='REFERENCE' then 'REFERENCES'
else PRIVILEGE end
||' on '||OBJECTTYPE||' '||OBJECTNAME||' from user '||AUTHID from SYSIBMADM.PRIVILEGES where authid in 'USR_NAME'
and objectschema not in ('OWK','UF')
#============验证
添加新评论0 条评论