博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DBA2 第十章:管理方案对象

Posted on 2011-09-22 20:58  little健健  阅读(300)  评论(0编辑  收藏  举报

表类型

  • 普通(按堆组织的)表:数据以无序集合(堆)方式存储
  • 分区表:数据被分为多个更小、更易管理的片段
  • 按索引组织的表 (IOT):数据(包括非键值)按顺序存储在 B 树索引结构中
  • 聚簇表:一个或多个表中的相关数据存储在一起

分区

  • 概览
    • 是“超大型”表或索引的片段
    • 存储在自己的段中
    • 用于提高性能和易管理性
  • 特性
    • 相同的逻辑属性:列、约束条件和索引均相同
    • 不同的物理属性:存储在不同的表空间中
    • 对应用程序是透明的
    • 多种分区方法
      • 范围分区:根据列值的逻辑范围映射行
      • 散列分区:根据分区键的散列值映射行
        • CREATE TABLE regions  
          (region_id NUMBER, region_name VARCHAR2 (25))
          PARTITION BY HASH (region_id)
          PARTITIONS 4 STORE IN (tbs1, tbs2, tbs3, tbs4);


      • 列表分区:根据 DBA 提供的离散值列表映射行
      • 范围-散列分区:使用范围方法映射行,然后在每个范围分区内创建散列子分区
      • 范围-列表分区:先根据某一范围的值映射行,然后根据离散值映射行
  • 创建分区
    • 管理-->表-->创建 -->分区选项卡
  • 分区维护
    • 管理-->表-->编辑-->分区选项卡

IOT 

  • 按索引组织的表和堆表
    • 与堆表相比较,IOT
      • 可以基于键更快地访问表数据
        • 逻辑行ID 通过以下两种方法实现对IOT 中各行的可能的最快访问
          • 物理推测法,访问时间相当于对物理行ID 的访问时间
          • 不推测(或在推测错误后)访问,这将对IOT 执行主键访问
      • 不会复制主键值的存储区
      • 要求的存储空间更少
      • 使用二级索引和逻辑行 ID
      • 可用性更高,因为表重组时不会使二级索引失效
    • IOT 有以下限制
      • 必须有一个不是 DEFERRABLE 的主键
      • 不能聚簇
      • 不能使用组合分区
      • 不能包含类型为 ROWID 或 LONG 的列
  • 创建按索引组织的表
    • CREATE TABLE country
      ( country_id CHAR(2)
      CONSTRAINT country_id_nn NOT NULL,
      country_name VARCHAR2(40),
      currency_name VARCHAR2(25),
      currency_symbol VARCHAR2(3),
      map BLOB,
      flag BLOB,
      CONSTRAINT country_c_id_pk
      PRIMARY KEY (country_id))
      ORGANIZATION INDEX
      TABLESPACE indx
      PCTTHRESHOLD 20
      OVERFLOW TABLESPACE users; --设置代表块大小
      百分比的阈值,指定将行转到溢出区中


  • 概览
    • 簇是由共享相同数据块的一个或多个表构成的组
    • 由于聚簇表是相互联接的,因此减少了磁盘I/O 操作,加快了访问时间。
    • 对于键值相同的所有行,每个簇键值只存储一次;因此它使用的存储空间较少。
    • 对聚簇表执行全表扫描时,速度通常要比非聚簇表慢
  • 类型
    • 索引簇
      • 索引簇使用索引(称为簇索引)来维护簇中的数据。要存储、访问或维护索引簇中的数据,必须有簇索引。
      • 簇索引可存储空键值。簇索引中每个键值只有一个条目
    • 散列簇
      • 散列簇使用散列算法(用户定义的或系统生成的)来计算某行的位置
    • 已排序的散列簇
      • 概览
        • 用于存储按非主键列排序的数据
          • 簇键值都已经过散列处理
          • 对应于特定簇键值的行将根据排序键进行排序
        • 用于保证行顺序可按查询返回,而无需对数据进行排序
          • 行按特定簇键值的升序或降序返回
          • 按升序检索行时,ORDER BY 子句不是必需的
      • 示例
        • 第一步是创建已排序的散列簇
        • 第二步,创建实际的表,同时使用CLUSTER 子句指定已排序的散列簇的链接。
        • CREATE CLUSTER calls_cluster
          ( origin_number NUMBER
          , call_timestamp NUMBER SORT
          , call_duration NUMBER SORT)
          HASHKEYS 10000
          SINGLE TABLE HASH IS origin_number
          SIZE 50;


          CREATE TABLE calls
          ( origin_number NUMBER
          , call_timestamp NUMBER
          , call_duration NUMBER
          , other_info VARCHAR2(30))
          CLUSTER calls_cluster(
          origin_number,call_timestamp,call_duration
          );
      • 基本体系结构

  • 簇的应用场合
  • 何时不使用簇
    • 应用程序只是偶尔使用联接表的查询或需要频繁修改其公用列值。
    • 经常只对其中一个聚簇表执行全表扫描。
    • 一个簇键值的所有行的数据超过了一个或两个Oracle 块
  • 何时不使用散列簇
    • 如果表不断增长或应用程序需要频繁修改簇键值
    • 如果应用程序经常执行全表扫描,必须为散列簇分配大量的空间以满足表增长需要



DBA 任务

  • 包括
    • 估计新表的大小
    • 分析增长趋势
    • 管理优化程序统计信息
    • 联机重组方案对象
  • 估计资源使用量
    • 创建表-->估计表大小-->估计行数-->估计行大小
  • 分析增长趋势
    • 表-->编辑-->段
  • 管理优化程序统计信息
    • 表-->管理优化程序统计信息
  • 联机重组方案对象
    • 修改方案对象(例如表或索引)的逻辑结构或物理结构
    • 对用户是透明的
    • 空间要求
  • 手动联机重组的基本步骤
    1. 验证表是否是联机重组的候选对象。DBMS_REDEFINITION.CAN_REDEF_TABLE
    2. 创建一个临时表。CREATE TABLE
    3. 启动重新定义过程。DBMS_REDEFINITION.START_REDEF_TABLE
    4. 复制相关对象。DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS 和DBMS_REDEFINITION.CONS_ORIG_PARAMS  
    5. 查询 DBA_REDEFINITION_ERRORS 视图,检查是否有错误。
      • SELECT object_name, base_table_name, ddl_txt  
        FROM DBA_REDEFINITION_ERRORS;
    6. 同步临时表  DBMS_REDEFINITION.SYNC_INTERIM_TABLE
    7. 完成重新定义  DBMS_REDEFINITION.FINISH_REDEF_TABLE
    8. 删除临时表  DROP TABLE … PURGE