DB2 基本知识介绍
认识 DB2
认识 DB2
DB2的版本 – DB2 UDB
V7、V8、V9
PE (Personal Edition)
EE (Enterprise Edition)
EEE (Enterprise - Extended Edition )
其他IBM 主机平台如AS/400上的DB2与DB2 UDB有很大不同,
老版本的主机DB2甚至不支持SQL。
DB2在招行的应用情况
AS/400 DB2
RS/6000 – UDB V5 V7 V8 V9
数据仓库
开发用:DB2 UDB PE V8 For Windows XP/2K
DB2 UDB vs SQL Server /Sybase
SQL Server/Sybase是个黑盒子
DB2 是个相对透明的黑盒子
DB2 所支持的SQL语句更完整
DB2 对数据仓库所做的扩展支持非常好,如
多分区,MDC技术等。
DB2 具有平台优势和体系优势,对高端应用
有更好的支持。
DB2 UDB的Create Table语句
SQL Server 的Create Table
CREATE TABLE
[
database_name.[owner].
| owner.
] table_name
(
{ <column_definition>
| column_name AS computed_column_expression
| <table_constraint>
} [,...n]
)
[ON {filegroup | DEFAULT} ]
[TEXTIMAGE_ON {filegroup | DEFAULT} ]
Windows 下的安装、使用
仅安装客户端 DB2 Connect
安装服务器端 DB2 PE Server + DB2 Connect
RS/6000下的安装、使用
如RS/6000上已安装DB2,则只要在登录用户的profile中引用db2inst1的
profile或手工添加相应环境变量,即可使用DB2,前提是DBA已授权此用户
足够权限。
DB2安装、使用
配置助手
控制中心
命令行工具
– 命令窗口、命令行处理器
信息中心
开发中心
健康中心
使用 DB2工具 - windows
实例 Instance
数据库 Database
容器 Container
表空间 Tablespace
扩展区 Extend
表 Table
页 Page
DB2 UDB中一些基本概念
View
SQL存储过程
触发器
事务处理
索引
DB2 UDB中的标准SQL设施
模式是一个标识符,如用户 ID, 它帮助分组表和其他数据库对象。模
式可以归个人拥有,拥有者可以控制对数据以及其中的对象的存取。
模式也可以是数据库中的对象。它可以在创建模式中的第一个对象时 自
动创建。这样的对象可以是任何可以由模式名限定的对象,如表、索引、
视图、程序包、单值类型、函数或触发器。若要自动创建模式,则您必
须 拥有 IMPLICIT_SCHEMA 权限,也可以隐式地创建模式。
模式名用作两部分对象名的第一部分。创建一个对象时,可将其分配给
特定模式。若不指定模式,则它被分配给缺省模式,缺省模式通常是创
建该对象的人员的用户 ID。名称的第二部分是对象名。例如,名为
Smith 的用户可以 有一个名为 的表。
简单的比喻:假如DB等同于公司,模式相当一个部门名称。
DB2 数据库中的模式名 - SCHEMA
DB2 – 专用存储器
CURRENT DATE
USER
CURRENT TIMESTAMP
CURRENT TIME
CURRENT TIMEZONE
CURRENT SERVER
相当于SQL Server中的全局变量
常用的 DB2 指令
CREATE / DROP
LIST / DESCRIBE
FORCE
GET / UPDATE
IMPORT / EXPORT / LOAD
BIND / REBIND
REORG / RUNSTATS
……
常用的 DB2 系统指令
db2admin
db2advi
db2batch
db2cc / db2cmd
db2cfexp / db2cfimp
db2start / db2stop
……
数据库分区与表空间
数据库分区与表空间
数据库分区
一个数据库可以建立一个或多个分区(即节点),
数据可以根据表所定义的分区键通过HASH算法存
放于各个分区中。
作为表格的分区键,建议使用高基数字段(拥有多
个不同的值),这样可以使数据被均匀的分布,可
以利用节点组中所有的节点资源来执行操作。也可
以指定多个字段同时作为分区键来满足要求。
二、数据库分区与表空间
表空间的定义
DB2是以表空间来定义数据库中存放数据的实体磁盘空
间。
一个数据库中至少需要具备3个表空间,分别是:
SYSCATSPACE: 存放数据库中的所有系统表
TEMPSPACE1:存放DB2在执行SQL指令时所产生的临时数据表
USERSPACE1:存放用户所建立的表
二、数据库分区与表空间
表空间的分类
根据存储的数据种类区分
规则表空间:存放系统表格过用户建立的表格的数据与索引。
临时表空间:存放在执行SQL指令时产生的临时数据。
大型表空间:存放LONG VARCHAR与LOB类型的字段数据。
根据管理方式区分
数据库管理空间:DMS,是由DB2直接格式化与管理的空间
系统管理空间:SMS,是由DB2通过操作系统所管理的空间
二、数据库分区与表空间
数据库中的对象
三、数据库中的对象
对象名称:
DB2 的所有对象,都有其对象名称,DB2 会
将他全部转成大写,但如果把对象名称用双
引号括起来,则就区分大小写。带引号的对
象名称也可以包含SQL的保留字,但并不
提倡。
三、数据库中的对象
表格
• 注意指定表空间和分区键
• 可增加字段,新增或删除限制
• 可更改VARCHAR类型的长度
• 可用LIKE定义同样的一张表,但除了字段类型和
默认值外其他属性不继承
索引
视图
• 只读视图/可更新视图
别名
数据库中的对象
限制
• NOT NULL Constraints
• Column Defaults
• Unique Constraints
• Check Constraints
• Primary Key Constraints
• Foreign Key Constraints
触发器
• 前触发器 / 后触发器
实例化查询表(MQT):
• REFRESH DEFERRED
• REFRESH IMMEDIATE
三、数据库中的对象
数据的锁
四、数据的锁
LOCK TABLE 指令
LOCK TABLE IN SHARE MODE
LOCK TABLE IN EXCLUSIVE MODE
锁定的对象
数据库 / 表空间 / 表格 / 记录
锁定的模式(强度)
写锁定,包括 X、W、NW、Z 等
读锁定,包括 S、NS、U 等
四、数据的锁
锁定等待
LOCK WAIT
锁定超时
LOCKTIMEOUT
锁定升级
LOCKLIST:定义数据库中预留多少空间存放锁定信息
MAXLOCKS:定义每个事务可以使用多少LOCKLIST内存区
四、数据的锁
数据库系统效能
五、数据库系统效能
DB2 Explain 工具
db2expln
执行该语句可以查看Package中的SQL指令执行计划。这是从
unix或是doc窗口执行的指令,如下:
Db2expln -d dbname -c vicky -p cursor -o
dynexpln
显示SQL指令的执行计划,如:
dynexpln -d sample -s “sql指令”-o
Dynexpln -d sample -f sql文件 -o
Visual Explain
从控制中心或命令行中心执行的explain sql
五、数据库系统效能
几张关键的系统表
RUNSTATS
索引
建立索引的方法
where条件的索引的顺序
索引的副作用
五、数据库系统效能
五、数据库系统效能
REORG
MQT(物化视图)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
REFRESH IMMEDIATE
ENABLE/DISABLE QUERY OPTIMIZATION
CREATE TABLE AS
( select name, location, salary from a,
where =
and > 20000
) DATA INITIALLY DEFERRED REFRESH DEFERRED ;
REFRESH TABLE ;
程序包与BIND
嵌入式SQL
CLI
JDBC
SQLJ
DB2客户端程序开发
实际应用
六、实际应用
SQL存储过程
CREATE PROCEDURE
DROP PROCEDURE
IN/OUT 参数
调用 CALL
错误陷阱
循环语句
COMMIT WORK
BEGIN/END
六、实际应用
SQL存储过程
C存储过程/函数
Java存储过程
其他:COBOL、OLE
存储过程
Store Procedure Builder
DW:通过一个C函数写成的Function向
调试文件写日志
存储过程的调试方法 – SQL存储过程的调试
1. SQLCODE,SQLSTATE
2.为什么要有Condition Handling?
3.固定写法:
4. Declare SQLSTATE CHAR(5) DEFAULT ‘00000’;
5. Declare SQLCODE INT DEFAULT 0;
6. 必须要这么写才能得到SQL Statement执行情况,且只能写在存储过程的开头
(Outermost Scope)
7. 为什么? 主机风格
8. Condition Handling
9. Declare continue handler for sqlstate ‘42774’
10. begin
11. end
12.
SQL存储过程的异常处理方法 – Condition Handling
Create procdure (in xx, out xx)
specific specific-name
Language SQL begin xxx end
DB2允许定义同名但参数不同的存储过程,因
此在删除存储过程时使用specific-name删除。
假如调用存储过程的参数错误,db2只说找不
到对应的存储过程,而不会说参数错误。
这一点类似面向对象的参数重载。
DB2 SQL存储过程的specific specific-name
静态SQL
静态SQL (static SQL) 语句嵌入到应用程序中,在应用运行
之前,所有的嵌入静态SQL语句必须经过预编译并被绑定到程
序包(package) 中。
DB2编译这些语句时,将基于编译和绑定这些语句时的系统表
中的统计信息和数据库参数为每一个静态SQL语句生成一个访
问计划(access plan)。
这些访问计划在运行时永远被使用;这些访问计划不会改变,
除非程序包被重新绑定。
EXEC SQL SELECT , count(), avg()
FROM department d
left outer join employee e on ( = )
WHERE >= :salary_baseline
OR IS NULL
GROUP BY ;
六、实际应用
动态SQL
动态SQL (dynamic SQL) 语句在程序运行时被prepare和
执行。
DB2运行动态SQL语句时,将基于当前的系统表中的统计信
息和数据库参数为该语句生成一个访问计划(access
plan)。
该访问计划在运行时可能会不断变化。
stmt = “select empno, salary from employee where empno=?”;
EXEC SQL PREPARE s1 FROM :stmt;
EXEC SQL EXECUTE s1;
六、实际应用
六、实际应用
MERGE SQL – UPSERT
对目标表进行更新插入的过程,当存在满足条件的记录时
就更新目标表,当不存在满足条件的记录时就向目标表插
入新记录。
MERGE INTO account AS a
USING (SELECT id, sum(balance) sum_balance from transaction
GROUP BY id) AS t
ON =
WHEN MATCHED THEN
UPDATE SET
balance = + _balance
WHEN NOT MATCHED THEN
INSERT (id, balance) = (, _balance);
六、实际应用
权限设置
过程/函数
GRANT EXECUTE ON PROCEDURE/FUNCTIOIN PROCNAME/FUNCNAME
TO USER/GROUP USERNAME/GROUPNAME ;
表
GRANT ALL/DELETE/UPDATE/SELECT/INSERT ON TABLE TABNAME
TO USER/GROUP USERNAME/GROUPNAME ;
SEQUENCE
GRANT USAGE ON SEQUENCE SEQNAME TO USER/GROUP
USERNAME/GROUPNAME ;
系统权限查看表
, ,
……
DB2 UDB的数据类型
DB2 UDB的数据类型
日期运算:如何求出每月末的日期?
DB2 UDB的数据类型
日期运算:
values(date(‘2006-01-31’)+1 month)
values(date(‘2006-01-31’)+1 year)
数值运算
decimal的小数位
Null值
任何有Null参与的表达式,结果都是Null
特别注意打印中间结果或调试语句时
存储过程-临时表的使用
必须要先定义系统临时表空间或用户临时表空间才
能使用临时表
定义临时表不能使用模式名,其模式名固定为
session。
使用完成后最好把临时表Drop掉。
Get diagnostics 使用说明
SQL Server取到SQL语句所影响的
行数的方式?(@@rowcount)
DB2取到SQL语句所影响的行数的
方式 – Get diagnostics
GET DIAGNOSTICS v_Iupdate_Cnt=ROW_COUNT;
完整的存储
过程实例讲解
Question ?