Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2786720
  • 博文数量: 423
  • 博客积分: 7770
  • 博客等级: 少将
  • 技术积分: 4766
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 11:58
个人简介

Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb

文章分类

全部博文(423)

文章存档

2019年(3)

2018年(6)

2017年(27)

2016年(23)

2015年(30)

2014年(16)

2013年(31)

2012年(73)

2011年(45)

2010年(14)

2009年(30)

2008年(30)

2007年(63)

2006年(32)

分类: DB2/Informix

2017-01-12 11:05:35


一、编目远程数据库

1、查看远程名数据库服务名
[db2inst4@db2-node01 ~]$ db2 get dbm cfg |grep SVCENAME
 TCP/IP 服务名称                              (SVCENAME) = 60000
 SSL 服务名称                             (SSL_SVCENAME) = 
[db2inst4@db2-node01 ~]$ 

2、在本地实列编目数据库
[db2inst1@db2 ~]$  db2 catalog tcpip node node_106 remote 108.88.3.106 server 60000
DB20000I  CATALOG TCPIP NODE 命令成功完成。
DB21056W  直到刷新目录高速缓存之后,目录更改才生效。


[db2inst1@db2 ~]$ db2 catalog db test as test106 at node node_106
DB20000I  CATALOG DATABASE 命令成功完成。
DB21056W  直到刷新目录高速缓存之后,目录更改才生效。

3、查看节点信息

[db2inst1@db2 ~]$ db2 LIST NODE DIRECTORY

 节点目录


 目录中的条目数 = 2


节点 1 条目:


 节点名                          = DB2
 注释                            =
 目录条目类型                    = LOCAL
 协议                            = TCPIP
 主机名                          = 127.0.0.1
 服务名称             = 50000


节点 2 条目:


 节点名                          = NODE_106
 注释                            =
 目录条目类型                    = LOCAL
 协议                            = TCPIP
 主机名                          = 108.88.3.106
 服务名称             = 60000

4、查看本地编目数据库
[db2inst1@db2 ~]$ db2 list db directory

 数据库别名                      = TANK
 数据库名称                      = TANK
 本地数据库目录                  = /home/db2inst1
 数据库发行版级别                = d.00
 注释                            =
 目录条目类型                    = 间接
 目录数据库分区号                = 0
 备用服务器主机名                =
 备用服务器端口号                =


数据库 6 条目:


 数据库别名                      = TEST106
 数据库名称                      = TEST
 节点名                          = NODE_106
 数据库发行版级别                = d.00
 注释                            =
 目录条目类型                    = 远程
 目录数据库分区号                = -1
 备用服务器主机名                =
 备用服务器端口号                =


[db2inst1@db2 ~]$ db2 connect to test106 user db2inst4 USING db2inst4


   数据库连接信息


 数据库服务器         = DB2/LINUXX8664 9.7.5
 SQL 授权标识         = DB2INST4
 本地数据库别名       = TEST106

[db2inst2@db2-node01 ~]$ 

TEST 源数据库节点运行生成测试数据:

db2 "create table DB2INST2.TABLEA(id integer,name char(10),salary integer)"
db2 "insert into DB2INST2.TABLEA values(1001,'SAM',10000)"
db2 "insert into DB2INST2.TABLEA values(1002,'PAM',9500)"
db2 "insert into DB2INST2.TABLEA values(1003,'CAM',12500)"
db2 "insert into DB2INST2.TABLEA values(1004,'RAM',7500)"
db2 "insert into DB2INST2.TABLEA values(1005,'HAM',20000)"


db2 "create table DB2INST2.TABLEB(id integer,name char(10),salary integer)"
db2 "insert into DB2INST2.TABLEB values(2001,'SAM',10000)"
db2 "insert into DB2INST2.TABLEB values(2002,'PAM',9500)"
db2 "insert into DB2INST2.TABLEB values(2003,'CAM',12500)"
db2 "insert into DB2INST2.TABLEB values(2004,'RAM',7500)"
db2 "insert into DB2INST2.TABLEB values(2005,'HAM',20000)"


db2 "create table FOO.TABLEC(id integer not null primary key,name char(10),salary integer)"
db2 "insert into FOO.TABLEC values(3001,'SAM',10000)"
db2 "insert into FOO.TABLEC values(3002,'PAM',9500)"
db2 "insert into FOO.TABLEC values(3003,'CAM',12500)"
db2 "insert into FOO.TABLEC values(3004,'RAM',7500)"
db2 "insert into FOO.TABLEC values(3005,'HAM',20000)"


db2 "create table FOO.TABLED(id integer,lastname char(10))"
db2 "ALTER TABLE FOO.TABLED ADD CONSTRAINT EMP_LNAME FOREIGN KEY (ID) REFERENCES FOO.TABLEC"
db2 "insert into FOO.TABLED values(3001,'MAS')"
db2 "insert into FOO.TABLED values(3002,'MAP')"
db2 "insert into FOO.TABLED values(3003,'MAC')"
db2 "insert into FOO.TABLED values(3003,'MAC')"
db2 "insert into FOO.TABLED values(3003,'MAC')"


二、导入方法一


1、采用load with cursor 方式

DB2 LOAD WITH CURSOR: 

[db2inst1@db2 ~]$  db2 connect to tank


   数据库连接信息


 数据库服务器         = DB2/LINUXX8664 9.7.5
 SQL 授权标识         = DB2INST1
 本地数据库别名       = TANK


[db2inst1@db2 ~]$ db2 "create table DB2INST2.TABLEA(id integer,name char(10),salary integer)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "drop table DB2INST2.TABLEA"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$  db2 connect to tank


   数据库连接信息


 数据库服务器         = DB2/LINUXX8664 9.7.5
 SQL 授权标识         = DB2INST1
 本地数据库别名       = TANK

[db2inst1@db2 ~]$ db2 "create table DB2INST1.MYTABLE(id integer,name char(10),salary integer)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 declare mycur cursor database TEST106 user db2inst4 using db2inst4 for select id,name,salary from db2inst2.tableA    
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$  db2 load from mycur of cursor insert into db2inst1.mytable
SQL3501W  由于禁用数据库正向恢复,因此表所驻留的表空间将
不被置于备份暂挂状态。


SQL3039W  可供 DATA BUFFER 的 LOAD 使用的内存禁止完全 LOAD
并行性。将使用装入并行性 "4"。


SQL3253N  实用程序正在开始通过 SQL 语句 " select id,name,salary
from db2inst2.tableA" 来从数据库 "TEST106" 装入数据。


SQL3500W  在时间 "2017-01-11 21:44:51.822168",实用程序在开始
"LOAD"。


SQL3519W  开始装入一致点。输入记录数 = "0"。


SQL3520W  “装入一致点”成功。


SQL3110N  实用程序已完成处理。从输入文件读了 "5" 行。


SQL3519W  开始装入一致点。输入记录数 = "5"。


SQL3520W  “装入一致点”成功。


SQL3515W  在时间 "2017-01-11 21:44:52.121959",实用程序已经完成了
"LOAD"。




读取行数         = 5
跳过行数         = 0
装入行数         = 5
拒绝行数         = 0
删除行数         = 0
落实行数         = 5

[db2inst1@db2 ~]$ db2 "select * from db2inst1.mytable"


ID          NAME       SALARY     
----------- ---------- -----------
       1001 SAM              10000
       1002 PAM               9500
       1003 CAM              12500
       1004 RAM               7500
       1005 HAM              20000


  5 条记录已选择。


[db2inst1@db2 ~]$ 

三、导入方法之-二

采用 DB2MOVE WITH COPY ACTION:


db2move COPY -sn -tf -co TARGET_DB user using MODE [DDL_AND_LOAD,DDL_ONLY,LOAD_ONLY] -u -p


1、采用db2move copy 仅导入数据

[db2inst1@db2 ~]$ db2 connect to tank


   数据库连接信息


 数据库服务器         = DB2/LINUXX8664 9.7.5
 SQL 授权标识         = DB2INST1
 本地数据库别名       = TANK


[db2inst1@db2 ~]$ db2 "create table DB2INST2.TABLEA(id integer,name char(10),salary integer)"
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "create table FOO.TABLEC(id integer not null primary key,name char(10),salary integer)"
DB20000I  SQL 命令成功完成。

[db2inst1@db2 ~]$ db2move TEST106 COPY -tn \"DB2INST2\".\"TABLEA\",\"FOO\".\"TABLEC\" -co TARGET_DB TANK user db2inst1 using db2inst1 MODE "LOAD_ONLY" -u db2inst4 -p db2inst4

Application code page not determined, using ANSI codepage 1208

*****  DB2MOVE  *****


Action:  COPY


Start time:  Wed Jan 11 21:49:59 2017

All table names matching:  "DB2INST2"."TABLEA"; "FOO"."TABLEC"; 
Connecting to database TEST106 ... successful!  Server : DB2 Common Server V9.7.5

