`
liwenshui322
  • 浏览: 518866 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)Oracle的在线重定义(将普通表转为分区表ora9i以上版本)

 
阅读更多

1、创建表

SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);

2、插入数据

SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;
SQL
> COMMIT;

3、在线重定义的表自行验证,看该表是否可以重定义,

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user'T', DBMS_REDEFINITION.CONS_USE_PK);
 (如果没有定义主键会提示以下错误信息
 
begin dbms_redefinition.can_redef_table(user,'pft_party_profit_detail'); end;
 ORA
-12089: cannot online redefine table "OFSA"."PFT_PARTY_PROFIT_DETAIL" with no primary key
 ORA
-06512: at "SYS.DBMS_REDEFINITION", line 8
 ORA
-06512: at "SYS.DBMS_REDEFINITION", line 247
 ORA
-06512: at line 1
 
 出错了, 该表上缺少主键,为该表建主键。再执行验证。
 SQL
> alter table t add constraint pk_t primary key(id);
 
Table altered)

4、建个和源表表结构一样的分区表,作为中间表。按日期范围分区

 

SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME) 
     (PARTITION P1 
VALUES LESS THAN (TO_DATE('2004-7-1''YYYY-MM-DD')), 
     PARTITION P2 
VALUES LESS THAN (TO_DATE('2005-1-1''YYYY-MM-DD')), 
     PARTITION P3 
VALUES LESS THAN (TO_DATE('2005-7-1''YYYY-MM-DD')), 
     PARTITION P4 
VALUES LESS THAN (MAXVALUE));
 这里值得注意的一个问题是:PARTITION P4 
VALUES LESS THAN (MAXVALUE))是把所有剩下的数据分在一个区里,如果你想一个月建一个分区,那最好写成这样,提前建好,目前我还不知道能不能自动建,如果哪位知道请告知我,谢谢  
 SQL
> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME) 
     (PARTITION P20070201 
VALUES LESS THAN (TO_DATE('2007-2-1''YYYY-MM-DD')), 
     PARTITION P20070301 
VALUES LESS THAN (TO_DATE('2005-3-1''YYYY-MM-DD')),
     PARTITION P20070401 
VALUES LESS THAN (TO_DATE('2005-4-1''YYYY-MM-DD')), 
     PARTITION P20070501 
VALUES LESS THAN (TO_DATE('2005-5-1''YYYY-MM-DD')),  
     PARTITION P20070601 
VALUES LESS THAN (TO_DATE('2005-6-1''YYYY-MM-DD')));  

 

5、执行表的在线重定义:

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER'T''T_NEW');

6、执行把中间表的内容和数据源表进行同步。

SQL>execute dbms_redefinition.sync_interim_table(user,'t','t_new');

7、执行结束在线定义过程

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(user'T''T_NEW');

8、查看数据字典,可以看到改表已经成为了分区表。

SQL> SELECT COUNT(*FROM T;
  
COUNT(*)
----------
      6264
SQL
> SELECT COUNT(*FROM T PARTITION (P2);
  
COUNT(*)
----------
      6246
SQL
> SELECT COUNT(*FROM T PARTITION (P3);


  
COUNT(*)
----------

至此普通表转为分区操作完成

9、如果执行在线重定义的过程中出错

可以在执行dbms_redefinition.start_redef_table之后到执行dbms_redefinition.finish_redef_table之前的时间里执行:DBMS_REDEFINITION.abort_redef_table(user't''t_new')以放弃执行在线重定义。

 

10、如果出现以下错误:

SQL> exec dbms_redefinition.can_redef_table(user't');
BEGIN dbms_redefinition.can_redef_table(user't'); END;

*
ERROR at line 
1:
ORA
-12091: cannot online redefine table "user"."t" with
materialized views
ORA
-06512: at "SYS.DBMS_REDEFINITION", line 137
ORA
-06512: at "SYS.DBMS_REDEFINITION", line 1478
ORA
-06512: at line 1

用这句删除materialized 
view 即可继续进行
drop materialized view log on <tablename>;
drop materialized view log on t;
    OR drop materialized t;

 

附:

原文地址:http://www.blogjava.net/willpower88/archive/2007/04/19/111987.html

分享到:
评论

相关推荐

    Ora 9i SQL参考手册

    《Ora 9i SQL参考手册》是Oracle公司为9i数据库系统提供的SQL语言权威指南,旨在帮助数据库管理员、开发人员以及SQL用户深入理解和高效使用9i版本的SQL语句。Oracle 9i(第9代)是Oracle数据库的一个重要里程碑,它...

    ora9i性能调整3

    【ora9i性能调整3】是关于Oracle 9i数据库性能优化的专业教程,主要针对OCP(Oracle Certified Professional)考试中的性能调整部分。这个主题涵盖了数据库性能的关键方面,旨在帮助数据库管理员(DBAs)提升系统...

    oracle9i sql 说明文档

    12. **分区与分片**:为了管理和优化大规模数据,Oracle 9i支持表和索引的分区,以及数据库的分片,这有助于提高查询性能和简化管理。 13. **备份与恢复**:Oracle 9i提供了全面的备份和恢复策略,包括在线备份、...

    Ora9i数据库管理员指南_oracle_数据库管理_

    《Ora9i数据库管理员指南》是一本专为Oracle数据库管理员设计的详尽教程,旨在帮助读者深入理解和熟练掌握Oracle 9i数据库的管理和维护。这本书涵盖了数据库的基础知识、安装配置、性能优化、备份恢复、安全性管理等...

    oracle 9i sql手册

    11. **分区表**:Oracle 9i引入了分区表的概念,将大表分成多个逻辑部分,以提高查询性能和管理效率。 12. **安全性**:Oracle 9i提供了用户管理和权限控制,通过`GRANT`和`REVOKE`语句分配和撤销用户的数据库访问...

    ora9i性能调整

    【ora9i性能调整】是Oracle数据库9i版本的一个核心主题,主要关注如何优化数据库的运行效率,提高系统响应时间和吞吐量。Oracle 9i是Oracle公司在2001年发布的重要数据库版本,它引入了许多性能提升的技术和特性。在...

    Linux下Oracle 9i 安装文档

    Oracle 9i的性能优化涉及索引、分区、内存管理等多个方面。理解`v$视图`和`AWR`报告可以帮助监控和调整系统性能。 13. **备份和恢复**: 了解如何使用RMAN(Recovery Manager)进行数据库备份和恢复,以应对可能...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    oracle9i安装配置管理与相关

    Oracle 9i是一款由甲骨文公司推出的数据库管理系统,它在当时是Oracle数据库的一个重要版本,提供了许多新的特性和改进。以下将详细讲解Oracle 9i的安装、配置、管理和相关知识点。 一、安装Oracle 9i 1. 系统需求...

    Oracle9iSQL参考手册.rar

    - 分区表:Oracle 9i引入了分区表,允许大型表按逻辑分割,提高查询性能。 - 游标:用于逐行处理查询结果,是程序化SQL的关键部分。 - 触发器:在特定数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行的...

    oracle9i 基础教程

    Oracle9i 是Oracle公司推出的数据库管理系统的一个重要版本,它的全称是Oracle Database 9i,主要专注于提高数据管理和网络通信的效率。本基础教程旨在帮助初学者理解和掌握Oracle9i的核心概念、安装配置以及基本...

    ORACLE9i官方培训文档----数据库管理基础 II

    《ORACLE9i官方培训文档——数据库管理基础 II》是一份深入学习Oracle 9i数据库管理系统的重要资料,适合对数据库管理有一定基础或者想要提升这方面技能的读者。文档分为英文版和中文版,对于英语不太熟练的读者,...

    OCP-007 Introduction to Oracle 9i SQL Study Guide.pdf

    Oracle 9i是Oracle数据库的一个重要版本,它引入了许多新特性和改进,使得SQL在数据管理和分析上的效率得到显著提升。以下将详细介绍该书涵盖的关键知识点。 1. SQL基础:本书首先会介绍SQL(Structured Query ...

    oracle 9i数据库培训教程

    Oracle 9i数据库是Oracle公司推出的数据库管理系统,它在当时是一个重要的版本,引入了许多创新功能,增强了性能和可管理性。本教程旨在帮助初学者和有一定经验的IT专业人士深入理解Oracle 9i数据库的核心概念、管理...

    Oracle 9i DBA大全

    Oracle 9i是Oracle公司推出的一个重要版本,它在性能、可扩展性和安全性方面都有显著提升,对数据库管理和开发人员来说,理解和掌握其核心概念和技术至关重要。 首先,安装Oracle 9i是成为DBA的第一步。这个过程...

    精通oracle9i教程

    Oracle 9i提供了一套工具和方法,如SQL*Profiler和 tkprof 用于找出性能瓶颈,通过调整SQL语句、创建索引、优化表分区等方式提升查询速度。 此外,Oracle 9i的互联网特性也值得一提,如支持XML和Web服务,使数据库...

    oracle9i官方文档

    - **分区表**:增强的分区技术使得大型表的管理和查询更为高效,通过将表分成较小的逻辑部分,可以提高查询速度和维护性能。 - **数据仓库优化**:Oracle 9i增加了对数据仓库的优化,如星型和雪花模式的支持,以及...

    oracle 9i 英文课件

    8. **事务和并发控制**:Oracle 9i采用多版本并发控制(MVCC),通过回滚段和重做日志保证事务的一致性。理解提交、回滚和保存点的概念,以及锁定机制对于多用户环境的管理至关重要。 9. **备份与恢复**:Oracle 9i...

    oracle9i 实物讲座

    本讲座将深入探讨Oracle9i的核心概念、安装与配置、数据存储、SQL查询、表空间管理、备份与恢复、性能优化以及安全性控制等多个方面。 一、Oracle9i核心概念 Oracle9i的基础是关系数据库模型,它以表格形式存储数据...

    oracle9i数据库管理员指南

    Oracle 9i是Oracle公司推出的第9个主要版本,它在数据管理、性能优化、网络支持以及安全性等方面都有显著提升,对数据库管理员(DBA)来说,理解其特性和功能至关重要。 1. 数据库安装与配置:Oracle 9i的安装过程...

Global site tag (gtag.js) - Google Analytics