美文网首页
DB2 Reference Card

DB2 Reference Card

作者: 超乎想象 | 来源:发表于2016-04-22 10:44 被阅读0次

DB2 Reference Card

基本概念

体系结构

数据库必须受实例的管理,例如数据库的起停等,在非集群的情况下,一个数据库只能由一个实例管理,但一个实例可以管理多个数据库。

安装

  1. 运行db2_precheck检查安装要求是否满足
  2. 运行db2_install安装
  3. 创建一个新用户db2inst1作为数据库实例用户
  4. 创建数据库实例

基本使用

快速入门

启动数据库实例

安装完成后,切换到数据库实例用户下,以db2inst1为例

[db2inst1@localhost ~]$ db2start

创建SAMPLE数据库

创建支持XML和关系型数据的SAMPLE数据库

[db2inst1@localhost ~]$ db2sampl -sql -xml

开始使用

创建数据库

[db2inst1@localhost ~]$ db2 create db [dbname] db2 create db [dbname]

连接数据库

[db2inst1@localhost ~]$ db2
db2 => connect to sample user db2inst1 using root
db2 => list tables
db2 => select * from staff where dept = 20 

注:类似list tables的命令,可以使用? list查询,connect to sample user db2inst1 using root在本机操作时,可以简写为connect to sample,db2命令提示符下的命令,通常也可以在shell下使用db2前缀执行,如db2 connect to sample,在db2命令提示符下,执行命令前加!,可以执行shell命令。

启动关闭

实例相关命令

查看数据库版本

[db2inst1@localhost ~]$ db2level

创建实例

[db2inst1@localhost ~]$ db2icrt db2inst1

注意:实例名称应与当前用户名相同,连接数据库时的密码为Linux用户密码

删除实例

[db2inst1@localhost ~]$ db2idrop db2inst1

查看实例

[db2inst1@localhost ~]$ db2ilist

查看当前实例下的数据库

[db2inst1@localhost ~]$ db2 list db directory

显示本地目录信息

[db2inst1@localhost ~]$ db2 list database directory
[db2inst1@localhost ~]$ db2 list admin node directory
[db2inst1@localhost ~]$ db2 list node directory

启动默认实例

[db2inst1@localhost ~]$ db2start

停止当前实例

[db2inst1@localhost ~]$ db2stop

启用TCP/IP数据库连接

[db2inst1@localhost ~]$ db2set -i db2inst1 DB2COMM=tcpip
[db2inst1@localhost ~]$ db2 update dbm cfg using SVCENAME 50000
[db2inst1@localhost ~]$ db2stop
[db2inst1@localhost ~]$ db2start

注:其中,50000为端口号,可以在/etc/services中添加一行,然后用名称代替上面的50000。

表空间

创建表空间

DB2 => CREATE TABLESPACE tbsp1
DB2 => MANAGED BY SYSTEM
DB2 => USING ('d:\acc_tbsp', 'e:\acc_tbsp')
DB2 => CREATE TABLESPACE tbsp1
DB2 => PAGESIZE 8K
DB2 => MANAGED BY DATABASE
DB2 => USING (FILE 'd:\db2data\acc_tbsp', 5000,
DB2 => FILE 'e:\db2data\acc_tbsp', 5000)
DB2 => CREATE TABLESPACE tbsp2
DB2 => PAGESIZE 8K
DB2 => MANAGED BY DATABASE
DB2 => USING (FILE '/storage/dbs1' 10) AUTORESIZE YES
DB2 => CREATE DATABASE mydb AUTOMATIC STORAGE YES
DB2 => CONNECT TO mydb
DB2 => CREATE TABELSPACE tbsp1 MANAGED BY AUTOMATIC STORAGE

缓冲池

DB2 => CREATE BUFFERPOOL bp4k PAGESIZE 4K
DB2 => CREATE TABLESPACE tbsp1 PAGESIZE 4K BUFFEREDPOOL bp4k

数据库管理基本命令

连接与断开连接数据库

[db2inst1@localhost ~]$ db2 connect to sample [user db2inst1 using root]
DB2 => disconnect sample

管理命令

查看当前数据库的表空间

[db2inst1@localhost ~]$ db2 list tablespace

查看数据库管理器配置

[db2inst1@localhost ~]$ db2 get dbm cfg show detail

