分享

db2move详解

 木木的阳光 2011-04-28
db2move   命令    
   
  db2move   <database-name>   <action>   [<option>   <value>]  
   
  首先,您必须指定数据库名(想要移动的表所在的数据库)和要执行的操作(export   和   import   或   load)。然后指定一个选项来定义操作的范围。例如,可以将一个操作限制在特定的表(-tn)、表空间(-ts)、表创建者(-tc)或模式名(-sn)范围内。指定表、表空间或表的创建者的一个子集只对   export   操作有效。如果指定多个值,就必须使用逗号将其分隔开;在值列表项之间不允许有空格。可以指定的项最多为   10   个。  
   
  另外,也可以指定   -tf   选项,此时要使用一个文件名作为参数,其中列出了要导出的表名;在该文件中,每行只能列出一个完整的表名。您还可以指定以下内容:  
   
  -io   import-option    
  指定   DB2   的   import   工具可以运行的一种模式。有效的选项有:   CREATE、   INSERT、   INSERT_UPDATE、   REPLACE   和   REPLACE_CREATE。缺省值为   REPLACE_CREATE。有关这些模式的更多内容,请参阅   DB2   的产品文档,可以从   DB2   技术支持获得这些文档。    
   
  -lo   load-option    
  指定   DB2   的   load   工具可以运行的一种模式。有效的选项有:INSERT   和   REPLACE。缺省值为   INSERT。   有关这些模式的更多内容,请参阅   DB2   的产品文档,可以从   DB2   技术支持获得这些文档。    
   
  -l   lobpaths    
  指定要创建或查找的   LOB   文件的位置。必须指定一个或多个绝对路径名。如果指定了多个绝对路径,就必须使用逗号将其分隔开;值之间不允许有空格。缺省值是当前目录。    
   
  -u   userid    
  指定一个用户   ID,该工具可以使用这个用户   ID   登录到远程系统上。    
   
  -p   password    
  指定对该用户进行认证的密码;该工具需要使用一个有效的用户   ID   和密码登录到远程系统上。
例子:
关于DB2MOVE的使用
主要是想修改表的SCHEMA和TABLESPACE
以前用DB2MOVE到过数据,不过觉得使用时有些限制。所以有时候还是自己写脚本来倒数。
这几天因为BI项目升级,测试的时候想重构数据库。主要是想修改表的SCHEMA和TABLESPACE
比较烦琐的方法是
1>在源系统上运行db2look生成DDL脚本。或者使用db2cc用图形界面生成脚本
2>修改script中关于schema和tablespace的信息
3>在目标系统上运行修改后的脚本
4>用sql生成export,import或load的批量脚本,进行数据迁移
5>实际操作中,使用load的时候可能会发生破坏表完整性约束的情况,需要执行set integrity for <tablename> immediate checked消除表check pending的状态。
现在再说说使用db2move实现的步骤,通常db2move的操作是在same schema情况下使用的。我以前一直这么理解。数据库这东西博大精深,平时工作中更多的上讲实现,能达到目的就行。很少去关注一些细节的问题,所以时常也因此走冤枉路。
1> db2move tkdw_rep export -sn tkpm62,批量导出
2>观察生成的文件,其中有个db2move.lst文件,内容如下:
!"TKPM62  "."OPB_ANALYZE_DEP"!tab1.ixf!tab1.msg!
我试着把内容改成
!"TKPM  "."OPB_ANALYZE_DEP"!tab1.ixf!tab1.msg!
“TKPM”是我在目标系统中的schema名称,我想看看这样能不能间接实现schema名称的转换
3> db2move rep7 import -u tkpm -p tkpm
成功了,跟我预想的一样。
不过有些不理想的地方,db2move时系统虽然会自动建表,但是也仅限于表,表上的视图和索引还需要自行创建)
所以需要在导完数据后,用脚本创建索引和视图,以及授权等操作。这样可以防止破坏表的完整性
 
还有中方式就是事先在目标库上建好对象,然后再导入数据
提示:不过测试中发现目标系统也会导入原系统关于索引的授权信息。虽然这些索引并没有在目标系统上创建,但是授权信息却被带到了目标库,比较疑惑!
TKPM有INDEX  TKPM62.OPB_ANAL_DEP_IDX的control权限,所以可能仅仅修改db2move.lst,只能简单的改变数据移植的某些属性,像源表上索引的授权信息好像没有像改schema这么简单。
为了安全期间,建议将那些垃圾权限清理掉。
DB2 windows版本,现在数据库表空间userspace1的容器所在的分区已满,无法向DB2中写数据;在另外一个较大的分区上建立一新的表空间,实现步骤
将当前数据库进行db2move,再将数据库进行删除,再重新建立同名的数据库,将container加大,再将数据导入
例子:
db2move gxkdb export -sn gxkdba -u gxkdba -p 123456 >gxk.log
db2move gxkdb import -io replace -u gxkdba -p 123456 >gxk.log

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多