`
andy54321
  • 浏览: 434940 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

学习笔记:DB2 V9 管理 - 6

阅读更多
学习笔记:DB2 V9 管理 - 6
2006-12-22 17:05
                                              
                                                                                                                                                                
申明:欢迎转载,但请先告知,谢谢。
----------------------------------------------------------------------
--学习笔记:DB2 V9 管理 - 6
--彭建军
--最新更新时间:7
----------------------------------------------------------------------
DB2 9 管理 第 2 部分: 数据放置

五、创建和维护不同的 DB2 对象
 
        1、
缓冲池
        
        (1)、数据库缓冲池区域是一块内存,当从磁盘上读取一个表的索引和数据页,以便对它们进行扫描或修改时,可以用缓冲池缓存它们。缓冲池区域有助于提高数据库系统的性能,因为它允许从内存,而不是磁盘上访问数据。由于内存访问比磁盘访问要快得多,因此 DB2 对磁盘读写得越少,系统的性能就越好。
        
        当创建一个数据库时,会自动为该数据库创建一个默认的缓冲池。这个缓冲池名为 IBMDEFAULTBP,它的页宽为 4 KB,它的大小取决于操作系统。对于 Windows,默认缓冲池大小为 250 页或 1 MB;对于 UNIX,默认缓冲池大小为 1,000 页或 4 MB。默认缓冲池不能被删除,但是可以通过 alter bufferpool 命令改变它的大小。
        
        (2)、
创建一个缓冲池
        
        create bufferpool 命令有一些选项,可用于指定以下方面:
        
        缓冲池名称:指定缓冲池的名称。该名称不能用于任何其他缓冲池,也不能以字符 SYS 或 IBM 开头。
        
        immediate:规定如果系统上有足够的内存,则立即创建缓冲池。如下所述,如果数据库共享内存中没有预留足够的空间来分配新的缓冲池,那么将返回一个警告,并且缓冲池的创建将被推迟(DEFERRED)。(immediate 是默认设置。)
        
        deferred:规定在下一次数据库被停止和重新启动时再创建缓冲池。
        
        all dbpartitionnumbs:规定将缓冲池创建在数据库中的所有分区上。如果没有指定数据库分区组,那么这是默认设置。
        
        database partition group:指定将在其中创建缓冲池的数据库分区组。缓冲池将被创建在被指定的分区组所包含的所有数据库分区上。
        
        size:指定缓冲池的大小,并且以页为单位。在分区数据库中,对于存在缓冲池的所有数据库分区,这将是默认大小。
        
        numblockpages:指定在缓冲池的基于块的区域中创建的数据页的数量。numblockpages 的实际值可能与指定的值不符,因为其大小必须是blocksize 的倍数。缓冲池中基于块的区域不能超过缓冲池大小的 98%。如果将基于块的区域的大小指定为 0,则会禁用缓冲池的块 I/O。
        
        blocksize:指定在缓冲池基于块的区域中的一个给定块中的数据页的数量。块的大小必须介于 2 页与 256 页之间。默认值是 32 页。
        
        pagesize:指定缓冲池的页宽。默认页宽为 4 KB 或 4,096 字节。页宽可以按字节或千字节指定。
        
        extended storage/not extended storage:指定是否将缓冲池中受到危害的页复制到被称作扩展存储(extended storage)的辅助缓存中。从扩展存储检索数据比从磁盘检索数据更为高效,但是不如从缓冲池检索数据高效,因此它不适用于 64 位环境。
        
        定义好缓冲池的页宽和名称后,便不能更改它们。
        
        (3)、以下是一些 create bufferpool 的示例语句

        下面的语句:
        
        
create bufferpool BP1 size 25000
        
        创建一个名为 BP1 的缓冲池,其大小为 100 MB(25,000 个 4 KB 的页面)。由于没有指定页宽,缓冲池使用默认的 4 KB 页宽。由于 IMMEDIATE 选项是默认的,因此只要有足够的可用内存来满足请求,就可以立即为缓冲池分配空间并使之可用。
        
        下面的语句:
        
        create bufferpool BP2 deferred size 25000 pagesize 8 K
        
        创建一个名为 BP2 的缓冲池,其大小为 200 MB (25,000 个 8 KB 的页面)。该缓冲池使用 8 KB 的页宽。由于指定了 deferred 选项,因此直到数据库被停止并重新启动时才会为该缓冲池分配空间。
        
        2、

        
        (1)、为了在数据库中创建一个表,必须首先连接到该数据库。您还必须有实例中的 SYSADM 权限,或者数据库中的 DBADM 权限或 createtab 特权。
        
        当创建一个表时,可以指定以下方面:
        
        ● 模式
        
        ● 表名
        
        ● 列定义
        
        ● 主/外键
        
        ● 用于数据、索引和大型对象的表空间
        
        (2)、如果在创建一个表时没有使用 in 子句,那么将按以下顺序放置表数据(及其索引和 LOB 数据):
        
        ● 如果有 IBMDEFAULTGROUP 表空间,并且该表空间的页宽足够大,则放在这个表空间中。
        
        ● 放在一个用户创建的表空间中,该表空间具有能满足表的最小页宽。
        
        ● 如果有 USERSPACE1 表空间,并且该表空间的页宽足够大,则放在 USERSPACE1 中。
        
        IN、INDEX IN 和 LONG IN 子句指定将在其中存储常规表数据、索引和大型对象的表空间。注意,这只适用于 DMS 表空间。
        
        更详细的描述,请参考以前的笔记,这里就不再描述了。
        
        (3)、
获取表信息
        
        可以使用以下命令来获取表信息:
        
        列出用于当前用户的表
        
        list tables
        
        列出数据库中定义的所有表
        
        list tables for all
        
        列出指定模式中的表
        
        list tables for schema schemaname
        
        显示指定的表的结构
        
        describe table tablename
        
        3、
索引
        
        (1)、索引可以:
        
        ● 按升序或降序排列(默认情况下,如果没有指定,则按升序)。
        
        ● 是惟一的(unique)或非惟一(non-unique)的(默认情况下,如果没有指定,则为非惟一的)。
        
        ● 是复合的。
        
        ● 用于实施聚合。
        
        ● 是双向的 —— 这是由 allow 或 disallow reverse scans 控制的。
        
        ● 包括附加的列 —— 这只适用于惟一索引。
        
        (2)、下面有一些 create unique 语句演示了这些选项:
        
        create unique index itemno on albums (itemno) desc
        
        create index clx1 on stock (shipdate) cluster allow reverse scans
        
        create unique index incidx on stock (itemno) include (itemname)
        
        create index item on stock (itemno) disallow reverse scans collect detailed statistics

        
        (3)、关于标识列,标识列(identity column)是表中的一个数字列,它导致 DB2 为每个被插入表中的行生成一个惟一的数值。一个表最多只能有一个标识列。这个列的值可以通过 DB2 always 或 by default 两种方式生成:
        
        ● 如果这些值按 always 方式生成,则总是由 DB2 数据库生成这些值,应用程序不能提供显式的值。
        
        ● 如果这些值按 by default 方式生成,那么可以由应用程序显式地提供这些值;只有在应用程序没有提供值的情况下,才由
        
        DB2 生成一个值。 因此,DB2 不能保证这些值是惟一的。该选项用于数据传播,或者装载和卸载一个表。
        
        一般地,定义一个标识列可以使用如下的语句:
        
        ……Column1 INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)……
        
        5、
视图
        
        (1)、视图是从一个或多个基本表、别名或视图中派生出来的,在检索数据时与基本表可以互换使用。当更改一个视图中的数据时,表本身中的数据也随之更改。通过创建视图,可以限制对敏感数据的访问,同时允许对其他数据的访问。
        
        视图中的数据并不是存储在表之外的。换句话说,虽然视图的定义在系统编目中占用了空间,但是视图本身并不占用数据库中的空间。
        
        视图的创建者至少需要拥有视图定义中引用的基本表上的 SELECT 特权。
        
        关于所有已有视图的信息存储在:
        
        ● SYSCAT.VIEWS
        
        ● SYSCAT.VIEWDEP
        
        ● SYSCAT.TABLES
        
        (2)、
关于with check option
        
        with check option 指定以下约束,即通过一个视图插入或更新的每一行必须符合视图的定义。不符合视图定义的行就是不满足视图的搜索条件的行。
        
        例如,下面的命令:
        
  
      create view emp_view2 (empno, empname, deptno) AS (SELECT id, name,
          dept FROM employee WHERE dept = 10)with check option
        
        当该视图被用于插入或更新新的值时,with check option 限制 dept 列的输入值。
        
        [示例]-[创建视图]:
        
        CREATE VIEW EMPSALARY AS SELECT EMPNO, EMPNAME, SALARY FROM PAYROLL,
          PERSONNEL WHERE EMPNO=EMPNUMB

        
        6、
约束
        
        (1)、DB2 中有很多类型的约束:
        
        ● 参照完整性约束
        
        ● 惟一性约束
        
        ● 检查约束
        
        ● 信息约束
        
        约束是不能直接修改的,必须先删除约束,然后用您想要的特征创建一个新的约束。
        
        下面分别讨论每种约束。
        
        (2)、
参照完整性约束
        
        在创建数据库,或创建数据库后使用 alter table 语句时,将定义参照完整性约束。
        
        建立参照完整性的子句有:
        
        ● primary key 子句
        
        ● unique constraint 子句
        
        ● foreign key 子句
        
        ● references 子句
        
        例如:
        
        
create table artists (artno INT, ... primary key (artno) foreign key dept (workdept)
          references department on delete no action)
        
        我们来看看各种不同的参照完整性规则。
        
        插入规则
        
        ● 有一条隐含的规则,即当被插入行的父行不存在时,不能插入。
        
        删除规则
        
        ● 限制:如果仍有从属的行,则父行不能删除。
        
        ● 级联:删除父表中的一行同时也会删除从属表中所有相关的行。
        
        ● 无动作(默认情况):在应用所有其他参照约束后,对于每个子行,都强制要求父行的存在。
        
        ● 设置 Null:外键字段设为 null;其他列保持不变。
        
        更新规则
        
        ● 限制: 如果从属表中的一行与键的初值相匹配,那么对父键的更新将被拒绝。
        
        ● 无动作(默认情况):如果在从属表中没有匹配的行,那么对父键的更新将被拒绝。
        
        (2)、
惟一性约束
        
        惟一性约束可以用作一个外键约束的主键,就像显式声明的主键一样。这允许将 RI 约束(请参阅 参照完整性约束)放在同一个表中的不同列上。
        
        惟一性约束迫使列中的值是惟一的;列不能包含 null 值。
        
        (3)、
检查约束
        
        检查约束用于强制实施表级的数据完整性。它迫使表中的值符合约束。随后所有的插入和更新都必须遵从表上定义的约束,否则该语句将失败。
        
        如果表中已有的行不满足约束,则不能定义该约束。为了加快添加大量数据时的速度,可以关闭约束检查,但是表将处在 CHECK PENDING 状态。
        
        (4)、
信息约束
        
        信息约束是可以由优化器使用的规则,但不是在运行时实施。对于插入、更新或删除操作,其他约束可能导致额外的开销,因此,如果应用程序已经对数据进行了验证,那么使用信息约束也许是更好的方案。
        
        信息约束可以是:
        
        ● ENFORCED:该约束由数据库管理器在常规操作(例如插入、更新或删除)期间实施。
        ● NOT ENFORCED:如果使用该约束,当表中任何数据违反该约束时,DB2 可能返回错误的结果。
        ● ENABLE QUERY OPTIMIZATION:在适当环境下,该约束可用于查询优化。
        ● DISABLE QUERY OPTIMIZATION:该约束不能用于查询优化。
        
        7、
触发器
        
        触发器(trigger)定义一组动作,这组动作由指定的基本表上的一个动作激活或触发。被触发的动作可能导致对数据库的其他更改,或产生一个异常。触发器可以在插入、更新或删除之前 或之后 触发。
        
        触发器用于:
        
        ● 验证,这类似于约束,但是更为灵活。
        
        ● 调节,允许将新的数据修改或调整为一个预定义的值。
        
        ● 完整性,类似于参照完整性,但是更为灵活。
        待续……
        更多相关信息
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics