D B数据库导入导出 Revised final draft November 26, 2020
D B2数据导入导出
2012年3月12日
编辑:徐彦
一、环境
操作系统:RedhatLinuxAS5.5
(-128.el5PAE#1SMPi686i386GNU/Linux)
数据库版本:DB2WorkGroup版V9.7.0
(数据库版本可通过连接数据库来查看,db2connecttodbname)
二、声明
实例用户,默认为db2inst1
Das用户,默认为dasusr1
数据库安装目录($INSTHOME),默认为/opt/ibm/db2/V9.7
实例安装目录($HOME),默认为/home/db2inst1/
实例名:db2inst1
数据库名:
三、导出具体步骤
3.1导出对象结构
建议单独创建一个数据导出目录,利于导出文件整理的清晰。
$su–db2inst1
#切换至db2inst1用户
$cd/
#
$db2connectto
#连接至数据库
$db2look–d
#导出数据库对象创建脚本
例子:
数据库名为meibof
3.2导出数据库数据
(建议在
db2move
(如果导出是发现有warning,在上面的命名后面加上-aw参数)
以数据库名为meibof为例:
四、导入具体步骤
4.1建立新数据库
$su–db2inst1
#切换至db2inst1用户
db2createdb
创建名为meibof的数据库:
4.2执行
切换到放置
db2–tvf
(单次导入有可能丢失数据结构,建议连续执行3次,导入完成后,和开发人员确认数据库对象的数量,尤其是存储过程。)
4.3导入数据
切换到放置db2move导出数据的目录
db2move
4.4一致性检查
原理:如果发现有表存在检查挂起状态(由于检查约束的原因),则输入命令如下
db2setintegrityforschema.tablenameimmediatechecked将其转换成正常状态。
首先利用sql语句得到要检查的表的执行语句
主要命令:
db2"select'db2setintegrityfor
以数据库名meibof,SCHEMA名meibof为例:
查出有14张表需要转换成正常状态。
在上一条语句末加上>filename.sh把要添加的sql语句添加到脚本文件
如下例:
用vi文本编辑器打开脚本文件:
1)在第一行加入连接数据库sql语句;
2)在最后一行加入commit命令,db2commit
执行完后再次检查发现没有需要更正的:
说明:如果还有需要更正的表,则反复执行上述操作。
五、附录
5.1db2look用法
db2look版本8.2db2look:生成DDL以便重新创建在数据库中定义的对象语法:db2look-dDBname[-e][-uCreator][-zSchema][-tTname1Tname2...TnameN][-twTname][-h][-oFname][-a][-m][-c][-r][-l][-x][-xd][-f][-fd][-tdx][-noview][-iuserID][-wpassword][-vVname1Vname2...VnameN][-wrapperWrapperName][-serverServerName][-nofed]
db2look-dDBname[-uCreator][-s][-g][-a][-tTname1Tname2...TnameN][-p][-oFname][-iuserID][-
wpassword]db2look[-h]
-d:数据库名称:这必须指定
-e:抽取复制数据库所需要的DDL文件此选项将生成包含DDL语句的脚本可以对另一个数据库运行此脚本以便重新创建数据库对象此选项可以和-m选项一起使用-u:创建程序标识:若-u和-a都未指定,则将使用$USER如果指定了-a
选项,则将忽略-u选项-z:模式名:如果同时指定了-z和-a,则将忽略-z联合部分的模式名被忽略-t:生成指定表的统计信息可以指定的表的数目最多为30-tw:为名称与表名的模式条件(通配符)相匹配的表生成DDL当指定了-tw选项时,-t选项会被忽略-v:只为视图生成DDL,当指定了-t时将忽略此选项-h:更详细的帮助消息-o:将输出重定向到给定的文件名如果未指定-o选项,则输出将转到stdout-a:为所有创建程序生成统计信息如果指定了此选项,则将忽略-u选项-m:在模拟方式下运行db2look实用程序此选项将生成包含SQLUPDATE语句的脚本这些SQLUPDATE语句捕获所有统计信息可以对另一个数据库运行此脚本以便复制初始的那一个当指定了-m选项时,将忽略-p、-g和-s选项-c:不要生成模拟的COMMIT语句除非指定了-m或-e,否则将忽略此选项将不生成CONNECT和CONNECTRESET语句省略了COMMIT。在执行脚本之后,需要显式地进行落实。-r:不要生成模拟的RUNSTATS语句缺省值为RUNSTATS。仅当指定
了-m时,此选项才有效-l:生成数据库布局:数据库分区组、缓冲池和表空间。-x:如果指定了此选项,则db2look
实用程序将生成授权DDL对于现有已授权特权,不包括对象的原始定义器-xd:如果指定了此选项,则db2look实用程序将生成授权DDL对于现有已授权特权,包括对象的原始定义器-f:抽取配置参数和环境变量如果指定此选项,将忽略-wrapper和-server选项-fd:为opt_buffpage和opt_sortheap以及其它配置和环境参数生成db2fopt语句。-td:将x指定为语句定界符(缺省定界符为分号(;))应该与-e选项一起使用(如果触发器或者SQL例程存在的话)-p:使用明文格式-s:生成postscript文件此选项将为您生成postscript文件当设置了此选项时,将除去所有latex和tmpps文件所需的(非IBM)软件:LaTeX和dvips注意:文件psfig.tex必须在LaTeX输入路径中-g:使用图形来显示索引的页访存对必须安装Gnuplot,并且
LaTeX排版:latexfilename.tex以获得filename.dvi
示例:db2look-dDEPARTMENT-uwalid-e-odb2look.sql
--这将生成由用户WALID创建的所有表和联合对象的DDL语句--db2look输出被发送到名为db2look.sql的文件中
示例:db2look-dDEPARTMENT-zmyscm1-e-odb2look.sql
--这将为模式名为MYSCM1的所有表生成DDL语句--还将生成$USER创建的所有联合对象的DDL。--db2look输出被发送到名为db2look.sql的文件中
示例:db2look-dDEPARTMENT-uwalid-m-odb2look.sql
--这将生成UPDATE语句以捕获关于用户WALID创建的表/昵称的统计信息--db2look输出被发送到名为db2look.sql 的文件中
示例:db2look-dDEPARTMENT-uwalid-e-wrapperW1-odb2look.sql--这将生成由用户WALID创建的所有表的DDL语句--还将生成适用于包装器W1的用户WALID所创建所有联合对象的DDL--db2look输出被发送到名为db2look.sql的文件中
示例:db2look-dDEPARTMENT-uwalid-e-serverS1-odb2look.sql
--这将生成由用户WALID创建的所有表的DDL语句--还将生成适用于服务器S1的用户WALID所创建所有联合对象的DDL--db2look输出被发送到名为db2look.sql的文件中
5.2db2move用法
db2move
首先,您必须指定数据库名(想要移动的表所在的数据库)和要执行的操作(export和import或load)。然后指定一个选项来定义操作的范围。例如,可以将一个操作限制在特定的表(-tn)、表空间(-ts)、表创建者(-tc)或模式名(-sn)范围内。指定表、表空间或表的创建者的一个子集只对export操作有效。如果指定多个值,就必须使用逗号将其分隔开;在值列表项之间不允许有空格。可以指定的项最多为10个。
Export同时会导出建表命令!另外,也可以指定-tf选项,此时要使用一个文件名作为参数,其中列出了要导出的表名;在该文件中,每行只能列出一个完整的表名。您还可以指定以下内容:-ioimport-option指定DB2的import工具可以运行的一种模式。有效的选项有:CREATE、INSERT、INSERT_UPDATE、REPLACE和REPLACE_CREATE。缺省值为REPLACE_CREATE。有关这些模式的更多内容,请参阅DB2的产品文档,可以从DB2技术支持获得这些文档。-loload-option指定DB2的load工具可以运行的一种模式。有效的选项有:INSERT和REPLACE。缺省值为INSERT。有关这些模式的更多内容,请参阅DB2的产品文档,可以从DB2技术支持获得这些文档。-llobpaths指定要创建或查找的LOB 文件的位置。必须指定一个或多个绝对路径名。如果指定了多个绝对路径,就必须使用逗号将其分隔开;值之间不允许有空格。缺省值是当前目录。-uuserid指定一个用户ID,该工具可以使用这个用户ID登录到远程系统上。-ppassword指定对该用户进行认证的密码;该工具需要使用一个有效的用户ID和密码登录到远程系统上。
db2move是DB2数据转移命令,用于不同操作系统之间(如linux和windows)的数据转移.
可以先用db2moveexport将数据导出,然后在另一个DB2里用db2moveimport或db2moveload导入数据.
导出方法:
建立一个空文件夹,进入该文件夹使用
db2moveMydatabaseexport导出数据.
导入方法:
进入导出的文件夹,输入命令db2moveNewdbload
实际操作中,使用load的时候可能会发生破坏表完整性约束的情况,需要执行setintegrityfor
immediatechecked消除表checkpending的状态。
不过有些不理想的地方,db2move时系统虽然会自动建表,但是也仅限于表,表上的视图和索引还需要自行创建)所以需要在导完数据后,用脚本创建索引和视图,以及授权等操作。这样可以防止破坏表的完整性。