更改数据库管理器配置

[db2inst1@localhost ~]$ db2 update dbm cfg using health_mon off

查看数据库配置

[db2inst1@localhost ~]$ db2 get db cfg for dbname [| grep -i log]
[db2inst1@localhost ~]$ db2 connect dbname
[db2inst1@localhost ~]$ db2 get db cfg show detail

更改一个数据库配置

[db2inst1@localhost ~]$ db2 update db cfg using logprimary 10

整理表

[db2inst1@localhost ~]$ db2 reorg table tablename   
[db2inst1@localhost ~]$ db2 runstats on table tablename with distribution and indexes all 

监控服务器

db2top -d dbname

关闭应用连接

关闭所有应用连接
[db2inst1@localhost ~]$ db2 force application all 
关闭指定应用连接
[db2inst1@localhost ~]$ db2 force application ID1,ID2,...DB2

常用监控命令

  • db2expln
  • db2top
  • db2pd
  • db2advis

DDL

查询表定义

DB2 => describe table tablename

更改列

DB2 => alter table schema.tableName alter column set data type varchar(100)

列重命名

ALTER TABLE <tabname> RENAME COLUMN <column_name> TO <new_column_name>

新增自增列

假设表RTTS.T1是需要增加自增列的表,先创建一个结构类似的表

CREATE TABLE RTTS.T2(id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1,INCREMENT BY 1,NO CACHE) PRIMARY KEY,CUSTOMER_ID CHAR(20) NOT NULL, PRODUCT_ID INTEGER NOT NULL);

从RTTS.T1读取数据,插入T2

INSERT INTO RTTS.T2(CUSTOMER_ID,PRODUCT_ID) SELECT CUSTOMER_ID,PRODUCT_ID FROM RTTS.T1;

删除旧表,修改表名

drop table RTTS.T1;
RENAME TABLE "RTTS"."T2" TO "T1"

DML

查询

注:日期查询可以采用如下方式

DB2 => select * from table where field > timestamp(char('2014-02-02 00:00:00'))
DB2 => -- 或者
DB2 => select * from table where field > '2014-02-02 00:00:00'

插入

[db2inst1@localhost ~]$ db2 insert into newuser(username,password,email) values('Amy','1234','Amy@ss.com')
[db2inst1@localhost ~]$ db2 insert into newuser(username,password,email) values('Judy','1234','Judy@ss.com')

修改

删除

数据导入导出

执行SQL文件

[db2inst1@localhost ~]$ db2 -tvf sqlfilename
[db2inst1@localhost ~]$ db2 -td@ -f filename

导出数据

[db2inst1@localhost ~]$ db2 "export to filename.del of del [modified by codepage=1386] select * from tablename where condition"
[db2inst1@localhost ~]$ db2 export to /home/db2inst1/data/tablename.ixf of del/ixf select * from tablename

导入数据

数据的导入方法有insert,import和load三种,其中load不需要写日志(或很少日志),不做检查约束和参照完整性约束,不触发Trigger,锁的时间比较短,因此特别适合大数据量的导入。

[db2inst1@localhost ~]$ db2 import/load from filename.del of del commitcount 1000000 modified by generatedignore codepage=1386 insert into tablename
[db2inst1@localhost ~]$ db2 import from c:\dftz.ixf of ixf/del commitcount 5000 [messages] [/home/db2inst1/logs/import.msg] insert/insert_update/replace into tablename
[db2inst1@localhost ~]$ db2 import from c:\dftz.ixf of ixf commitcount 5000 create/replace_create into tablename  

如果之前导入数据发生日志已满的问题,可以使用skipcount,跳过已导入的数据

db2 "import from tab1.ixf of ixf modified by generatedignore COMMITCOUNT 500000 SKIPCOUNT 5000000 insert into  RCDB2.T_CUST_DTL"

导入CVS

DB2 => LOAD client FROM './MTC.csv' OF del MODIFIED BY codepage=1208 chardel"" COLDEL0x2c METHOD P (1,2,3,4) INSERT INTO MTC_UNPASS_RATE( PLAZA_ID,PLAZA_NAME,TRANS_DATE,UNPASS_RATE)

