SQL> execute DBMS_REDEFINITION
PL/SQL procedure successfully completed
我們還是往test表中插入數據
SQL> insert into test values(
SQL> select count(*) from test;
SQL> select count(*) from int_test;
SQL> select * from mlog$_test;
select * from mlog$_test
ORA
SQL> select * from rupd$_test;
select * from rupd$_test
ORA
SQL> select c from audit_test;
可以看到
這裡發生了一個很有趣的轉換
SQL> select t
INT_TEST_PK TEST
PK_TEST_ID INT_TEST
SQL> select t
TR_INT_TEST TEST
TR_TEST INT_TEST
我們檢查對象權限
SQL> select * from USER_TAB_PRIVS_MADE;
SYSTEM INT_TEST MYTEST SELECT NO NO
SYSTEM INT_TEST MYTEST DELETE
SYSTEM TEST MYTEST SELECT NO NO
SYSTEM TEST MYTEST UPDATE
這裡可以看到
SQL> drop table int_test;
Table dropped
如果是
如果運行了START_REDEF_TABLE 過程開始
dbms_redefinition
SQL> select object_name
OBJECT_NAME OBJECT_TYPE STATUS OBJECT_ID DATA_OBJECT_ID
AUDIT_TEST TABLE VALID
TEST TABLE VALID
TEST TABLE PARTITION VALID
TEST TABLE PARTITION VALID
TEST TABLE PARTITION VALID
TEST TABLE PARTITION VALID
看到這裡
總結
本文不想從大的框架上來說明問題
這樣可能會更讓大家明白其中發生的一切
這裡盡量的模擬了實際可能會遇到的情況
如約束
外鍵約束這裡沒有舉例說明
其實主要過程就是完成了一個表的記錄的拷貝(通過快照)
From:http://tw.wingwit.com/Article/program/Oracle/201311/17859.html