Transcript
Page 1: 第八章: DB2 数据库简介

数据库与智能网络研究室http://dbin.jlu.edu.cn

第八章:第八章: DB2DB2 数据库简介数据库简介

Page 2: 第八章: DB2 数据库简介

12.2

DB2 UDB 的产品家族 UDB 产品组件及其功能 DB2 Connect 的作用 DB2 应用程序开发 DB2 和电子商务

DB2DB2 UDBUDB 产品系列概述产品系列概述

Page 3: 第八章: DB2 数据库简介

12.3

实例 Instance 数据库 Database 表空间 Tablespace 容器 Container 缓冲池 Buffer Pool 模式 Schema

DB2DB2 数据库的基本概念数据库的基本概念

Page 4: 第八章: DB2 数据库简介

12.4

表 View

索引 别名 触发器

DB2DB2 数据库的基本概念数据库的基本概念

Page 5: 第八章: DB2 数据库简介

12.5

数据控制语言数据控制语言 (DCL)(DCL)

使用 GRANT 语句使用 REVOKE 语句 ……

Page 6: 第八章: DB2 数据库简介

12.6

数据定义语言数据定义语言 ((DDLDDL))

使用 CREATE 语句创建新的数据库对象使用 DECLARE 语句生成新的数据库对象使用 ALTER 语句来改变数据库对象使用 DROP 语句来去掉数据库对象 ……

Page 7: 第八章: DB2 数据库简介

12.7

数据操纵语言数据操纵语言 ((DMLDML))

使用 SELECT 语句从数据库表中检索数据使用 INSERT 语句向表或视图中添加新行使用 UPDATE 语句来改变表或视图中的数据使用 DELETE 语句来删除数据 ……

Page 8: 第八章: DB2 数据库简介

12.8

常用的 DB2 指令 CREATE / DROP/ALTER

DESCRIBE

FORCE

GET / UPDATE

IMPORT / EXPORT / LOAD

BIND / REBIND

REORG / RUNSTATS

……

Page 9: 第八章: DB2 数据库简介

12.9

常用的 DB2 系统指令 db2admin db2advi db2batch db2cc / db2cmd db2cfexp / db2cfimp db2start / db2stop ……

Page 10: 第八章: DB2 数据库简介

12.10

CURRENT DATE USER CURRENT TIMESTAMP CURRENT TIME CURRENT TIMEZONE CURRENT SERVER

相当于 SQL Server 中的全局变量

Page 11: 第八章: DB2 数据库简介

12.11

数据库分区与表空间数据库分区与表空间

Page 12: 第八章: DB2 数据库简介

12.12

数据库分区

一个数据库可以建立一个或多个分区(即节点),数据可以根据表所定义的分区键通过 HASH 算法存放于各个分区中。

作为表格的分区键,建议使用高基数字段(拥有多个不同的值),这样可以使数据被均匀的分布,可以利用节点组中所有的节点资源来执行操作。也可以指定多个字段同时作为分区键来满足要求。

Page 13: 第八章: DB2 数据库简介

12.13

表空间的定义

DB2 是以表空间来定义数据库中存放数据的实体磁盘空间。一个数据库中至少需要具备 3 个表空间,分别是: SYSCATSPACE : 存放数据库中的所有系统表 TEMPSPACE1 :存放 DB2 在执行 SQL 指令时所产生

的临时数据表 USERSPACE1 :存放用户所建立的表

Page 14: 第八章: DB2 数据库简介

12.14

表空间的分类

根据存储的数据种类区分 规则表空间:存放系统表格过用户建立的表格的数据与索引。 临时表空间:存放在执行 SQL 指令时产生的临时数据。 大型表空间:存放 LONG VARCHAR 与 LOB 类型的字段数据。

根据管理方式区分 数据库管理空间: DMS ,是由 DB2 直接格式化与管理的空间 系统管理空间: SMS ,是由 DB2 通过操作系统所管理的空间

Page 15: 第八章: DB2 数据库简介

