- 浏览: 557494 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (340)
- Spring (4)
- Hibernate (2)
- Linux (34)
- Oracle (145)
- Eclipse (1)
- UML (1)
- HTML&&JAVASCRIPT (11)
- JAVA (33)
- 设计模式 (1)
- 版本控制 (1)
- wrap框架 (3)
- IBATIS (5)
- Ruby (1)
- DWR (1)
- MINA (11)
- JBPM (2)
- 缓存技术 (4)
- 网络 (3)
- 应用服务器 (1)
- GWT (5)
- 杂谈 (2)
- ICE (4)
- XML (2)
- ArcGis (2)
- Flex (8)
- junit单元测试 (1)
- SNMP (1)
- 存储 (1)
- office (1)
- MongoDB (0)
- Greenplum (3)
- 管理点滴 (1)
- C++ (6)
- 网络入门 (3)
- Tomcat (7)
- JMX (0)
- webservice (1)
- Oracle的10046事件 (1)
- Library cache内部机制详解 (1)
- expdp通过dblink来导入 (1)
最新评论
-
yuanliangding:
有没有关于mock的更多知识。
基于mock对象和JUnit框架简化Spring Web组件单元测试 -
saup007:
ssh端口不是22,怎么搞呢?
Greenplum 学习笔记 -
springmvc-freemarker:
java开源项目源码实例下载
Apache上全部JAVA开源项目简介 -
bobbell:
哇塞,你真厉害,整理的非常全面。我是一个java barcod ...
Greenplum 学习笔记 -
wsj55133245513324:
这不是bug,你将日志级别从debug提升到INFO 就好了 ...
Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
http://www.sina.com.cn 2006年07月26日 10:27 中国计算机报 | ||||||||||
<!-- 正文内部文字导航 : begin --><!-- 正文内部文字导航 : end -->
作者:摩托罗拉公司软件工程师 冯昕 1 简介 随着信息业的发展,在企业级数据库应用中,经常会有一些几十GB,上百GB的数据表。这些大数据量表的设计,维护及其备份都是数据库管理中的重点及其难点。本文就从设计<!--NEWSZW_HZH_BEGIN-->
2 设计 2.1 大表时效性 大数据量表的数据量一般来说是跟时间成正比的,时间越久,数据量越大。 在设计阶段首先要考虑这些大表的时效性。 通常情况,在一定的时间区间,数据的访问频度比较大,超过这个区间,数据的访问频度极小。这个时间区间根据不同的应用类型而不同,通常是几个月。超过这个时间区间的数据可以认为是历史数据,数据访问的可能性不打。在企业应用中,并不是所有的数据都需要保留在生产数据库中,对于这些历史数据,可以考虑离线存放,或者是存放在另外的数据库中,比如数据仓库等。 大表的时效性可以通过在表上加时间戳列来实现。 2.2 使用分区表 Oracle 8以后提供了分区表的功能,分区表可以把一个表的数据从物理和逻辑上分割成小的区域。 Oracle支持非常大的分区表,一个对象可以允许多达64000个分区。对于大表来说,使用分区表是首选方案。 分区表可以改善表的维护、备份、恢复及查询性能。 分区表有4种分区方式: n Range Partitioning n Hash Partitioning n Composite Partitioning n List Partitioning 对于有时效性的大表,可以采用按时间分区的 Range Partitioning表,例如按天分区的分区表。 CREATE TABLE Test( DATATIME DATE NOT NULL, P1 NUMBER NULL, P2 NUMBER NULL, P3 NUMBER NULL, P4 NUMBER NULL, P5 NUMBER NULL, P6 NUMBER NULL, P7 NUMBER NULL, P8 NUMBER NULL, CONSTRAINT PK_TEST PRIMARY KEY (datatime, p1,p2) USING INDEX LOCAL TABLESPACE USERINDEX ) PARTITION BY RANGE (DATATIME) (PARTITION Test_060101 VALUES LESS THAN (TO_DATE('2006-01-02','YYYY-MM-DD')), (PARTITION Test_060102 VALUES LESS THAN (TO_DATE('2006-01-03','YYYY-MM-DD')), …… ); 对于按时间分区仍然不能满足性能需求的表, 还可以根据应用需求,使用子分区对表进一步细化。 应用设计中,要充分利用分区表的特性,对大表的访问要完全避免全表访问,缩小访问范围。在查询条件中,尽量使用分区的列。 3 维护 大表的维护工作比较繁琐,索引的维护,存储空间的维护,历史数据的清理等等,使用分区表可以简化大表的维护工作,但是如果表很多的话,手动的创建、删除分区也是一件很繁琐,而且容易出错的事情。 此章节以按天分区的分区表为例讨论大表的自动维护。 3.1 分区表的命名规则 分区表分区的命名应当按照一定的规则命名,以利于自动维护的实现。本例采用按天分区的分区表,分区的命名方式为TABLENAME_YYMMDD,例如:TEST表的2006年6月1日的分区命名为TEST _060601。 3.2 维护字典 在数据库中创建维护字典表,存放需要自动维护的分区表的信息,包括表名,schema,表的类型,数据在数据库中的保留时间等信息。 Table Name: H_RETENTION Column Type Null? Description tablename Varchar2(30) Not null 表名 schemaname Varchar2(30) Not null Schema typeid Varchar2(20) Not null 表类型1. PARTITION2. NORMAL3. …。。 retention Number(3) Not null 该表的保存天数。 3.3 自动创建分区 对于按时间分区的分区表,若不能及时创建新的数据分区,会导致数据无法插入到分区表的严重后果,数据库会产生报错信息ORA-14400: inserted partition key does not map to any partition,插入失败。 创建分区可以手工创建,也可以根据维护字典,通过系统的任务调度来创建分区。通常是在月底创建下个月的分区。 自动创建分区实现如下: /************************************************************************** Program Name:Add_Partition Description: 创建某个用户下个月的所有分区 ***************************************************************************/ PROCEDURE add_partition (v_schema IN VARCHAR2) IS CURSOR c_td_table IS SELECT tablename FROM h_retention WHERE typeid = 'PARTITION' AND schemaname = UPPER (v_schema) ORDER BY tablename; v_cur BINARY_INTEGER; v_int BINARY_INTEGER; v_partition VARCHAR2 (30); v_date DATE; v_days NUMBER; sql_stmt VARCHAR2 (1000); -- String used to save sql statement err_msg VARCHAR2 (300); BEGIN v_date := TRUNC (ADD_MONTHS (SYSDATE, 1), 'MM'); v_days := TO_NUMBER (TO_CHAR (LAST_DAY (ADD_MONTHS (SYSDATE, 1)), 'DD')); v_cur := DBMS_SQL.open_cursor; FOR v_table IN c_td_table LOOP v_date := TRUNC (ADD_MONTHS (SYSDATE, 1), 'MM'); v_partition := v_table.tablename; FOR i IN 1 .. v_days LOOP BEGIN sql_stmt := 'ALTER TABLE ' || v_schema || '.' || v_table.tablename || ' ADD PARTITION ' || v_partition || '_' || TO_CHAR (v_date, 'YYMMDD') || ' ' || 'VALUES LESS THAN (TO_DATE(''' || TO_CHAR (v_date + 1, 'YYYY-MM-DD') || ''',''YYYY-MM-DD'')) '; DBMS_SQL.parse (v_cur, sql_stmt, DBMS_SQL.native); v_int := DBMS_SQL.EXECUTE (v_cur); EXCEPTION WHEN OTHERS THEN err_msg := v_partition || ': Create ' || TO_CHAR (v_date, 'YYMMDD') || ' partition unsuccessfully! Error Information:' || SQLERRM; log_insert (err_msg); --You can define your own log_insert function COMMIT; END; v_date := v_date + 1; END LOOP; END LOOP; DBMS_SQL.close_cursor (v_cur); END; 3.4 自动删除过期分区 为了释放存储空间并提高大表的性能,要从数据库中删除大表中过期的历史数据。删除操作可以手工执行,也可以通过系统的任务调度来自动删除。分区表数据删除只需要删除相应的数据分区,与delete相比,有如下好处: u 速度快 u 占用回滚表空间少 u 产生日志量少 u 释放空间 如果有global的索引,删除分区后需要重建索引。 自动删除分区实现如下: 当前分区表的分区情况可以通过Oracle的数据字典dba_tab_partitions获得, 然后与维护字典中的数据保留天数进行比较,删除过期的数据分区。
|
发表评论
-
expdp通过dblink来导入
2011-12-14 15:01 1789create.sql: spo create.log rem ... -
Library cache内部机制详解
2011-12-14 14:55 891Library cache内部机制详解 http://www ... -
Oracle的10046事件
2011-12-14 14:53 2098Oracle的10046事件,可以跟踪应用程序所执行的SQL语 ... -
REDO LOG MEMBER STATUS 和 REDO LOG GROUP STATUS
2011-12-14 14:51 928V$LOG 中列出的是REDO LOG GROUP STA ... -
oracle的exp/imp使用方法学习(转)
2011-08-30 08:54 964exp/imp两个命令可以说是oracle中最常用的命令了 ... -
oracle几个awr报告
2011-08-09 14:25 900工作中,碰到的数据库慢的几个awr报告 -
Oracle Profile 使用详解
2011-06-21 14:41 972一、目的: Oracle系统中的profile可以用来对 ... -
ORA-27013
2011-04-13 14:25 1515很新的一个bug,看下你的 memory_target是不是& ... -
ACLE表连接方式分析及常见用法
2011-03-23 09:14 1114摘要: 针对在数据仓库 ... -
ORACLE 外部表应用
2011-03-09 14:58 1068SQL> create or replace direc ... -
How to convert a 32-bit database to 64-bit database on Linux
2011-02-18 14:09 1215How to convert a 32-bit databas ... -
expdp impdp 数据库导入导出命令详解
2011-02-16 09:10 1955一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最 ... -
Oracle手工解/锁表
2011-01-25 14:15 2506手工锁表:lock table tbl_t1 in row ... -
oracle动态性能视图
2011-01-22 10:47 861Oracle动态性能视图个人整理 -
RBO规则介绍
2011-01-17 16:45 1078•无条件使用索引•使用内置的优先级别决定访问路径•比较难以 ... -
关于排序、sort_area_size、临时表空间
2011-01-13 15:30 1119简单陈述一下:针对每 ... -
创建索引ORACLE 需要做的工作
2011-01-13 14:53 1323一. 先来看一下创建索引要做哪些操作:1. 把inde ... -
表之间的连接
2011-01-13 10:42 797Join是一种试图将两个表结合在一起的谓词,一次只能连接2 ... -
重建索引的条件
2011-01-12 16:43 955如果索引存在碎片,那每个索引数据块上的索引数据就更少,会导致我 ... -
TKPROF使用学习
2011-01-10 17:38 724Tkprof工具可用来格式化sql trace产生的文件, ...
相关推荐
总的来说,Oracle的在线重定义功能提供了一种高效且低影响的方式将普通表转换为分区表,尤其适用于大型表,它可以显著提升数据管理效率和查询性能。在进行这种转换时,应根据具体的业务需求和数据规模选择合适的方法...
Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...
oracle expdp impdp 分区表重映射导出导入 数据迁移方案,以SI01用户为例子,将用户分区表导出后,将分区表重映射到新的表空间,完成数据迁移和检查。照方案例子按步去做,一定能成功。
在Oracle数据库中,分区是一种强大的数据管理技术,它允许我们将大型表分割成更小、更易管理和查询的部分,称为分区。这种技术对于处理大量数据的企业级应用尤其有用,因为它可以提高查询性能,优化存储,并简化数据...
Oracle 的分区技术是一种用于管理和优化超大型表和索引的有效手段。通过将一个大型的表或者索引分割成多个较小且可管理的部分,分区技术能够显著提升数据库的性能、可用性和可维护性。 ##### 分区的作用: 1. **...
- **简化管理**:可以通过单独维护各个分区来简化数据管理任务,比如备份和恢复等。 - **提高可用性**:如果某个分区出现问题,可以仅隔离该分区而不影响其他部分的数据访问。 #### 三、分区级别的导入导出 分区...
Oracle 分区表管理是数据库系统中的一个重要概念,它允许大表的数据被组织成更小、更易管理和查询的单元,从而提高数据处理的效率。在Oracle数据库中,分区表是通过将一个大表分解为多个逻辑上关联的分区来实现这一...
3. 提高数据管理效率:分区表可以根据不同的业务需求,分区不同的数据,提高数据管理效率。 将普通表转换为分区表的步骤 步骤一:备份创建表脚本 首先,需要备份创建表的脚本,以便在转换过程中,能够快速恢复...
### Oracle表自动按月分区步骤详解 #### 一、背景介绍 在大数据处理与分析领域,数据库表的性能优化显得尤为重要。特别是在面对大量历史数据时,合理地利用表分区技术可以显著提高查询效率,减少资源消耗。Oracle...
在Oracle数据库管理中,分区表是一种非常实用的功能,它能够帮助优化查询性能并简化大型表的管理。当涉及到批量删除或清除分区表中的数据时,就需要掌握...希望本文能够帮助到正在处理Oracle分区表数据管理的朋友们。
这有助于提高查询性能,减少数据管理的复杂性。 - **范围分区(Range Partitioning)**:基于一个列的值范围进行分区,适用于具有时间序列或自然顺序的数据。例如,`PARTITION BY RANGE(CUSTOMER_ID)`根据客户ID的...
Oracle数据库中的分区表是将大型数据表分割成多个小表,以提高应用系统的性能和方便数据管理。在本文中,我们将详细介绍分区表的使用方法和优点。 分区表的优点 使用分区表可以带来以下几个优点: ·增强可用性:...
Oracle 表分区是一种高效的数据管理策略,用于处理大数据量的表,以提升查询性能和数据库的可维护性。本文将详细介绍Oracle表分区的概念、作用、优缺点,以及各种类型的分区和操作方法。 首先,理解表空间和分区表...
总的来说,Oracle分区表培训内容涵盖了分区表的原理、创建、索引构建、元数据管理以及实际操作,这些都是提升数据库性能和管理效率的关键技能。通过深入学习和实践这些示例,员工将能够更好地应对大数据环境下的挑战...
Oracle分区表是一种高级的数据库管理技术,它将大型表的数据分散存储在不同的物理区域,以提升查询效率和系统的整体性能。本文将详细介绍分区表的概念、作用、优缺点,以及各种类型的分区表及其创建方法。 1. **表...
- **历史数据管理**:对于包含大量历史数据的表,新数据通常被添加到最新的分区中。例如,只有当前月份的数据是可更新的,而其他 11 个月的数据只读。 **1.3 Oracle 支持的分区类型** Oracle 10g 提供了多种分区...
在Oracle数据库中,分区表是一种高级表设计技术,用于管理非常大和繁忙的表。使用分区技术可以改善数据库性能、可管理性和可维护性。本篇文档详细介绍了Oracle数据库中分区表的创建、使用和扩容过程。 一、分区表的...
文件是本人oracle10g分区表自动按时间创建、删除分区的存储过程,测试代码,通过job调用存储过程,每天午夜12点运行一次。妥妥!跟大家分享下!