Start Load Phase :

db2move finished successfully

Files generated:
-----------------
COPYSCHEMA.20170111214959.msg
LOADTABLE.20170111214959.MSG

Please delete these files when they are no longer needed.
[db2inst2@db2-node01 ~]$ db2 "SELECT * FROM FOO.TABLEC"


ID          NAME       SALARY     
----------- ---------- -----------
       3001 SAM              10000
       3002 PAM               9500
       3003 CAM              12500
       3004 RAM               7500
       3005 HAM              20000


  5 条记录已选择。

[db2inst1@db2 ~]$  db2 "SELECT * FROM FOO.TABLEC"


ID          NAME       SALARY     
----------- ---------- -----------
       3001 SAM              10000
       3002 PAM               9500
       3003 CAM              12500
       3004 RAM               7500
       3005 HAM              20000


  5 条记录已选择。


[db2inst1@db2 ~]$  db2 "SELECT * FROM DB2INST2.TABLEA"


ID          NAME       SALARY     
----------- ---------- -----------
       1001 SAM              10000
       1002 PAM               9500
       1003 CAM              12500
       1004 RAM               7500
       1005 HAM              20000


  5 条记录已选择。

2、采用db2move copy 使有指定导入表且仅导入数据


[db2inst1@db2 ~]$ more  tbname.txt 
"DB2INST2"."TABLEA"
 "FOO"."TABLEC" 
[db2inst1@db2 ~]$ 
[db2inst1@db2 ~]$ db2move TEST106 COPY -tf tbname.txt -co TARGET_DB TANK user db2inst1 using db2inst1 MODE "LOAD_ONLY" -u db2inst4 -p db2inst4

[db2inst1@db2 ~]$  more LOADTABLE.20170111220439.MSG
SQL3501W  由于禁用数据库正向恢复,因此表所驻留的表空间将
不被置于备份暂挂状态。
SQL3039W  可供 DATA BUFFER 的 LOAD 使用的内存禁止完全 LOAD
并行性。将使用装入并行性 "4"。

SQL3254N  实用程序正在开始从数据库 "TEST106" 中的表
""DB2INST2"".""TABLEA"" 装入数据。
SQL3500W  在时间 "2017-01-11 22:04:42.391733",实用程序在开始
"LOAD"。

SQL3519W  开始装入一致点。输入记录数 = "0"。
SQL3520W  “装入一致点”成功。
SQL3110N  实用程序已完成处理。从输入文件读了 "5" 行。
SQL3519W  开始装入一致点。输入记录数 = "5"。
SQL3520W  “装入一致点”成功。
SQL3515W  在时间 "2017-01-11 22:04:42.935579",实用程序已经完成了
"LOAD"。
SQL3501W  由于禁用数据库正向恢复,因此表所驻留的表空间将
不被置于备份暂挂状态。
SQL3039W  可供 DATA BUFFER 的 LOAD 使用的内存禁止完全 LOAD
并行性。将使用装入并行性 "4"。
SQL3254N  实用程序正在开始从数据库 "TEST106" 中的表 ""FOO    
"".""TABLEC"" 装入数据。
SQL3500W  在时间 "2017-01-11 22:04:43.419405",实用程序在开始
"LOAD"。
SQL3519W  开始装入一致点。输入记录数 = "0"。
SQL3520W  “装入一致点”成功。
SQL3110N  实用程序已完成处理。从输入文件读了 "5" 行。
SQL3519W  开始装入一致点。输入记录数 = "5"。
SQL3520W  “装入一致点”成功。
SQL3515W  在时间 "2017-01-11 22:04:43.638720",实用程序已经完成了
"LOAD"。
SQL3500W  在时间 "2017-01-11 22:04:43.639014",实用程序在开始
"BUILD"。
SQL3213I  建立索引方式为 "REBUILD"。
SQL3515W  在时间 "2017-01-11 22:04:43.829744",实用程序已经完成了
"BUILD"。

3、采用db2move copy schema 复制方式

