数据库存储模型
--------------------------------
DB
partition groups
Tablespaces
Containers
表空间的区分:
-----------------------------------
系统管理的空间(System-Managed Space,SMS):在这里,由操作系统的文件系统管理器分配和管理空间。在 DB2 9 之前,如果不带任何参数创建数据库或表空间,就会导致所有表空间作为 SMS 对象创建。
数据库管理的空间(Database-Managed Space,DMS):在这里,由数据库管理程序控制存储空间。这种表空间本质上是一种特殊用途的文件系统实现,可以最好地满足数据库管理程序的需要。
DMS 的自动存储(Automatic Storage With DMS):自动存储实际上不是一种单独的表空间类型,而是一种处理 DMS 存储的不同方式。 数据库的创建:
DB2默认表空间:
------------------------------------
在创建数据库时,DB2 会创建许多文件,包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:
SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。
DB2穿件创建数据库实例:
-------------------------------------------------
( 1) CREATE DATABASE MY1STDB
( 2) DFT_EXTENT_SZ 4
( 3) CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4) (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5) EXTENTSIZE 8
( 6) PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8) ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10) (FILE 'C:\TS\USERTS.DAT' 121)
(11) EXTENTSIZE 24 (12) PREFETCHSIZE 48
--------------------------------------
我们来详细地看看每一行:
1. CREATE DATABASE:这个语句定义要创建的数据库的名称。
2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。
3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。
4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。
5. EXTENTSIZE 8:EXTENTSIZE 是 8 个页面。
6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。
7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。
8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。
9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。
10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。
11. EXTENTSIZE 24:USER 表空间的 EXTENTSIZE 是 24 个页面。
12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。
表空间由区段(extent)组成,也就是说区段是表空间的容器的一个空间单元;区段又由页面组成;表数据都放置在页面上(除了 LOB 和 long varchar 之外)。 约束性:
主表和附表的关系,可以指定四个规则:RESTRICT、NO ACTION、CASCADE 和 SET NULL。
如果指定了 RESTRICT 或 NO ACTION,那么 DB2 不允许删除父行。必须首先删除从属表中的行才能删除父表中的行。这条规则是默认设置。
如果指定了 CASCADE,那么从父表中删除行时还会自动地删除所有从属表中的从属行。
果指定了 SET NULL,那么从父表中删除父行时从属行中的外键值被设置为空(如果可以为空的话) 视图: CREATE VIEW NONFICTIONBOOKS AS SELECT * FROM BOOKS WHERE BOOKTYPE = 'N' WITH CHECK OPTION 这个视图限制用户只能看到BOOKTYPE=’N’的书;
另外,它还防止用户插入 BOOKTYPE 列的值不为 N 的行,并防止把现有行中 BOOKTYPE 列的值更新为 N 以外的值。例如,下列语句将不再允许使用: INSERT INTO NONFICTIONBOOKS VALUES (...,'F'); UPDATE NONFICTIONBOOKS SET BOOKTYPE = 'F' WHERE BOOKID = 111
索引:
CREATE INDEX idx_policyno ON iacmain (policyno) 在默认情况下,索引按升序创建。
CREATE INDEX policyno1 ON iacmain (policyno DESC, companycode ASC)
双向索引 CREATE INDEX policyno2 ON iacmain (paidpremium) ALLOW REVERSE SCANS
当查询时,索引会自动引入