12.15

数据库中的对象数据库中的对象

Page 16: 第八章: DB2 数据库简介

12.16

对象名称:DB2 的所有对象,都有其对象名称, DB2 会将他全部转成大

写,但如果把对象名称用双引号括起来,则就区分大小写。带引号的对象名称也可以包含 SQL 的保留字,但并不提倡。

Page 17: 第八章: DB2 数据库简介

12.17

表格• 注意指定表空间和分区键• 可增加字段,新增或删除限制• 可更改 VARCHAR 类型的长度• 可用 LIKE 定义同样的一张表,但除了字段类型和默认值外其他属性不继承

索引 视图

• 只读视图 / 可更新视图 别名

Page 18: 第八章: DB2 数据库简介

12.18

限制• NOT NULL Constraints

• Column Defaults

• Unique Constraints

• Check Constraints

• Primary Key Constraints

• Foreign Key Constraints

触发器• 前触发器 / 后触发器

实例化查询表( MQT ):• REFRESH DEFERRED

• REFRESH IMMEDIATE

Page 19: 第八章: DB2 数据库简介

12.19

数据的锁数据的锁

Page 20: 第八章: DB2 数据库简介

12.20

LOCK TABLE 指令 LOCK TABLE DB2.TABLENAME IN SHARE MODE

LOCK TABLE DB2.TABLENAME IN EXCLUSIVE MODE

锁定的对象 数据库 / 表空间 / 表格 / 记录

锁定的模式(强度) 写锁定,包括 X 、 W 、 NW 、 Z 等 读锁定,包括 S 、 NS 、 U 等

Page 21: 第八章: DB2 数据库简介

12.21

锁定等待 LOCK WAIT

锁定超时 LOCKTIMEOUT

锁定升级 LOCKLIST :定义数据库中预留多少空间存放锁定信息 MAXLOCKS :定义每个事务可以使用多少 LOCKLIST 内存

Page 22: 第八章: DB2 数据库简介

12.22

数据库系统效能数据库系统效能

Page 23: 第八章: DB2 数据库简介

12.23

DB2 Explain 工具 db2expln

执行该语句可以查看 Package 中的 SQL 指令执行计划。这是从unix 或是 doc 窗口执行的指令,如下:

Db2expln -d dbname -c vicky -p cursor -o expln.out

dynexpln显示 SQL 指令的执行计划,如:dynexpln -d sample -s “sql 指令” -o expln.out

Dynexpln -d sample -f sql 文件 -o expln.out

Visual Explain从控制中心或命令行中心执行的 explain sql

Page 24: 第八章: DB2 数据库简介

12.24

几张关键的系统表 SYSCAT.TABLES SYSCAT.COLUMNS SYSCAT.COLDIST SYSCAT.INDEXES SYSCAT.TABLESPACES

RUNSTATS 索引

建立索引的方法 where 条件的索引的顺序 索引的副作用

Page 25: 第八章: DB2 数据库简介

12.25

REORGMQT (物化视图)

DATA INITIALLY DEFERRED REFRESH DEFERRED REFRESH IMMEDIATE ENABLE/DISABLE QUERY OPTIMIZATION

CREATE TABLE sch.mqt1 AS

( select name, location, salary from sch.tab1 a, sch.tab2

where a.dept = b.deptnumb

and a.salary > 20000

) DATA INITIALLY DEFERRED REFRESH DEFERRED ;

REFRESH TABLE sch.mqt1 ;

Page 26: 第八章: DB2 数据库简介

12.26

程序包与 BIND 嵌入式 SQL CLI JDBC SQLJ

DB2DB2 客户端程序开发客户端程序开发

Page 27: 第八章: DB2 数据库简介

12.27

实际应用实际应用

Page 28: 第八章: DB2 数据库简介

12.28

SQL 存储过程 CREATE PROCEDURE DROP PROCEDURE IN/OUT 参数 调用 CALL 错误陷阱 循环语句 COMMIT WORK BEGIN/END

