|
标签:IT/科技 |
分类:oracle |
在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统。Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就无法完成了。而且,对于被大量DML语句访问的表,幸运的是,Oracle从9i版本开始提供了在线重定义表功能,通过调用DBMS_REDEFINITION包,可以在修改表结构的同时允许DML操作。
在线重定义表具有以下功能:
修改表的存储参数;
1.创建一个中间分区表,同原表结构一样.
CREATE TABLE T_FULLNOTE_P
( pay_request_sq, pay_request_date, mx_bill_no )
PARTITION BY RANGE (pay_request_date)
(
PARTITION p_2006 VALUES LESS THAN ('2007-01-01 00:00:00'),
PARTITION p_2007 VALUES LESS THAN ('2008-01-01 00:00:00'),
PARTITION p_2008 VALUES LESS THAN (Maxvalue)
)
AS
SELECT pay_request_sq, pay_request_date, mx_bill_no
FROM T_FULLNOTE WHERE 1=0
2.检查改表是否可以进行重定义.
BEGIN
dbms_redefinition.can_redef_table(uname => 'TEST',tname =>
'T_FULLNOTE',options_flag =>
DBMS_REDEFINITION.cons_use_pk);
END;
3.开始对表进行重定义.
BEGIN
dbms_redefinition.start_redef_table(uname => 'TEST',
orig_table => 'T_FULLNOTE',
int_table => 'T_FULLNOTE_P',
options_flag => dbms_redefin
|
标签:随笔/感悟 |
| 分类:心情、随想 |
| 分类:七嘴八舌 |