db2 简介
DB2体系结构中的最高一层是系统,一个系统表示DB2的一个安装。在一个由很多机器组成的网络环境中,我们有时也称系统为数据库分区。一个系统可以包含多个DB2实例,每个实例能够管理一个或多个数据库。
实例也称为数据库管理器(Database Management Application), 是数据库管理器在内存中的映像,是管理数据的DB2代码。实例相当于Informix的Infomix Server,在一台机器上可以有多个相互独立的实例, 实例之间彼此相互独立,同时运行,不会相互影响。每个实例可以管理若干个数据库,一个数据库只属于一个实例。
表空间是数据库中表数据与数据库之间的逻辑是中间层,数据库中的物理空间组织为表空间的集合,而表空间是表的逻辑集合。每个表空间包含容器集合,容器是用来描述物理空间分配的一般术语。数据库将数据存储在自己的表空间容器中。每个表存储在一个或几个表空间中,为了提高性能,或者为了便于表空间的备份,可以将一个表中不同类型的数据分别存储在不同的表空间中,如常规数据存储在第一个表空间中,将一个表的索引存储在第二个表空间中,将大数据存储在第三个表空间中。表空间最终会映射到物理存储介质上,对物理存储的合理使用可以让管理员有效地控制数据库的性能。例如,可以使用最快的设备或内存硬盘用于存储频繁使用的表,使用较慢的设备存储不经常使用的数据。表空间的概念提供了对底层存储物理设备的更加合理的使用。表空间的规范设计会显著影响数据库运行的性能。
1. 连接数据库
a. db2 connect to dbName user userName using password
b. db2 connect to dbName
c. db2 disconnect dbName
假如数据库就安装在本机上,那么就可以使用b项免用户名密码的方式连接上数据库;否则只能使用a项方式登陆数据库。c项是释放数据库连接。
2. 基本命令
db2 list db directory
列出所有数据库
db2 get db cfg
列出所有数据库配置信息
db2 create db dbName
创建数据库
db2 drop db dbName
删除数据库
db2 list tables for schema esbuser
查看特定用户下的表,可将schema esbuser去掉,则为普通地查看表
db2 "select * from esbuser.ESBTCLI"
查看特定用户下的表信息(必须加引号)
db2 describe table esbuser.ESBTSERV
查看特定表的结构
db2start
启动db2数据库
db2stop
停止db2数据库
注意:在命令行使用db2命令时,前面需要加db2字段
db2 "insert into 表名(字段名, 字段名) values(值,值)" db2插入一条数据
db2 "select * from 表名1 别名1 left join 表名2 别名2 on 别名1.字段=别名2.字段 [and .....] 左外连接查询
db2 "select * from 表名1 别名1 inner join 表名2 别名2 on 别名1.字段=别名2.字段 [and .....] 内连接查询
db2 "select * from 表名1 别名1 right join 表名2 别名2 on 别名1.字段=别名2.字段 [and .....] 右外连接查询
3. 获取有限数量的数据用fetch first n rows only
如:db2 "select * from ixp.esbtlog fetch first 1 rows only"
在ubuntu系统上,可以额外地使用下面命令更简单地获取前n条数据:
db2 "select * from esbuser.esbtlog limit 1"
4. 执行脚本sql文件
db2 -vtf filename
5. 查看db2数据库占用的端口号(linux版)
db2 get dbm cfg | grep -i svc
运行上述命令后会出现端口号,或者端口名。如果是端口名,那么继续查下去,
cat /etc/services | grep 端口名
6. 分组查询数据
db2 "select ROW_NUMBER() OVER(order by TRAN_BEGIN_TIME) AS ROWNUM, tab.* from (select * from esbuser.esbtlog) tab where ROWNUM BETWEEN 100 AND 150"
db2 "select * from esbuser.esbtlog limit 100,50"(ubuntu上可用)
7. 给远程数据库在本地编目
(为什么要编目?只有在本地编目了才能更好地远程数据库。)
a.db2 catalog tcpip node db2node remote hostname server service_port
如:db2 catalog tcpip node IXPNODE remote duixpdb1 server 50000
b.db2 catalog database db_name as alias_name at node db2node
如:db2 catalog database IXPDB as IXP at node IXPNODE
8. 取消编目
a. db2 uncatalog db alias_name
如:db2 uncatalog dbIXP
b.db2 uncatalog node db2node
如:db2 uncatalog nodeIXPNODE
c.db2 terminate
9. 查看索引
db2 describe indexes for table tb_name
注意:索引名和表名前面可以加上"命名空间."
10. 创建索引
db2 create index index_name on tb_name(file1, filed2...)
11. 删除索引
db2 DROP INDEX idx1_esbtlog
12. 查看triggers
db2 "select TRIGNAME from syscat.triggers where tabName='ESBTLOG' or tabName='SIPTLOGNEW'"
13. 创建triggers
CREATE
TRIGGER ESBTLOG_TRIGGER1 BEFORE INSERT
ON ESBTLOG REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL WHEN(
0 <(
SELECT
COUNT(*)
FROM
ESBTLOG
WHERE
MSG_ID = N.MSG_ID
AND TRAN_DATE = N.TRAN_DATE
)
) SIGNAL SQLSTATE '23505'
SET
MESSAGE_TEXT = 'Error: Duplicate key value violates unique constraint.'
14. 删除triggers
db2 drop trigger ESBTLOG_TRIGGER1
15. 创建自增序列
db2 "CREATE SEQUENCE SEQUENCE_TRACENO AS BIGINT START WITH 1 INCREMENT BY 1 MINVALUE 1 NO MAXVALUE CYCLE CACHE 20000 NO ORDER"
16. 获取自增序列的值
db2 "VALUES NEXTVAL FOR SEQUENCE_TRACENO"
17. 删除自增序列
db2 "DROP SEQUENCE SEQUENCE_TRACENO"
网友评论