栏目分类
系统管理 | 安装启动 | xwindow | 基础知识 | 存储备份 | 内核技术 | 桌面应用 | 设备驱动 | Linux汉化 | 系统管理 | PAM认证 | drivers | rpm | quota | 灾难恢复
Linux数据库 | oracle | 数据库理论 | MYSQL | PostGreSQL
网络管理 | nis技术 | ntp | 多媒体 | dhcp | 网络基础 | ldap | 美化汉化 | proxy | samba | bind | iptables | 集群 | nfs | cvs | ftp服务 | email | 网络配置 | 网络安全 | apache | vpn | ssh | 网络管理 | Linux服务器 | Linux安全 | subversion | 网络监控
编辑工具 | emacs | vi | eclipse
linux新手入门 | 指令大全 | 输入法类 | Linux安装 | 常用命令 | 软件使用
发行版 | 其它Unix | bsd | Gentoo/lFS | windows | solaris | IBM | debian
其他 | 非技术类 | 业界动态 | 小说笑话 | 杂项工具 | 速度优化 | Linux认证 | 资讯动态 | 办公自动化 | xml | vc | 学习方法 | 手机技巧
Linux编程 | shell | perl | python | 编程技术 | kernel | CC++编程 | Python编程 | Perl编程 | PHP编程 | discuz | java/jsp | zope | html技术
排行榜
·oracle数据库exp/imp命令详解
·oracle数据库SQLPlus使用技巧
·表空间操作详解
·如何将excel数据导入oracle中
·oracle大表分区的一点点心得
·pl/sqldeveloper工具几点妙用
·OracleSQL语言
·ORACLE用户常用数据字典的查询使用方法
·oracle的字段类型
·ORACLE中的数据库、服务名、实例的概念
·oracle学习个人总结
·sqlplus常用set指令
·SQLPlus使用技巧点滴
·Oracle高级复制
·数据库乱码的原因与解决
·RedHat9.0操作的oracle9i安装
·如何在你的Linux机器上安装运行Oracle
·Installing Oracle9i on RedHat Linux 7.1,7.2,7.3,8.0,9 and on RHAS2.1
·Linux/Unix下ODBC的安装、配置与编程
·Oracle企业管理器(EnterpriseManager)完全参考

    您现在的位置: Linux宝库 >> Linux >> Linux数据库 >> oracle >> 文章正文