Page 29: 第八章: DB2 数据库简介

12.29

SQL 存储过程 C 存储过程 / 函数 Java 存储过程

其他: COBOL 、 OLE

Page 30: 第八章: DB2 数据库简介

12.30

Store Procedure Builder

DW :通过一个 C 函数写成的 Function 向调试文件写日志

Page 31: 第八章: DB2 数据库简介

12.31

SQLCODE , SQLSTATE为什么要有Condition Handling?固定写法: Declare SQLSTATE CHAR(5) DEFAULT ‘00000’;

Declare SQLCODE INT DEFAULT 0;

必须要这么写才能得到 SQL Statement执行情况,且只能写在存储过程的开头 (Outermost Scope)

为什么? 主机风格

Condition Handling Declare continue handler for sqlstate ‘42774’

begin

end

Page 32: 第八章: DB2 数据库简介

12.32

Create procdure xx.xx(in xx, out xx)

specific specific-name

Language SQL begin xxx end

DB2允许定义同名但参数不同的存储过程,因此在删除存储过程时使用 specific-name删除。

假如调用存储过程的参数错误,db2只说找不到对应的存储过程,而不会说参数错误。

这一点类似面向对象的参数重载。

Page 33: 第八章: DB2 数据库简介

12.33

静态 SQL 静态 SQL (static SQL) 语句嵌入到应用程序中,在应用运行之前,所有的嵌入静态 SQL 语句必须经过预编译并被绑定到程序包 (package) 中。

DB2编译这些语句时,将基于编译和绑定这些语句时的系统表中的统计信息和数据库参数为每一个静态 SQL 语句生成一个访问计划 (access plan) 。

这些访问计划在运行时永远被使用;这些访问计划不会改变,除非程序包被重新绑定。

EXEC SQL SELECT d.deptname, count(e.empno), avg(e.salary) FROM department d left outer join employee e on (e.workdept = d.deptno) WHERE e.salary >= :salary_baseline OR e.salary IS NULL GROUP BY d.deptname ;

Page 34: 第八章: DB2 数据库简介

12.34

MERGE SQL – UPSERT对目标表进行更新插入的过程,当存在满足条件的记录时

就更新目标表,当不存在满足条件的记录时就向目标表插入新记录。

MERGE INTO account AS a

USING (SELECT id, sum(balance) sum_balance from transaction

GROUP BY id) AS t

ON a.id = t.id

WHEN MATCHED THEN

UPDATE SET

balance = a.balance + t.sum_balance

WHEN NOT MATCHED THEN

INSERT (id, balance) = (t.id, t.sum_balance);

Page 35: 第八章: DB2 数据库简介

12.35

权限设置过程 / 函数

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 ;

SEQUENCEGRANT USAGE ON SEQUENCE SEQNAME TO USER/GROUP USERNAME/GROUPNAME ;

系统权限查看表 SYSCAT.TABAUTH, SYSCAT.TBSPACEAUTH,

SYSCAT.SCHEMAAUTH

……

Page 36: 第八章: DB2 数据库简介

12.36

日期运算:如何求出每月末的日期?

Page 37: 第八章: DB2 数据库简介

12.37

日期运算: values(date(‘2006-01-31’)+1 month)

values(date(‘2006-01-31’)+1 year)数值运算 decimal 的小数位Null 值 任何有 Null 参与的表达式,结果都是 Null

特别注意打印中间结果或调试语句时

Page 38: 第八章: DB2 数据库简介

12.38

必须要先定义系统临时表空间或用户临时表空间才能使用临时表

定义临时表不能使用模式名,其模式名固定为session 。

使用完成后最好把临时表 Drop 掉。

Page 39: 第八章: DB2 数据库简介

12.39

SQL Server取到 SQL 语句所影响的行数的方式? (@@rowcount)

DB2取到 SQL 语句所影响的行数的方式 – Get diagnostics

GET DIAGNOSTICS v_Iupdate_Cnt=ROW_COUNT;


Top Related