WEB开发网
开发学院数据库Oracle 如何将Oracle数据库的普通表转换成分区表 阅读

如何将Oracle数据库的普通表转换成分区表

 2008-11-10 12:58:33 来源:WEB开发网   
核心提示: PL/SQL 过程已成功完成,SQL> EXEC dbms_redefinition.sync_interim_table(‘USER’, 'T', 'T_NEW')现在,如何将Oracle数据库的普通表转换成分区表(6),将中

PL/SQL 过程已成功完成。

SQL> EXEC dbms_redefinition.sync_interim_table(‘USER’, 'T', 'T_NEW')

现在,将中间表与原始表同步。(仅当要对表 T 进行更新时才需要执行该操作。)

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER’, 'T', 'T_NEW');

PL/SQL 过程已成功完成。

如果重组织失败,那么你就必须采取特殊的步骤来让它重新开始。由于重定义过程需要创建表格的快照,因此为了重新开始这一过程,你必须调用DBMS_REDEFINITION.ABORT_REDEF_TABLE来释放快照。

DBMS_REDEFINITION.ABORT_REDEF_TABLE过程有三个参数,即用户(schema)、原始表格(original table name)名称以及持有表格名称(holding table name)。它“出栈”并允许你开始重组织表格。

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

需要说明的是完成后,原表和中间表的结构也同时进行了交换,并且中间表里面有原表的数据备份。

优点:

保证数据的一致性,在大部分时间内,表T都可以正常进行DML操作。只在切换的瞬间锁表,具有很高的可用性。这种方法具有很强的灵活性,对各种不同的需要都能满足。而且,可以在切换前进行相应的授权并建立各种约束,可以做到切换完成后不再需要任何额外的管理操作。

不足:实现上比上面两种略显复杂,适用于各种情况。

然而,在线表格重定义也不是完美无缺的。下面列出了Oracle9i重定义过程的部分限制:

你必须有足以维护两份表格拷贝的空间。

你不能更改主键栏。

表格必须有主键。

必须在同一个大纲中进行表格重定义。

在重定义操作完成之前,你不能对新加栏加以NOT NULL约束。

表格不能包含LONG、BFILE以及用户类型(UDT)。

不能重定义链表(clustered tables)。

不能在SYS和SYSTEM大纲中重定义表格。

不能用具体化视图日志(materialized view logs)来重定义表格;不能重定义含有具体化视图的表格。

不能在重定义过程中进行横向分集(horizontal subsetting)。

上一页  1 2 3 4 5 6 

Tags:如何 Oracle 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接