登录数据库服务器 切换到数据库用户 su - db2inst1
常用的一些DB2命令总结如下:
- 查看DB2数据库:
db2 list db directory
- 查看DB2数据库应用:
db2 list applications
- 查看DB2数据库应用与进程号:
db2 list applications show detail
- 杀掉进程:
db2 force application (id)
- 查看DB2数据库配置:
db2 get db cfg for DB_NAME
- 查看DB2归档日志路径:
db2 get db cfg for DB_NAME|grep "LOGARCHMETH1"
- 查看首活动日志:
db2 get db cfg for DB_NAME|grep -i "First active log file"
- 清理日志:
db2 prune logfile prior to S0009392.LOG
##其中S0009392.LOG是首活动日志
,此命令可以将当前首活动日志文件之前的归档日志文件全部删除 - 手工归档产生日志命令:
db2 archive log for db DB_NAME
- 创建数据库:
db2 create db DB_NAME
- 删除数据库:
db2 drop database DB_NAME
(如果不能删除,尝试断开激活的连接或重启db2) - 断开数据库连接:
db2 connect reset
或者db2 terminate
- 连接数据库:
db2 connect to DB_NAME
或db2 connect to DB_NAME user USER_NAME using PASSWORD
- 列出系统表:
db2 list tables for system
- 查询列出所有表:
db2 list tables for all
- 查看特定用户表:
db2 list tables for schema user
- 查看表结构:
db2 describe table TB_NAME
或者describe select * from schema.TB_NAME
- 生成所有对象的DDL:
db2look -d DB_NAME -a -e -m -l -f -o bak.sql
- 复制一张表:
db2 create table TB1 like TB2
- 查询表:
db2 "select * from table tablename where ..."
- 查看正在执行的sql:
db2 list application show detail |grep -i exe
- 看数据库表空间:
db2pd -db DB_NAME -tablespace
- 查看死锁:
db2 get snapshot for locks on DB_NAME
或者db2 "select agent_id,tabname,lock_mode from table(snap_get_lock('DB_NAME')) as ll"
- 查看错误代码信息:
db2 ? 08003(SQLSTATE值)
可以获取sql错误含义 - 查看当前DB2的版本:
db2 "select * from sysibm.sysversions"
- 查看DB2的TABLESPACE的状况:
db2 "select * from sysibm.SYSTABLESPACES"
- 启动DB2数据库服务:
db2start
- 激活数据库实例:
db2 activate database DB_NAME
- 查看激活状态的数据库:
db2 list active databases
- 查看失效数据库实例:
db2 deactivate database DB_NAME
- 关闭DB2数据库服务:
db2stop
- 查看DB2消耗资源多的SQL:
db2top -d DB_NAME
其中db2top
是连在一起的,查看消耗资源 按照提示按l
,出现Application Handle
,记录下资源消耗大的Application Handle(stat)
按q
退出 - 测试SQL的执行性能:
db2batch -d DB_NAME -f select_sql -r benchmark.txt -o p3
其中select_sql
是要测试的语句
或者用DBvisualizer工具直接远程连接DB2数据库,通过SQL获取一些信息
- 查看INDEX:
select * from sysibm.sysindexes where TB_NAME=’XXXX’;
或者describe indexes for table TB_NAME show detail;
- 查看表字段信息:
select * from sysibm.syscolumns where TB_NAME=’XXXX’
- 快速清除一个大表:
alter table TB_NAME activate not logged initally with empty table;
或者import from null_file of del replace into TB_NAME
或者直接truncate table TB_NAME;
- 查询字符串中包含
‘%’
或‘_’
,要使用转义字符,例如SELECT * FROM TEST_INFO WHERE NAME like '%88!%%' escape '!';
语句后面的escape '!'
是定义一个转义字符, 紧跟着转义字符’!'后的%不再是统配符而是百分号。 - 重命名数据库名:
Rename old_tablename to new_tablename;
- 创建索引:
CREATE INDEX index_name ON tb_name(DT_DAY_ID, ...)
; - 查看表空间使用情况:
SELECT A.SNAPSHOT_TIMESTAMP,
A.TBSP_NAME,
B.TBSP_TYPE,
A.TBSP_STATE,
1.00 * A.TBSP_USABLE_PAGES * B.TBSP_PAGE_SIZE / 1024 / 1024 / 1024 AS TOTAL,
1.00 * A.TBSP_USED_PAGES * B.TBSP_PAGE_SIZE / 1024 / 1024 / 1024 AS USED,
1.00 * (A.TBSP_USABLE_PAGES - TBSP_USED_PAGES) * B.TBSP_PAGE_SIZE / 1024 / 1024 / 1024 AS FREE
FROM SYSIBMADM.SNAPTBSP_PART A
INNER JOIN SYSIBMADM.SNAPTBSP B
ON A.TBSP_ID = B.TBSP_ID;
- 对已删除表的恢复:1.首先数据库要可以前滚恢复(数据库配置参数logretain或userexit打开);
2.对要实施Drop Table Recovery
的表空间(限regular tablespace
),执行:alter tablespace 表空间名 dropped table recovery on
;
3.用list history dropped table all for DB_NAME
得到删除表的tableid和表结构的生成语句DDL,记录tableid和DDL。之后用drop命令删除的表中的数据可以在前滚恢复时导出。