1 / 39

第八章: DB2 数据库简介

第八章: DB2 数据库简介. DB2 UDB 产品系列概述. DB2 UDB 的产品家族 UDB 产品组件及其功能 DB2 Connect 的作用 DB2 应用程序开发 DB2 和电子商务. DB2 数据库的基本概念. 实例 Instance 数据库 Database 表空间 Tablespace 容器 Container 缓冲池 Buffer Pool 模式 Schema. DB2 数据库的基本概念. 表 View 索引 别名 触发器. 数据控制语言 (DCL) 使用 GRANT 语句 使用 REVOKE 语句

lois-valdez
Télécharger la présentation

第八章: DB2 数据库简介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第八章:DB2数据库简介

  2. DB2UDB产品系列概述 • DB2 UDB的产品家族 • UDB产品组件及其功能 • DB2 Connect的作用 • DB2应用程序开发 • DB2和电子商务

  3. DB2 数据库的基本概念 • 实例 Instance • 数据库 Database • 表空间 Tablespace • 容器 Container • 缓冲池 BufferPool • 模式 Schema

  4. DB2 数据库的基本概念 • 表 • View • 索引 • 别名 • 触发器

  5. 数据控制语言(DCL) • 使用 GRANT语句 • 使用REVOKE语句 • ……

  6. 数据定义语言(DDL) • 使用CREATE语句创建新的数据库对象 • 使用DECLARE语句生成新的数据库对象 • 使用ALTER语句来改变数据库对象 • 使用DROP语句来去掉数据库对象 • ……

  7. 数据操纵语言(DML) • 使用SELECT语句从数据库表中检索数据 • 使用INSERT语句向表或视图中添加新行 • 使用UPDATE语句来改变表或视图中的数据 • 使用DELETE语句来删除数据 • ……

  8. 常用的 DB2 指令 • CREATE / DROP/ALTER • DESCRIBE • FORCE • GET / UPDATE • IMPORT / EXPORT / LOAD • BIND / REBIND • REORG / RUNSTATS • ……

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

  10. CURRENT DATE • USER • CURRENT TIMESTAMP • CURRENT TIME • CURRENT TIMEZONE • CURRENT SERVER 相当于SQL Server中的全局变量

  11. 数据库分区与表空间

  12. 数据库分区 • 一个数据库可以建立一个或多个分区(即节点),数据可以根据表所定义的分区键通过HASH算法存放于各个分区中。 • 作为表格的分区键,建议使用高基数字段(拥有多个不同的值),这样可以使数据被均匀的分布,可以利用节点组中所有的节点资源来执行操作。也可以指定多个字段同时作为分区键来满足要求。

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

  14. 表空间的分类 根据存储的数据种类区分 • 规则表空间:存放系统表格过用户建立的表格的数据与索引。 • 临时表空间:存放在执行SQL指令时产生的临时数据。 • 大型表空间:存放LONG VARCHAR与LOB类型的字段数据。 根据管理方式区分 • 数据库管理空间:DMS,是由DB2直接格式化与管理的空间 • 系统管理空间:SMS,是由DB2通过操作系统所管理的空间

  15. 数据库中的对象

  16. 对象名称: DB2 的所有对象,都有其对象名称,DB2 会将他全部转成大写,但如果把对象名称用双引号括起来,则就区分大小写。带引号的对象名称也可以包含SQL的保留字,但并不提倡。

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

  18. 限制 • NOT NULL Constraints • Column Defaults • Unique Constraints • Check Constraints • Primary Key Constraints • Foreign Key Constraints • 触发器 • 前触发器 / 后触发器 • 实例化查询表(MQT): • REFRESH DEFERRED • REFRESH IMMEDIATE

  19. 数据的锁

  20. LOCK TABLE 指令 • LOCK TABLE DB2.TABLENAME IN SHARE MODE • LOCK TABLE DB2.TABLENAME IN EXCLUSIVE MODE • 锁定的对象 • 数据库 / 表空间 / 表格 / 记录 • 锁定的模式(强度) • 写锁定,包括 X、W、NW、Z 等 • 读锁定,包括 S、NS、U 等

  21. 锁定等待 • LOCK WAIT • 锁定超时 • LOCKTIMEOUT • 锁定升级 • LOCKLIST:定义数据库中预留多少空间存放锁定信息 • MAXLOCKS:定义每个事务可以使用多少LOCKLIST内存区

  22. 数据库系统效能

  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

  24. 几张关键的系统表 • SYSCAT.TABLES • SYSCAT.COLUMNS • SYSCAT.COLDIST • SYSCAT.INDEXES • SYSCAT.TABLESPACES • RUNSTATS • 索引 • 建立索引的方法 • where条件的索引的顺序 • 索引的副作用

  25. REORG • MQT(物化视图) • 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 ;

  26. DB2客户端程序开发 • 程序包与BIND • 嵌入式SQL • CLI • JDBC • SQLJ

  27. 实际应用

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

  29. SQL存储过程 • C存储过程/函数 • Java存储过程 • 其他:COBOL、OLE

  30. Store Procedure Builder • DW:通过一个C函数写成的Function向调试文件写日志

  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

  32. Create procdure xx.xx(in xx, out xx) specific specific-name Language SQL begin xxx end DB2允许定义同名但参数不同的存储过程,因此在删除存储过程时使用specific-name删除。 假如调用存储过程的参数错误,db2只说找不到对应的存储过程,而不会说参数错误。 这一点类似面向对象的参数重载。

  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 ;

  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);

  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 ; • SEQUENCE GRANT USAGE ON SEQUENCE SEQNAME TO USER/GROUP USERNAME/GROUPNAME ; • 系统权限查看表 SYSCAT.TABAUTH, SYSCAT.TBSPACEAUTH, SYSCAT.SCHEMAAUTH ……

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

  37. 日期运算: values(date(‘2006-01-31’)+1 month) values(date(‘2006-01-31’)+1 year) • 数值运算 decimal的小数位 • Null值 任何有Null参与的表达式,结果都是Null 特别注意打印中间结果或调试语句时

  38. 必须要先定义系统临时表空间或用户临时表空间才能使用临时表必须要先定义系统临时表空间或用户临时表空间才能使用临时表 • 定义临时表不能使用模式名,其模式名固定为session。 • 使用完成后最好把临时表Drop掉。

  39. SQL Server取到SQL语句所影响的行数的方式?(@@rowcount) • DB2取到SQL语句所影响的行数的方式 – Get diagnostics GET DIAGNOSTICS v_Iupdate_Cnt=ROW_COUNT;

More Related