首页 > 代码库 > DB2常用命令
DB2常用命令
DB2常用命令
一、基础篇
1、db2 connect to <数据库名> --连接到本地数据库名
db2 connect to <数据库名> user <用户名> using <密码> --连接到远端数据库
2、 db2 force application all --强迫所有应用断开数据库连接
3、db2 backup db db2name<数据库名称> --备份整个数据库数据,db2 restore db <db2name> --还原数据库
4、db2 list application --查看所有连接(需要连接到具体数据库才能查看)
5、db2start --启动数据库,db2stop --停止数据库
6、create database <数据库名> using codeset utf-8 territory cn --创建数据库使用utf-8编码
7、db2 catalog 命令
db2 catalog tcpip node <接点名称> remote <远程数据库地址> server <端口号> --把远程数据库映射到本地接点一般为50000
db2 catalog db <远程数据库名称> as <接点名称> at node pub11 --远程数据库名称到本地接点
db2 connect to <接点名称> user <用户名> using <密码> --连接本地接点访问远程数据库
8、数据库导出
db2look -d <数据库名> -u <用户> -e -o <脚本名称>.sql --导出数据库的表结构,其中用户空间一般为db2admin/db2inst1
db2look -d <数据库名> -u <用户> -t <表1> <表2> -e -o <脚本名称>.sql --导出数据库中表1和表2的表结构
db2look -d uibs -u db2inst1 -e -o /home/db2inst1/uibsddl2013821.sql
db2move <数据库名> export --导出数据库数据
db2move uibs export /home/db2inst1/uibs20130906.sql
db2move <数据库名> export -tn <表1>,<表2> --导出数据库中表和表数据
9、数据库导入
db2 -tvf <脚本名称>.sql --把上述导出的表结构导入到数据库表结构
db2move <数据库名> load -lo replace --把上述“db2move <数据库名> export “导出的数据导入到数据库中并把相同的数据替换掉
在实际使用过程中,如果用到db2自增主键,需要使用by default, 而不是always,功能是一样的,但这样在数据移植时候会很方便!
10、db2 connect reset 或 db2 terminate --断开与数据库的连接
11、db2set db2codepage=1208 --修改页编码为1208
12、db2 describe table <表名> --查看表结构
13、db2 list tables --查看数据库中所有表结构
14、db2 list tablespaces --列出表空间
15、fetch first 10 rows only --列出表中前10条数据
16、db2 describe indexes for table paccount show detail --查看表索引
17、db2 "select * from paccount" > e:pacountdata.txt --查询结果重定向
18、select nextval for MACCESSJNLNO from sysibm.sysdummy1; --查询序列的值
select prevval for ereceiptnumseq from sysibm.sysdummy1;
例如:select * from <表名> fetch first 10 rows only
一、加载数据:
1、 以默认分隔符加载,默认为“,”号
db2 "import from puser.txt of del insert into puser"
2、 以指定分隔符“|”加载
db2 "import from puser.txt of del modified by coldel| insert into puser"
db2 "import from e:/rule.txt of del insert into rule"
二、卸载数据:
1、 卸载一个表中全部数据
db2 "export to puser.txt of del select * from puser"
db2 "export to puser.txt of del modified by coldel| select * from puser"
2、 带条件卸载一个表中数据
db2 "export to puser.txt of del select * from puser where brhid=‘907020000‘"
db2 "export to cmmcode.txt of del select * from cmmcode where codtp=‘01‘"
三、查询数据结构及数据:
db2 "select * from puser"
db2 "select * from puser where brhid=‘907020000‘ and oprid=‘0001‘"
db2 "select oprid,oprnm,brhid,passwd from puser"
四、删除表中数据:
db2 "delete from puser where brhid=‘907020000‘ or brhid=‘907010000‘"
五、修改表中数据:
db2 "update svmmst set prtlines=0 where brhid=‘907010000‘ and joww=‘02‘"
六、联接数据库
db2 connect to spdb
七、清除数据库联接
db2 connect reset 断开数据库连接
db2 terminate 断开数据库连接
db2 force applications all 断开所有数据库连接
数据库优化命令:
reorg、runstats
当数据库经过一段时间使用,数据空间会变得越来越庞大。一些delete掉的数据仍存放在数据库中,占用数据空间,影响系统性能。因此需要定期运行reorg、runstats命令,清除已delete的数据,优化数据结构。
db2 reorg table 表名
db2 runstats on table 表名 with distribution and indexes all
因为要优化的表比较多,所以在/ww/bin目录下提供了一个sh程序runsall,可在当天业务结束后,运行runsall,对数据库进行优化。
关于db2move的使用
以前用db2move到过数据,不过觉得使用时有些限制。所以有时候还是自己写脚本来倒数。这几天因为bi项目升级,测试的时候想重构数据库。主要是想修改表的schema和tablespace,比较烦琐的方法是
1>在源系统上运行db2look生成ddl脚本。或者使用db2cc用图形界面生成脚本;
2>修改script中关于schema和tablespace的信息;
3>在目标系统上运行修改后的脚本;
4>用sql生成export、import或load的批量脚本,进行数据迁移;
5>实际操作中,使用load的时候可能会发生破坏表完整性约束的情况,需要执行set integrity for <tablename> immediate checked消除表check pending的状态;
现在再说说使用db2move实现的步骤,通常db2move的操作是在same schema情况下使用的。
db2move uibs export -u db2inst1 -p db2inst1
db2move r_uibs export -u db2inst1 -p db2inst1
批量导出
观察生成的文件,其中有个db2move.lst文件,内容如下:
!"tkpm62 "."opb_analyze_dep"!tab1.ixf!tab1.msg!
我试着把内容改成
!"tkpm "."opb_analyze_dep"!tab1.ixf!tab1.msg!
“tkpm”是我在目标系统中的schema名称,我想看看这样能不能间接实现schema名称的转换
db2move uibs import -u ww -p yangyang
成功了,跟我预想的一样。
不过有些不理想的地方,运行db2move时系统虽然会自动建表,但是也仅限于表,表上的视图和索引还需要自行创建)
所以需要在导完数据后,用脚本创建索引和视图,以及授权等操作。这样可以防止破坏表的完整性。
db2的备份(backup)和恢复(restore)数据库方法
一、备份(backup)数据库
1、离线全备份
1)、首先确保没有用户使用db2:
db2 list applications for db sample
2)、停掉数据库并重新启动,以便断掉所有连接:
db2stop force
db2start
3)、执行备份命令:(使用tsm作为备份的介质)
db2 backup db sample use tsm
备份成功,将会返回一个时间戳。
4)、检查备份成功:
db2 list history backup all for sample 可以看到多了这个备份的纪录。
db2adutl query 命令也可以看到返回值。
5)、备注:
首先对主节点(catalog表空间在的节点)执行备份命令,再对另外的节点也做这个操作。
2、 在线备份:
1)、首先打开一下支持在线备份的数据库配置参数:
db2 update db cfg for sample using userexit on 启用用户出口
db2 update db cfg for sample using logretain on 启用归档日志
db2 update db cfg for sample using trackmod on 启用增量备份功能
(需要各个node都分别做设置)
开启这些参数后,数据库处于backup pending状态,要求做数据库的离线全备份。做一下离线全备份,参考上面的命令。
2)、在线备份命令如下:
db2 backup db sample online use tsm
备份成功,返回一个时间戳。
3)、同样可以用db2adutl 和db2 list history察看备份纪录。
4)、备注:
同样,对每个节点都做这个操作。
3、 在线增量备份
1)、在开启了必须的三个参数的情况下,做增量备份:
db2 backup db sample online incremental use tsm
备份成功,返回一个时间戳。
2)、同样可以用db2adutl 和db2 list history察看备份纪录。
3)、还有一种delta的备份:
db2 backup db sample online incremental delta use tsm
这两种备份的区别,类似oracle exports的incremental和cumulative方式,db2的incremental对应oracle的cumulative方式,而db2的delta方式则对应oracle的incremental方式。
4)、备注:
同样,对每个节点都做这个操作。
二、恢复(restore)数据库
1、新建数据库
在一般管理工具, 创建数据库(别名要和原来的数据库别名一致)。
2、恢复数据库
1):断开连接:将网络断开,切断所有的客户连接,如果不行,先重启。(如果有客户端连接到db2服务器,恢复不行的,包括控制中心)
2):恢复离线备份:
设:
你的备份那个db2文件在:c:\temp
你的数据库名称:dbname
那么对应db2的备份/恢复文件的格式是这样的:
c:\temp\dbname.0\db2ctlsv\node0000\catn0000\20090706\hhmmss.001
3):实例
备份文件路径:c:\temp\ipmdemo.0\db2ctlsv\node0000\catn0000\20090622\164642.001
其中,备份日期:20090622 备份文件:164642.001
新建数据库名:ipmdemo
数据库文件时间戳: 20090622164642
恢复命令为:db2 restore database ipmdemo from c:\temp taken at 20090622164642
3、恢复在线备份
1)、恢复。恢复命令为:db2 restore database dbname from c:\temp taken at 20090622164642
db2 restore database uibs from e:/db2 taken at 20130320074838
db2 rollforward database uibs to end of logs and stop
2)、前滚。前滚命令为:db2 rollforward db dbname to end of logs(或者:控制中心->所有数据库->dbname ->右键->前滚)
3)、停止前滚。停止前滚命令为:db2 rollforward db dbname stop(或者:控制中心->所有数据库->dbname ->右键->停止前滚)
三、有关说明
1、恢复操作也有online和offline的,区别如同backup的操作。
2、按照表空间的备份和恢复类似,加子句tablespace ( tablespace-name )即可。表空间级别的备份/恢复操作要求数据库处于归档日志和启用增量备份模式下。
3、恢复的例子中只做了版本恢复。若还有更新的全备份和增量备份的image,可以依次做恢复(注意使用db2ckrst的建议恢复次序和次数)后,再做roll forward。
http://www.iteye.com/topic/611797
使用catalog,把远程的数据库信息加载到本地一般分为两步:
第一步,catalog server端的node ,命令如下:
db2 catalog tcpip node db2node remote hostname server service_port
其中db2node是由你任意起的一个结点名,结点名不能跟已有的结点名重复(可通过db2 lsit node directory查看 ),hostname也可为ip address,service_port为端口号。节点目录用于存储远程数据库的所有连通性信息。
第二步,catalog 远端db2 数据库,命令如下:
db2 catalog database db_name as alias_name at node db2node.
db_name是指远程数据库的名字,alias_name是客户端实例名,db2node是指上面你所指定的node!
db2 catalog tcpip node db2node remote hostname server service_port
db2 catalog tcpip node r_uibs remote 10.102.90.1 server 60000
db2 catalog database uibs as r_uibs at node r_uibs
DB2 表结构改动
1.添加字段
alter table [table_name] add [column_name] [column_type]
2.更改字段类型
alter table [table_name] alter column [column_name] set data type [column_type]
注意: 更改字段类型是有限制的,如将字段改为比之前类型长度大的可以,如果要改小或者修改小数点长度,必须先drop掉原来的column,然后再重新添加.
例如我要将一个Varchar(10)的column改为Varchar(6) 或者将一个DECIMAL(16, 2)的column改为DECIMAL(16, 4)等,均不能使用上述语句修改,另外改为不同的类型,也需要先drop掉column。
3.去掉字段
alter table [table_name] drop column [column_name]
注意:drop掉字段之后,可能会导致表查询/插入操作不能执行,需要对表进行reorg。
4.为字段添加默认值
alter table [table_name] alter column [column_name] set default [value]
5. 添加带默认值的字段
alter table [table_name] add column [column_name] [column_type] not null with default [value]
6. 设置字段默认时间为当前时间
alter table [table_name] alter column [column_name] set default current date;
DB2常用命令