db2数据库不同实例导出导入


DB2不同实例相同数据库名的数据库复制方法


在linux中安装了DB2两个实例db2inst1和db2inst2,现在要将实例中db2inst1的testdb数据库复制到db2inst2中的testbd数据库,下面具体的实现步骤:

--------------------db2inst1--------------------------------

  1. 在db2inst1上创建并进入数据备份存放目录

     $ mkdir /home/backup/mydata   --创建目录
     $ chown -R 777 /home/backup/mydata  --目录授权
     $ cd /home/backup/mydata --进入目录
    
  2. 导出数据库表结构

     $ db2look -d <dbname> -e -a -x -i <username> -w <password> -o data.sql
     或 
     $ db2look -d <db2name> -e -a -x -i <username> -w <password> -o data.sql
     例如:
     $ db2look -d testdb -e -a -x -i db2inst1 -w qwert12345 -o testdb.sql
     
     参数说明:
      -d:数据库名称,必须指定
      -e:提取复制数据库所需的DDL文件
      -a:为所有创建者生成统计信息
      -x:生成授权语句DDL,不包含对象的原始定义者
      -i:登录数据库所在服务器的用户ID
      -w:登录数据库所在服务器的密码
      -o:将输出重定向到给定的文件名
     编辑得到的DDL文件
     使用db2look得到的DDL文件无法直接使用,因为其中存在一些与当前系统相关的特殊信息,所以需要对该文件进行编辑。共有几个方面:
     1.去掉文件头、尾的指令:
     	connect to testdb:
     	.........
     	commit work;
     	connect reset:
     	terminate;
     	位于这几句指令之间的就是定义该数据库的DDL语句,去掉这几句话让这个文件变成一个纯粹的DDL文件,另外,有时候很容易发生DB2指令执行错误,将四句指令放到文件外手动执行更有助troubleshooting(故障排除)
     2.去掉scheme name.
     	在本案例中scheme name是db2inst1.因为在进行异种平台的数据移动的时候会发生scheme name的变化,最常见的就是从unix类系统迁移到windows平台的时候,它缺省的schema name分别为db2inst1,db2admin1.
     3.去掉全部引号
      	此经验主要来自Oracle,一个object,定义它的时候,使用了引号与没有使用引号是两个不同的object.
     4.去掉create table语句中指定的tablespace
     	这个原因与2类似,在数据移动的过程中,tablespace name发生变化是很经常的事情,所以不要指定,让(不同的)系统自己决定。有一点非常重要,需要强调,若存在比较大的字段,就必须创建pagesize比较大的bufferpool,在创建一个tablespace使用该bufferpool.
    
  3. 导出数据库数据(导出指定的数据库中的全部数据)

     语法:
     $ db2move <dbname> export -u <username> -p <password>
     示例:
     $ db2move testdb export -u db2inst1 -p qwert12345
     说明:
     	dbname:数据库名称
     	-u:登录数据库的用户id
     	-p:登录数据库的用户密码
     1.这将会把数据库testdb中的全部数据提取到当前目录(/home/backup/mydata)中,每个表的内容都存储在一个.ixf文件中.每个.ixf文件都有一个与之相对应的.msg文件,.msg文件是描述从表中导出的数据时的信息。另外还两个文件,db2move.lst用来记录.ixf文件、.msg文件与表的一一对应关系,EXPORT.out记录的是导出数据时的屏幕输出信息
     2.将db2move.lst对应关系文件中的实例名db2inst1修改为db2inst2,系统SYSTOOLS的可以不调整
     	修改前:
     	!"SYSTOOLS"."HMON_ATM_INFO"!tab1.ixf!tab1.msg!
     	!"SYSTOOLS"."HMON_COLLECTION"!tab2.ixf!tab2.msg!
     	!"DB2INST1"."MYTABLE"!tab3.ixf!tab3.msg!
     	!"SYSTOOLS"."POLICY"!tab4.ixf!tab4.msg!
     	!"DB2INST1"."STUDENT"!tab5.ixf!tab5.msg!
     	!"DB2INST1"."TEST"!tab6.ixf!tab6.msg!
     	修改后:
     	!"SYSTOOLS"."HMON_ATM_INFO"!tab1.ixf!tab1.msg!
     	!"SYSTOOLS"."HMON_COLLECTION"!tab2.ixf!tab2.msg!
     	!"DB2INST2"."MYTABLE"!tab3.ixf!tab3.msg!
     	!"SYSTOOLS"."POLICY"!tab4.ixf!tab4.msg!
     	!"DB2INST2"."STUDENT"!tab5.ixf!tab5.msg!
     	!"DB2INST2"."TEST"!tab6.ixf!tab6.msg!
    

--------------------db2inst2--------------------------------
4. 创建数据库(在实例db2inst2中)

	1.创建数据testdb:db2 create db dbname on 存放路径 using codeset 字符编码 territory 地区
		$ db2 create db testdb on '/home/db2inst2' using codeset UTF-8 territory CN
  1. 连接数据库

     $ db2 connect to testdb user db2inst2 using qwert12345
    
     2.创建一个pagesize为16k的bufferpool,名为mybigpool:(此步可省略)
     	$ db2 create bufferpool mybigpool immediate size 1000 pagesize 16k
     3.创建一个tablespace使用上面创建bufferpool,名为mybigspace:(此步可省略)
     	$ db2 "create regular tablespace mybigspace pagesize 16k managed by system using ('/home/db2inst2/db2inst2/NODE0000/SQL00004/SQLT0001.0') extentsize 16 overhead 12.67 prefetchsize 16 transferrate 0.18 bufferpool mybigpool dropped table recovery off" 
      	
     	注释:
     		extentsize,overhead, prefetchsize,transferrate这几个参数与所使用的的服务器有关
    
  2. 导入表结构

     db2 -tvf data.sql 
     注:(t:代表终止语句字符,v:回送当前命令,f:读取输入文件)
    
  3. 导入数据

     语法:
     $ db2move <dbname> import -u <username> -p <password>
     示例:
     $ db2move testdb export -u db2inst2 -p qwert12345
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值