[db2inst1@db2 ~]$ db2move TEST106 COPY -sn DB2INST2,FOO -co TARGET_DB TANK user db2inst1 using db2inst1 MODE "DDL_AND_LOAD" -u db2inst4 -p db2inst4
Application code page not determined, using ANSI codepage 1208
*****  DB2MOVE  *****
Action:  COPY
Start time:  Wed Jan 11 22:08:36 2017
All schema names matching:  DB2INST2; FOO; 
Connecting to database TEST106 ... successful!  Server : DB2 Common Server V9.7.5
**ERROR** SYSTOOLSPACE doesn't exist on the source database.
Rolled back all changes from the create phase (debuginfo:60).
db2move failed with -1 (debuginfo:220).
Files generated:
-----------------
COPYSCHEMA.20170111220836.msg
Please delete these files when they are no longer needed.
**Error occured -1
End time:  Wed Jan 11 22:08:37 2017
在源数据库检查是否存在:SYSTOOLSPACE 
[db2inst4@db2-node01 ~]$ db2 "create tablespace SYSTOOLSPACE"


DB21034E  该命令被当作 SQL


[db2inst4@db2-node01 ~]$ db2 list tablespaces


           当前数据库的表空间


 表空间标识                          = 0
 名称                                = SYSCATSPACE
 类型                                = 数据库管理空间
 内容                                = 所有持久数据。常规表空间。
 状态                   = 0x0000
   详细解释:
     正常


 表空间标识                          = 1
 名称                                = TEMPSPACE1
 类型                                = 系统管理空间
 内容                                = 系统临时数据
 状态                   = 0x0000
   详细解释:
     正常


 表空间标识                          = 2
 名称                                = USERSPACE1
 类型                                = 数据库管理空间
 内容                                = 所有持久数据。大型表空间。
 状态                   = 0x0000
   详细解释:
     正常


 表空间标识                          = 3
 名称                                = SYSTOOLSPACE
 类型                                = 数据库管理空间
 内容                                = 所有持久数据。大型表空间。
 状态                   = 0x0000
   详细解释:
     正常
再次执行

[db2inst1@db2 ~]$ db2move TEST106 COPY -sn DB2INST2,FOO -co TARGET_DB TANK user db2inst1 using db2inst1 MODE "DDL_AND_LOAD" -u db2inst4 -p db2inst4
Application code page not determined, using ANSI codepage 1208
*****  DB2MOVE  *****
Action:  COPY
Start time:  Wed Jan 11 22:16:19 2017
All schema names matching:  DB2INST2; FOO; 
Connecting to database TEST106 ... successful!  Server : DB2 Common Server V9.7.5
Copy schema DB2INST2 to DB2INST2 on the target database TANK
Copy schema FOO to FOO on the target database TANK
Create DMT :  "SYSTOOLS"."DMT_58763e33a1c87"
Start Load Phase :
db2move finished successfully
Files generated:
-----------------
COPYSCHEMA.20170111221619.msg
LOADTABLE.20170111221619.MSG
Please delete these files when they are no longer needed.
End time:  Wed Jan 11 22:16:30 2017
[db2inst1@db2 ~]$ 
[db2inst1@db2 ~]$ db2 "SELECT * FROM DB2INST2.TABLEA"


ID          NAME       SALARY     
----------- ---------- -----------
       1001 SAM              10000
       1002 PAM               9500
       1003 CAM              12500
       1004 RAM               7500
       1005 HAM              20000


  5 条记录已选择。


[db2inst1@db2 ~]$ db2 "SELECT * FROM DB2INST2.TABLEB"


ID          NAME       SALARY     
----------- ---------- -----------
       2001 SAM              10000
       2002 PAM               9500
       2003 CAM              12500
       2004 RAM               7500
       2005 HAM              20000


  5 条记录已选择。


[db2inst1@db2 ~]$ db2 "SELECT * FROM FOO.TABLEC"

ID          NAME       SALARY     
----------- ---------- -----------
       3001 SAM              10000
       3002 PAM               9500
       3003 CAM              12500
       3004 RAM               7500
       3005 HAM              20000


  5 条记录已选择。


[db2inst1@db2 ~]$ db2 "SELECT * FROM FOO.TABLED"


ID          LASTNAME  
----------- ----------
       3001 MAS       
       3002 MAP       
       3003 MAC       
       3003 MAC       
       3003 MAC       


  5 条记录已选择。


