关于拷贝数据库

有的时候测试batch需要查看本地log,所以在本地建立远程数据库的克隆版本成为必要的。

 

要在本地建立一个克隆数据库,我们可以直接在本地使用backup命令,可惜的是,这个backup生成的文件只能在远程的机器上生成。要在本地生成远程数据库的克隆版而不骚扰DBA,如何做到呢?

 

克隆无非是建表,添加数据,添加约束这3

 

所以我们可以按着这3步克隆一个远程数据库

 

建表:

 

1. 建立数据库

在本地建立一个数据库,多余的不说了

            2. 建立用户,建立schema

            在本地建立的数据库中建立远程要导入那些表的schema,建立一个用户,让他可以使用这些schema,建立用户名密码就是windows添加一个用户,如图

 

远程数据库

 

添加schema

 

添加用户

 

添加用户权限

 

让用户有建立的schema

将远程的数据库中需要的表生成ddl文件(ddl文件是可以一个文件表示多个表的),保管到本地,如图

 

一切按默认来:

 

保管到本地:

 

由于用远程的system,所以保管到本地是需要我们本地机器的用户名密码的,

随便写个用户,让他进来:

 

保管:

生成的batch.ddl包含

①     连接数据库命令:

connect to 远程数据库;

           

        调整表空间命令:

ALTER TABLESPACE SYSCATSPACE

      PREFETCHSIZE AUTOMATIC

      OVERHEAD 7.500000

      FILE SYSTEM CACHING

      TRANSFERRATE 0.060000;

 

        设定测试功能触发器命令

            SET CURRENT SCHEMA = "ISITECORE";

            CREATE FUNCTION XXXXX

 

        建表以及添加主键:

            CREATE TABLE "BFADMIN "."M_QUEUE" 

      ALTER TABLE "BFADMIN "."M_QUEUE"

      ADD PRIMARY KEY

            ("QUEUE_ID");

        创建view(视图)

      SET CURRENT SCHEMA = "BFADMIN ";

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","ISITECORE";

CREATE VIEW V_SUBMITTED_JOB

 

        添加外键及约束

      ALTER TABLE "BFADMIN "."T_KEYS"

      ADD CONSTRAINT "KEYNAME" FOREIGN KEY

            ("KEYNAME")

      REFERENCES "BFADMIN "."M_KEYS_SETTING"

            ("KEYNAME")

      ON DELETE NO ACTION

      ON UPDATE NO ACTION

      ENFORCED

      ENABLE QUERY OPTIMIZATION;

 

        提交并断开数据库

      COMMIT WORK;

 

 

CONNECT RESET;

 

 

TERMINATE;

PS:可能上面还有创建序列(sequence)命令,一定要保留

 

这一系列下来,一个远程的表应该被原原本本地克隆下来,但是我们本地有本地的规矩,例如我们不想调整我们本地的表空间,我就把2删掉,开始的1部分一定要改成本地的数据库名,否则会将远程的数据库数据全部清空的

      这里还要要强调一点,就是这各文件只是单纯地建表,并没有判断本地有没有我们自己建的同名的表,而且如果表有外键的话,添加数据是添加不进去的

 

      所以我们要先添加数据再添加约束,我们可以先把数据导出来,再在45倒入数据命令,或者把这个文件分离,分成一部分建表,一部分添加约束.我这里采用后者,添加视图和约束的文件为batchkey.ddl,这个文件也需要有batch.ddl开始的1部分和结束的5部分,因为我们也需要先连接,做完操作后提交,断开

 

      这样,batch.ddl成为这种样子:

     

      CONNECT TO 本地数据库;//注:连接到本地数据库

 

      CREATE TABLE "BFREPODB"."M_ADD"  (//注:建立表和sequence

              "CMPCD" CHAR(10) NOT NULL WITH DEFAULT '' ,

              "ADDCD" CHAR(10) NOT NULL WITH DEFAULT '' ,

                    

"ADDCLSCD" CHAR(5) NOT NULL WITH DEFAULT '' ,

              "CNYCD" CHAR(2) NOT NULL WITH DEFAULT '' ,

              "ZIPCD" CHAR(8) NOT NULL WITH DEFAULT '' ,

              "ADDLN1" CHAR(240) NOT NULL WITH DEFAULT '' ,

              "ADDLN2" CHAR(240) NOT NULL WITH DEFAULT '' ,

              "ADDLN3" CHAR(240) NOT NULL WITH DEFAULT '' ,

              "ADDLN4" CHAR(240) NOT NULL WITH DEFAULT '' ,

              "STRDT" DATE NOT NULL WITH DEFAULT '9998-12-31' ,

              "ENDDT" DATE NOT NULL WITH DEFAULT '9998-12-31' ,

              "CRTDATE" TIMESTAMP NOT NULL WITH DEFAULT CURRENT    

              "CRTUID" CHAR(20) NOT NULL WITH DEFAULT '' ,

              "UPDDATE" TIMESTAMP NOT NULL WITH DEFAULT CURRENT    

              "UPDUID" CHAR(20) NOT NULL WITH DEFAULT '' ,

              "DELFG" CHAR(1) NOT NULL WITH DEFAULT '' )  

             IN "USERSPACE1" ;

 

 

 

 

ALTER TABLE "BFREPODB"."M_ADD" //建立表主键

      ADD PRIMARY KEY

            ("CMPCD",

             "ADDCD",

             "STRDT");

COMMIT WORK;                  //提交,退出

 

 

CONNECT RESET;

 

 

TERMINATE;

 

PS:有一些是comment(注释),不用理会

 

      batchkey.ddl是这种样子:

     

      CONNECT TO 本地数据库;//注:连接到本地数据库

 

      SET CURRENT SCHEMA = "BFADMIN ";

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","ISITECORE";

CREATE VIEW V_SUBMITTED_JOB等等

 

ALTER TABLE "BFADMIN "."M_QUEUE" //建立视图

      ADD CONSTRAINT "IN_COMING_VALID" CHECK

            (STATUS_IN_COMING = '1' OR STATUS_IN_COMING = '0')

      ENFORCED

      ENABLE QUERY OPTIMIZATION;

 

COMMIT WORK;      //提交退出

 

 

CONNECT RESET;

 

 

TERMINATE;

 

最后, db2cmd启动db2命令行 , 进入c盘根目录,使用命令

 

db2 –tvf batch.ddl

将本地数据库的表全部建立

 

添加数据:

 

db2cmd启动db2命令行 , 使用命令

 

db2move 远程数据库名 export –u 远程用户名 –p 远程密码

 

将会在该路径下导出远程数据库表的所有数据

然后再在该路径下使用命令:

 

db2move 本地数据库名 import –u 本地用户名(包含需要schema的用户) –p 本地密码

 

将远程生成的数据导入到本地数据

 

添加约束:

 

收尾工作, db2cmd启动db2命令行 , 使用命令

 

db2 –tvf batchkey.ddl

将本地数据库的约束建立

 

 

            这样,一个远程数据库就被拷贝过来啦,既然已经拷贝到了本地,我们可以在本地作backup,再把backup文件分发给大家。

            Backup步骤

 

指定目录

 

之后一切默认,即可把backup文件导出

backup文件名一般这样:

数据库名.备份次数.节点名.XXX.XXX.日期时间.00N

 

backup文件分发给大家,让大家按此建立数据库:

上面的restore database一定要取文件的数据库名

 

路径取backup文件路径,下面时间一定要和backup绝对吻合

 

之后一切默认,即可

 

可能还有很多miss,欢迎批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值