下面详细解读该语句:

  • Load Client from 说明是从客户端导入文件,如果是直接在数据服务器上执行,则去掉Client 关键词
  • OF DEL,del 是delimeter的缩写,意为以指定的标点符号作为栏位之间的分割,而不是栏位的长度是固定的
  • CODEPAGE, 指明csv文件的编码
  • Chardel,标明字符串栏位以什么字符作为起始标志,此处说明是以双引号括起来
  • COLDEL,标明栏位之间的间隔符号,此处说明是以逗号作为栏位的分隔符
  • METHOD P,说明是按照栏位的序号,来定位需要导入的栏位数据,
  • 另外有METHOD L, 说明是按照栏位在CSV 文件中固定的起始位置,例如
    METHOD P(001 020,022 030,032 045,047 100)
  • INSERT INTO,指明插入到哪一张表及对应的字段

注:load与import相比,速度稍快,load不写日志,import会写日志。Import和Load 都可以将数据导入到DB2服务器中,但是2者是有很大区别的。Import 其实执行了SQL 的INSERT 操作。和INSERT 操作一样,Import 执行的时候会激活触发器,所有的约束会强制实现,而且会使用数据库的缓冲池。类似Oracle sqlloader工具的常规路径导入。Load 工具可以更快的将数据文件导入到数据表中。Load 工具不会与DB2 数据引擎发生交互,所以当使用Load 工具时,不会触发触发器也不会使用缓冲池,而且必须单独实现数据表的约束。Import 工具执行起来比Load 慢是因为它是低层次的数据操作工具,它分
LOAD,BUILD,DELETE 三个阶段对硬盘上的数据页面来进行直接的处理。Load工具类似Oracle sql
loader工具的直接路径导入。

快速清空表

[db2inst1@localhost ~]$ db2 import from /dev/null of del replace into tablename

DB2日志

db2diag.log日志

  • 存放在$DB2INSTANCE_HOME/sqllib/db2dump
  • 该日志包含DB2所有错误和警告日志信息

stmm.log日志

  • 存放在$DB2INSTANCE_HOME/sqllib/db2dump/stmm
  • 日志存放于多个文件中(最多5个)
  • 该日志包含性能统计数据和DB2的优化结果

应用开发

DB2数据库连接

db2的链接分四种类型,依照 JDBC 规范,有四种类型的 JDBC 驱动程序体系结构:

Type 1

这类驱动程序将 JDBC API 作为到另一个数据访问 API 的映射来实现,如开放式数据库连通性(Open Database Connectivity,ODBC)。这类驱动程序通常依赖本机库,这限制了其可移植性。JDBC-ODBC 桥驱动程序就是 Type 1 驱动程序的最常见的例子。

Type 2

这类驱动程序部分用 JAVA 编程语言编写,部分用本机代码编写。这些驱动程序使用特定于所连接数据源的本机客户端库。同样,由于使用本机代码,所以其可移植性受到限制。

Driver Name:COM.ibm.db2.jdbc.app.DB2Driver
URL Pattern:jdbc:db2:databasename

Type 3

这类驱动程序使用纯 JAVA 客户机,并使用独立于数据库的协议与中间件服务器通信,然后中间件服务器将客户机请求传给数据源。

Driver Name:COM.ibm.db2.jdbc.net.DB2Driver
URL Pattern:jdbc:db2:ServerIP:6789:databasename

Type 4

这类驱动程序是纯 JAVA,实现针对特定数据源的网络协议。客户机直接连接至数据源。

Driver Name:com.ibm.db2.jcc.DB2Driver
jdbc:db2://ServerIP:50000/databasename

Hibernate连接DB2配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
            <property name="connection.username">db2inst1</property>
            <property name="connection.password">root</property>
            <property name="connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
            <property name="connection.url">jdbc:db2://localhost:50000/etc</property>
            <property name="dialect">org.hibernate.dialect.DB2Dialect</property>
            
            <property name="show_sql">true</property>
            <property name="format_sql">true</property>
            <!-- <property name="hibernate.default_schema">hibernate</property> -->
            <property name="hbm2ddl.auto">update</property>
            
            <property name="hibernate.current_session_context_class">thread</property>
            
            <mapping class="com.cn.naive.DB2Test.Event" />
    </session-factory>
</hibernate-configuration>

相关文章

网友评论

      本文标题:DB2 Reference Card

      本文链接:https://www.haomeiwen.com/subject/rbqxrttx.html