oracle大表分区的一点点心得
Linux宝库 收集整理  作者:Linux宝库  时间:2007-12-31  收藏本站
来自:http://doc.linuxpk.com/3469.html
联系:linuxmine#gmail.com
分类:[oracle]

  最近在做一个客户关系管理系统,项目做的到不是非常成功,可还是学到了不少的知识,由于数据量很大,没有专门的oracle数据库人员支持,对数据库优化管理等也只有我这个约懂一点的人上了。在对数据库优化上有一点点心得写出来希望能同大家一起学习和交流。

  数据库大表的优化:采用蔟表(clustered tables)及蔟索引(Clustered Index)

  蔟表和蔟索引是oracle所提供的一种技术,其基本思想是将几张具有相同数据项、并且经常性一起使用的表通过共享数据块(data block)的模式存放在一起。各表间的共同字段作为蔟键值(cluster key),数据库在访问数据时,首先找到蔟键值,以此同时获得若干张表的相关数据。蔟表所能带来的好处是可以减少I/O和减少存储空间,其中我更看重前者。采用表分区(partition)

  表分区技术是在超大型数据库(VLDB)中将大表及其索引通过分区(patition)的形式分割为若干较小、可管理的小块,并且每一分区可进一步划分为更小的子分区(sub partition)。而这种分区对于应用来说是透明的。通过对表进行分区,可以获得以下的好处:

  1)减少数据损坏的可能性。

  2)各分区可以独立备份和恢复,增强了数据库的可管理性。

  3)可以控制分区在硬盘上的分布,以均衡IO,改善了数据库的性能。

  蔟表与表分区技术的侧重点各有不同,前者侧重于改进关联表间查询的效率,而表分区侧重于大表的可管理性及局部查询的性能。而这两项对于我的系统来说都是极为重要。由于本人技术限制,目前尚不确定两者是否可以同时实现,有那位在这方面有经验的给点指导将不胜感激。

  在两者无法同时实现的情况下,应依照需实现的功能有所取舍。综合两种模式的优缺点,我认为采用表分区技术较为适用于我们的应用。

  Oracle的表分区有以下几种类型:

  1)范围分区:将表按某一字段或若干个字段的取值范围分区。

  2)hash分区:将表按某一字段的值均匀地分布到若干个指定的分区。

  3)复合分区:结合了前面两种分区类型的优点,首先通过值范围将表进行分区,然后以hash模式将数据进一步均匀分配至物理存储位置。

  综合考虑各项因素,以第三种类型最为优越。(本人实在技术有限仅采用了第1种范围分区,因为比较简单,便于管理)

  优化的具体步骤:

  1.确定需要优化分区的表:

  经过对系统数据库表结构和字段,应用程序的分析,现在确定那些大表需要进行分区:

  如帐户交易明细表acct_detail.

  2.确定表分区的方法和分区键:

  分区类型:采用范围分区。

  分 区 键:

  按trans_date(交易时间)字段进行范围分区.

  3.确定分区键的分区范围,及打算分多少分区:

  如:帐户交易明细表acct_detail.

  根据字段(trans_date)分成一下分区:

  1).分区1:09/01/2003

  2).分区2:10/01/2003

  3).分区3:11/01/2003

  4).分区4:12/01/2003

  5).分区5:01/01/2004

  6).分区6:02/01/2004

  该表明显需要在以后增加分区。

  4.建立分区表空间和分区索引空间

  1).建立表的各个分区的表空间:

  1.分区1:crm_detail_200309

  CREATE TABLESPACE crm_detail_200309 DATAFILE

  ‘/u1/oradata/orcl/crm_detail_20030901.dbf’

  SIZE 2000M EXTENT MANAGEMENT LOCAL UNIFORM size 16M;

  其它月份以后同以上(我在此采用oracle的表空间本地管理的方法)。

  2). 建立分区索引表空间

  1.分区1:index_detail_200309

  CREATE TABLESPACE index_detail_200309 DATAFILE

  ‘/u3/oradata/orcl/index_detail_20030901.dbf’

  SIZE 2000M EXTENT MANAGEMENT LOCAL UNIFORM size 16M;

  5.建立基于分区的表:

  create table table name

  (

  ........

  enable row movment --此语句是能修改行分区键值,也就是如不添加该 句不能修改记录的分区键值,不能使记录分区迁移

  PARTITION BY RANGE (TRANS_DATE)

  (

  PARTITION crm_detail_200309 VALUES LESS THAN

  (TO_DATE (‘09/01/2003’,’mm/dd/yyyy’

  TABLESPACE crm_detail_200309,

  其他分区.....

  ;

  6.建立基于分区的索引:

  create index index_name on table_name (分区键+…)

  global --这里是全局分区索引,也可以建本地索引

  PARTITION BY RANGE (TRANS_DATE)

  (

  PARTITION index_detail_200309 VALUES LESS THAN

  (TO_DATE ('09/01/2003','mm/dd/yyyy' )

  TABLESPACE index_detail_200309,

  其他索引分区...

  ;

  对表的分区就这样完成了,第一次主要确定表分区的分区策约是最重要的,可我觉得对表分区难在以后对表分区的管理上面,因为随着数据量的增加,表分区必然存在删除,扩容,增加等。在这些过程中还牵涉到全局等索引,因为对分区表进行ddl操作为破坏全局索引,故全局索引必须在ddl后要重 rebuild.

  以上写的很乱也很差,希望大家多多谅解和指点。本文来自:http://doc.linuxpk.com/3469.html
发表您的高见!

·上一篇:
oracle里常用命令
·下一篇:oracle数据库的性能调整
 
     最新更新
·shutdown immediate 时间很久解决方法
·免安装Oracle运行pl/sql developer
·oracle服务启动停止方法
·使用智能优化器提高Oracle性能
·Linux下通过VNC安装Oracle
·fedora 8上安装oracle 10g
·有关Oracle的架构的基础知识简介
·DB2数据库与Oracle数据库之间远程复制
·基于OracleADF的应用程序开发过程
·ASP.NET2.0实现依赖Oracle的缓存策略
·简单介绍有关Oracle数据库备份技巧
·在Oracle的网络结构中解决连接问题
·Oracle数据库备份与恢复的三种方法
·详细介绍:Oracle9i的各技术特征(1)
·有关Oracle数据库10g中的分区功能
·教你如何来恢复一个丢失的数据文件
·WindowsXP下安装Oracle9i问题二则
·Oracle等商家关注开源问题带来的冲击
·MySQL即将成为下一个Oracle?
·数据库竞争激烈甲骨文推免费版XE
·MySQL开源数据库优势打动中小企业
·Oracle与开源数据库:自由就是力量
·Oracle9i数据库WITH查询语法小议
·Oracle的TNS-12502错误原因及解决
·Oracle数据库的安全策略分析(一)
·如何应对ORACLE数据库的部分面试题目
·Oracle中使用自治事务保存日志表条目
·详细介绍:Oracle9i的各技术特征(2)
·利用Oracle许可实现更好控制Linux
·Oracle数据库网络与安全之FAQ汇集