[db2inst1@db2 ~]$ 
4、采用db2move copy 先导DDL和后导入数据库方式
[db2inst1@db2 ~]$ db2 DROP TABLE DB2INST2.TABLEA
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 DROP TABLE DB2INST2.TABLEB
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 DROP TABLE FOO.TABLEC
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 DROP TABLE FOO.TABLED
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 DROP SCHEMA DB2INST2 RESTRICT
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 DROP SCHEMA FOO RESTRICT
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2move TEST106 COPY -sn DB2INST2,FOO -co TARGET_DB TANK user db2inst1 using db2inst1 MODE "DDL_ONLY" -u db2inst4 -p db2inst4
Application code page not determined, using ANSI codepage 1208
*****  DB2MOVE  *****
Action:  COPY
Start time:  Wed Jan 11 22:41:02 2017
All schema names matching:  DB2INST2; FOO; 
Connecting to database TEST106 ... successful!  Server : DB2 Common Server V9.7.5
Copy schema DB2INST2 to DB2INST2 on the target database TANK
Copy schema FOO to FOO on the target database TANK
Create DMT :  "SYSTOOLS"."DMT_587643ff130e2"

db2move finished successfully
Files generated:
-----------------
COPYSCHEMA.20170111224102.msg


Please delete these files when they are no longer needed.
End time:  Wed Jan 11 22:41:04 2017
[db2inst1@db2 ~]$ db2 "SELECT * FROM DB2INST2.TABLEA"
ID          NAME       SALARY     
----------- ---------- -----------


  0 条记录已选择。


[db2inst1@db2 ~]$ db2 "SELECT * FROM DB2INST2.TABLEB"
ID          NAME       SALARY     
----------- ---------- -----------


  0 条记录已选择。


[db2inst1@db2 ~]$ db2 "SELECT * FROM FOO.TABLEC"
ID          NAME       SALARY     
----------- ---------- -----------


  0 条记录已选择。
[db2inst1@db2 ~]$ db2 "SELECT * FROM FOO.TABLED"


ID          LASTNAME  
----------- ----------


  0 条记录已选择。
[db2inst1@db2 ~]$ more tbname.txt 
"DB2INST2"."TABLEA"
"DB2INST2"."TABLEB"
"FOO"."TABLEC" 
"FOO"."TABLED"
[db2inst1@db2 ~]$ db2move TEST106 COPY -tf tbname.txt -co TARGET_DB TANK user db2inst1 using db2inst1 MODE "LOAD_ONLY" -u db2inst4 -p db2inst4
Application code page not determined, using ANSI codepage 1208
*****  DB2MOVE  *****
Action:  COPY
Start time:  Wed Jan 11 22:45:30 2017
All table names matching:  
Connecting to database TEST106 ... successful!  Server : DB2 Common Server V9.7.5
Start Load Phase :
db2move finished successfully
Files generated:
-----------------
COPYSCHEMA.20170111224530.msg
LOADTABLE.20170111224530.MSG
Please delete these files when they are no longer needed.
End time:  Wed Jan 11 22:45:34 2017
[db2inst1@db2 ~]$ db2 "SELECT * FROM FOO.TABLED"


ID          LASTNAME  
----------- ----------
SQL0668N  不允许对表 "FOO.TABLED" 执行操作,原因码为 "1"。 
SQLSTATE=57016

[db2inst1@db2 ~]$ db2 -tsvf 123.sql 
EXPORT TO 345.sql OF DEL MODIFIED BY nochardel with gen(tabname, seq) as( select rtrim(tabschema) || '.' || rtrim(tabname) as tabname, row_number() over (partition by status) as seq from  syscat.tables WHERE status='C' ),r(a, seq1) as (select CAST(tabname as VARCHAR(3900)), seq from  gen where seq=1 union all select r.a || ','|| rtrim(gen.tabname), gen.seq from gen , r where (r.seq1+1)=gen.seq ), r1 as (select a, seq1 from r) select 'SET INTEGRITY FOR ' || a || ' IMMEDIATE CHECKED;' from r1 where seq1=(select max(seq1) from r1)
SQL0347W  递归公共表表达式 "DB2INST1.R" 可能包含无限循环。 
SQLSTATE=01605
SQL3104N  EXPORT 实用程序 正在开始将数据导出至文件 "345.sql"。
SQL3105N  Export 实用程序已经完成导出 "1" 行。

导出的行数:1

[db2inst1@db2 ~]$ more 345.sql 
SET INTEGRITY FOR FOO.TABLEC,FOO.TABLED IMMEDIATE CHECKED;
[db2inst1@db2 ~]$ db2 -tsvf 345.sql 
SET INTEGRITY FOR FOO.TABLEC,FOO.TABLED IMMEDIATE CHECKED
DB20000I  SQL 命令成功完成。
[db2inst1@db2 ~]$ db2 "SELECT * FROM FOO.TABLED"


ID          LASTNAME  
----------- ----------
       3001 MAS       
       3002 MAP       
       3003 MAC       
       3003 MAC       
       3003 MAC       
阅读(8749) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~