justdba
作者justdba·2013-04-16 19:32
数据库管理员·ccit

db2跨平台数据迁移

字数 3425阅读 2680评论 0赞 2
##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') 


#============验证



如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广