Db2的常用命令和导入导出
db2命令介绍:
相比图形界面而言,使用命令行的命令可以节省很多内存资源。但是写的时候语法需要熟悉。
db2start:启动当前的DB2数据库管理实例。
db2stop:停止当前的数据库管理实例。停不了的话用: db2stop force 强制停止当前数据库管理实例
注:启动和关闭的是数据库管理实例,而不是单个的数据库,而restart database:并不是重新启动数据库,是平衡非正常结束而不一致状态的数据库,结束后,连接仍然存在。
db2look:能为表,索引,视图和诸如此类需要产生统计信息和数据定义语言(DDL)的对象产生需要的语句,以便重建数据库对象和/或更新统计信息。 DB2CLP下直接db2look,可看到选项。
例:db2look -d databasename -u -e -o xxx.sql(将此数据库里的所有表结构导出到xxx.sql )
db2look -d databasename -t biao -e -o xxx.sql(将数据库中一张表的表结构导出到xxx.sql)
db2move:db2移动数据的一个工具,可以在两个不同的db2数据库间移动数据,这两个DB2数据库可以在不同的服务器上,尤其是大量数据的表要转移的情况下,非常方便。 DB2CLP下直接db2move,可看到选项。
以下命令在“db2=>;”下键入“? Command”可以看到使用。
catalog:编目数据库或节点
uncatalog:删除已经编目的数据库或节点
这一对命令其实就实现了客户机配置辅助程序编目数据库的功能。
update:功能是更新数据库/数据库管理器配置参数,
更新命令行处理器设置和监控器的开关等。
connect:连接到一个数据库。
注:习惯显式的关闭连接。
attach:建立一个到实例的连接,执行实例级别的管理。
list:显示一些数据库对象或者设置的相关信息
get:获取一些数据库参数的设置和状态
runstats:运行统计,更新系统目录表中的信息。
backup:备份数据库
1、防止意外数据丢失或系统意外
2、重定向恢复实现整个数据库的迁移
3、AIX下的备份需要指定with n buffers 和 buffer size
restore:还原数据库
注:操作系统相同才可进行备份和恢复
force application:强行关闭应用程序或者连接
导入导出数据:
文件格式:
DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。常用
ASC:定长的ASCII文件,行按照行分割符分开,列定长。
PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。
WSF:工作表方式导入导出,不建议使用。
export:导出数据,支持IXF,DEL或WSF
import:导入数据,可以向表或者视图中导入数据,支持上面提到的4中文件。
注:当一个表中的主键被其他表引用为外键时,导入数据只能选APPEND,不能选替换。
load:导入数据,功能和import基本相同。支持以上说的4种格式。Load最大的缺点是变化没有记录日志,不能前滚恢复。
Load的工作步骤:
1、载入阶段:
把数据载入到表中
收集并存储索引
2、建立阶段
建立载入阶段收集的索引
3、删除阶段
把违反唯一键或主键约束的记录放到例外表中
删除违反主键和唯一键约束的记录
注:自动生成列数据导入问题。
Load完毕之后:
Load程序可以将表或者表所在的表空间处于挂起状态。
1、载入挂起:在载入阶段发生错误,表空间处于此状态
解决方法:
A:纠正错误后重新载入,将replace或者insert换成restart。将从失败处重新开始装载操作。
B:如果前面调用用了replace,则再使用replace做load。
C:用terminate选项终止load操作。
D:DBA撤消并重新建立表空间
E:从一个备份中恢复表空间(归档日志下才可以)。
2、删除挂起:在删除阶段发生错误,将一直处于删除挂起状态。
3、备份挂起:这种策略是强迫用户对目标表所在的数据库或者表空间做一个备份。如果load是使用了copy no选项,并且开启了归档日志,load完后将处于该状态。做一个备份就可以消除该状态。
4、检查挂起的表:当表上存在主键和唯一键之外的约束时,load完后表将处于该状态。包括以下情况:
外键约束—用来强制执行内容的完整性。
检查约束—用户定义的约束,检查合法性。
操作中引用了summary表,并且表设置的为refresh immediate。
可以使用如下命令解除该状态:
SET CONSTRAINTS FOR TABNAME IMMEDIATE CHECKED FOR EXCEPTION IN EXP_TABLE
load和import的不同:
1、load的目标表必须存在,而import不需要
2、load并不创建索引,只是在原来索引的基础上追加数据
3、最大区别在于性能区别,import每次插入一条,每行都要进行一次限制检查,日志用来记录变化,而load插入则快的多,每次读取数据构造页,然后直接输入到数据库。插入完页后,索引将重新建立,违反主键和唯一键限制的记录将被删除并保存到另一个扩展表中。
注:load技巧使用:大数据量删除。
Db2 下导出表结构及数据
su db2inst - 进入db2权限模式
任意建立一个文件夹子 mkdir data
进入文件夹子 cd data
导出表结构:使用db2look -d 库名 -e -z 用户名 -l -o exoa.sql
导出数据:使用db2move 库名 export
可使用以下命令查看: db2look -help or db2move -help
打包已导出的表结构与数据 tar zcvf 目录名.tar.gz 目录名/
在新的db2导入数据
创建数据库: db2 create db 库名
导入表结构操作:db2 -tvf 文件名.sql
导入数据操作:db2move 新建库名 load
导出表中数据
export to [path(例:D:\TABLE1.ixf)] of ixf select [字段(例: * or col1,col2,col3)] from TABLE1;
export to [path(例:D:\TABLE1.del)] of del select [字段(例: * or col1,col2,col3)] from TABLE1;
导入表的数据
import from [path(例:D:\TABLE1.ixf)] of ixf insert into TABLE1;
load from [path(例:D:\TABLE1.ixf)] of ixf insert into TABLE1;
load from [path(例:D:\TABLE1.ixf)] of ixf replace into TABLE1; // 装入数据前,先删除已存在记录
load from [path(例:D:\TABLE1.ixf)] of ixf restart into TABLE1; // 当装入失败时,重新执行
db2move 数据库名 load //进入到导出的ixf文件夹下面
并记录导出结果和错误信息
import from [path(例:D:\TABLE1.ixf)] of ixf savecount 1000 messages [path(例:D:\msg.txt)] insert into TABLE1;// 其中,savecount表示完成每1000条操作,记录一次.
存在自增长字段的数据导入:
load from [path(例:D:\TABLE1.ixf)] of ixf modified by identityignore insert into TABLE1;// 加入modified by identityignore.
解除装入数据时,发生的检查挂起.
SET INTEGRITY FOR TABLE1 CHECK IMMEDIATE