ORACLE 在實際中一些表由于業(yè)務量增大,一些原先規(guī)劃不是很大的表的數(shù)據(jù)量大增,為了優(yōu)化要把這些表從普通表變成分區(qū)表。現(xiàn)在就介紹ORACLE自帶的一種技術來處理這種情況-這種技術叫在線表重定義。
公司主營業(yè)務:成都做網(wǎng)站、網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出洋縣免費做網(wǎng)站回饋大家。
第一步建立臨時表:
create table test_table
( ID NUMEBER(10) NOT NULL,
STATUS VARCHAR2(30) NULL,
CREATE_DATE DATE
)PARTITION BY RANGE(CREATE_DATE)
( PARTITION part23 VALUES LESS THAN (TO_DATE('2010-09-24','YYYY-MM-DD')),
PARTITION part24 VALUES LESS THAN(TO_DATE('2010-09-25', 'YYYY-MM-DD')),
PARTITION Part25 VALUES LESS THAN(TO_DATE('2010-09-26', 'YYYY-MM-DD')),
PARTITION partmax VALUES LESS THAN(MAXVALUE)
);
alter table test_table add constraint test_table_pk primary key(id);
第二步 判斷目標數(shù)據(jù)表是否可以進行重定義 。利用的DBMS_REDEFINITION包的CAN_REDEF_TABLE的方法進行判斷。
exec dbms_redefinition.can_redef_table('user','table',dbms_redefinition.cons_use_pk);
使用cons_use_pk重定義的時候創(chuàng)建的物化視圖是基于普通的刷新模式.
也可以用ROWID的方法
exec dbms_redefinition.can_redef_table('user','table',dbms_redefinition.cons_use_rowid);
使用cons_use_rowid重定義的時候創(chuàng)建的物化視圖是基于ROWID刷新的.
第三步 開始重定義
exec dbms_redefinition.start_redef_table('user', 'table', 'test_table');
同步臨時表與原始表中的數(shù)據(jù)
exec dbms_redefinition.sync_interim_table('user', 'table', 'test_table');
開始復制表的屬性
declareCLAR
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('user','table','test_table',
DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors);
END;
/
包括索引,規(guī)則,促發(fā)器
完成重定義
exec dbms_redefinition.finish_redef_table('user', 'table', 'test_table');
_pk);