知识大全 Oracle 数据表分区的策略

Posted

篇首语:粉丝对我来说都是浮云,所以我很喜欢多云的天气。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle 数据表分区的策略相关的知识,希望对你有一定的参考价值。

Oracle 数据表分区的策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  本文描述通过统计分析出医院信息系统需分区的表 对需分区的表选择分区键 即找出包括在你的分区键中的列(表的属性) 对大型数据的管理比较有意义 本文的工作在Oracle 下实现     Oracle虽然是一个大型的DBMS 但如果不对记录比较多的表进行处理 仍然发挥不了Oracle管理大型数据的强大功能 因此对某些表进行分区 具有如下优点     分区表中每个分区可以在逻辑上认为是一个独立的对象     可以在一个表中的一个或多个分区上进行如删除 移动 析分等维护操作 而不会影响其它分区 具有分区独立性     如果选择合适的分区策略 会大大的加快数据的查询速度      一 找出需分区的表    本节描述通过统计分析出医院His系统需分区的表 对需分区的表找出包括在你的分区键中的列(表的属性) 即选择分区键      基于访问频度找出需分区的表    Oracle i允许访问数据库中的审核信息 借助于收集的审核信息 设计者能够确定哪些表的数据是真正最频繁访问的 即找出那些表 需要进行分区     打开审核 在作为SYS或SYSSTEM登录到数据库后 动行如下脚本 打开对象的审核功能     set echo off feed off ver off pages   spool audon sql  select audit select on ||owner|| ||object_name|| by  access;   from dba_objects  where object_type in ( VIEW TABLE ) and owner in  ( ORDADM );  spool off  set echo on feed on ver on    这些代码的运行将产生 audon sql 的输出文件 它包含下面清单中所示格式的语句    audit select on ORDADM DOCTOR_ORDERS by access;  audit select on ORDADM GROUP_ORDER_ITEMS by access;  audit select on ORDADM GROUP_ORDER_MASTER by access;  audit select on ORDADM ORDERS by access;  audit select on ORDADM ORDERS_COSTS by access;  audit select on ORDADM ORDERS_SHEET_IMAGE by access;  audit select on ORDADM VITAL_SIGNS_REC by access;    使用命令@audon sql激活上述代码以打开审核功能收集收集审核信息 建立一个表以保存概要信息     create table aud_summary (  obj_name varchar ( )   owner varchar ( )   hits number);    将审核信息从dba_audit_object表中取出并装入概要表中     insert into aud_summary  select obj_name owner count(*)  from dba_audit_object  group by obj_name owner;    关闭审核     set echo off feed off ver off pages   spool audoff sql  select noaudit select on ||owner|| ||object_name||   by access;   from dba_objects  where object_type in ( VIEW TABLE ) and owner in  ( ORDADM );  spool off  set echo on feed on ver on    这些代码的运行将产生 audoff sql 的输出文件     使用命令@ audoff sql激活上述代码以关闭上述对象的审核功能     清除审核信息     delete sys aud$    分析审核信息    col obj_name form a   col owner form a   col hits form   selec obj_name owner hits from aud_summary;  OBJ_NAME OWNER COUNT(*)     DOCTOR_ORDERS ORDADM   DRUG_STOCK PHarmACY   GROUP_ORDER_ITEMS ORDADM   GROUP_ORDER_MASTER ORDADM   ORDERS ORDADM   ORDERS_COSTS ORDADM     以上是HIS系统临床医嘱部分 小时内对表的访问情况 从上面的查询得表     表    >  group_order_master( 医嘱套攴主记录) group_order_item(医嘱套攴明细) 表的行数比较少 不适合分区 drug_stock(药品库存)虽然存取频率比较高 但表的行数比较少 因此也不适合分区 我们选择表的行数比较多 存取频率比较高的表作分区处理 如 doctor_orders orders orders_costs 考虑到doctor_orders是医生工作站上医生开的医嘱 orders是由doctor_orders生成 护士工作站上执行的医嘱 两个表结构类似 而医嘱与药品 卫生材料 计费联系比较密切的是Orders 因此重点介绍对表orders的处理      基于列值选择分区键    使用Sql*plus下用命令Analyze收集末分区表的统计信息 按照Oracle推荐的取样 %进行分析 并将统计结果保存在数据字典中     Analyze table ORDADM ORDERS estimate statistics  sample percent;    对DBA_TAB_COLUMNS数据字典视图进行查询    产生表     select table_name column_name num_distinct  from DBA_TAB_COLUMNS  where owner like ORDADM ;    表    >  从表 中 我们可以看到欲分区表的各个候选分区键的分布频谱 ORDER_CODE(医嘱代码)键值没有出现一种均匀分布 用它作分区键 明显不合适     ORDER_CLASS(医嘱类别代码) ORDERING_DEPT(开医嘱科室代码) 键值出现均匀分布 如用它的各个键值作基于范围的分区 每个分区具有的记录数比较均匀 但这种方法对于每天增加上万条记录的表来看 显然不是最优的 如果选用START_DATE_TIME(医嘱开始时间)建立范围分区 每月的数据建立一个分区 在每个分区内基于ORDERING_DEPT建立散列子分区 每月的数据形成一个组合分区 会使每个分区的记录数分布均匀 查询速度提高 易于备份和删除 因为大多数的统计和查询是在一个月的范围内 而且从实际的查询效果看 跨月和跨年数据的统计和查询速度 也比未分区的时候大大缩短 效果非常明显      二 分区表的定义    Create Table orders (  PATIENT_ID varchar ( ) not null ORDER_NO number( ) ORDER_SUB_NO number( )      ORDER_CLASS char( )   ORDER_TEXT varchar ( )   ORDER_CODE varchar ( )      START_DATE_TIME date  STOP_DATE_TIME date     ORDERING_DEPT varchar ( )  storage (initial M next M)  PARTITION BY RANGE(START_DATE_TIME)  SUBPARTITION BY HASH(ORDER_CODE)  SUBPARTITIONS STORE IN (ordersub ordersub ordersub )  (PARTITION orders VALUES LESS THAN (to_date( : : yyyy mm dd hh :mi:ss ))  tablespace Tsp_Orders   PARTITION orders   VALUES LESS THAN (to_date( : : yyyy mm dd hh :mi:ss ))  tablespace Tsp_Orders   PARTITION orders   VALUES LESS THAN (to_date( : : yyyy mm dd hh :mi:ss ))  tablespace Tsp_Orders      PARTITION orders   VALUES LESS THAN (to_date( : : yyyy mm dd hh :mi:ss ))  tablespace Tsp_Orders  (SUBPARTITION ordersub TABLESPACE Tsp_Orders SUBPARTITION ordersub TABLESPACE Tsp_Orders   SUBPARTITION ordersub TABLESPACE Tsp_Orders));    在建立的Orders表中 按每月一个分区 从 年 月开始 年 月止 共 个分区 PARTITION BY RANGE(START_DATE_TIME) 子句 表示用表的START_DATE_TIME属性建立范围分区 具体的每个分区名 时间范围 在PARTITION子句定义 SUBPARTITION BY HASH(ORDER_CODE)子句 表示用表的ORDER_CODE 属性 在每个分区下建立散列子分区 具体的每个子分区名 所在表空间 在UBPARTITION子句定义     用下面ALTER TABLE数据定义语句为Orders建立约束和索引     ALTER TABLE Orders ADD CONSTRAINT Pk_Orders KEY (Patient_id   Visit_id Order_no Order_sub_no) USING INDEX PCTFREE TABLESPACE Tsp_Orders;    表 是用select count(*) from orders partition (分区名)语句 查询出的名分区的记录数     表    >     三 分区表的维护操作    增添分区     Alter Table orders Add partition orders   Aalues less (to_date( : : yyyy mm dd hh : mi:ss ))  Tablespace Tsp_Orders;    删除分区     Alter Table table_name Drop Partition partition_name;    裁断分区:    Alter Table table_name Truncate Partition partition_name Storage;     Oracle数据表分区小知识     为了简化数据库大表的管理 O r a c l e 及以后版本推出了分区选项 分区将表分离在若干不同的表空间上 用分而 cha138/Article/program/Oracle/201311/18191

相关参考

知识大全 oracle建立的分区表数据问题

  建立一个用户使用默认表空间tablespace  建立一个分区表数据存放在不同的表空间tablespacetablespacetablespace  如果把此用户的数据导出来为dmp格式  在另外

知识大全 Oracle数据库分区表操作方法

Oracle数据库分区表操作方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在大型的企业应用

知识大全 Oracle数据库中分区表的操作方法

Oracle数据库中分区表的操作方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在大量业务数

知识大全 讲解Oracle移动数据文件到新分区的过程

讲解Oracle移动数据文件到新分区的过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!此过程用s

知识大全 Oracle数据库的安全策略

Oracle数据库的安全策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle是关系型

知识大全 Oracle数据库系统性能优化策略

Oracle数据库系统性能优化策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一个数据库系统

知识大全 深入分析Oracle数据库的安全策略

深入分析Oracle数据库的安全策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle

知识大全 ORACLE入门之数据库安全策略

ORACLE入门之数据库安全策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据库安全性问题

知识大全 Oracle学习应用之数据库性能优化策略

Oracle学习应用之数据库性能优化策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据库系

知识大全 oracle存储过程创建表分区实例

  用存储过程创建数据表:创建时注意必须添加authidcurrent_user如果创建的表已存在存储过程继续执行但如不不加此关键语句存储过程将出现异常这个语句相当于赋权限例创建语句如下  复制代码代