有的时候测试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部分一定要改成本地的数据库名,否则会将远程的数据库数据全部清空的
这里还要要强调一点,就是这各文件只是单纯地建表,并没有判断本地有没有我们自己建的同名的表,而且如果表有外键的话,添加数据是添加不进去的
所以我们要先添加数据再添加约束,我们可以先把数据导出来,再在4和5倒入数据命令,或者把这个文件分离,分成一部分建表,一部分添加约束.我这里采用后者,添加视图和约束的文件为batchkey.ddl,这个文件也需要有batch.ddl开始的1部分和结束的5部分,因为我们也需要先连接,做完操作后提交,断开…
这样,batch.ddl成为这种样子:
CONNECT TO 本地数据库;//注:连接到本地数据库
CREATE TABLE (//注:建立表和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,欢迎批评指正