用Oracle9i在線表格重定義來重新組織表格

在Oracle9i出現之前,你只能通過導出和導入的方式來進行表格重定義,因此表格重定義的過程是一個離線過程。甚至在線變化(“ALTER TABLE ADD NEW_COL NUMBER(3)”)也會導致獨占性死鎖(exclusive locks),這就需要在DDL完成之前防止所有DML(插入、更新)的運行。

爲了解決這個問題,Oracle9i在其DBMS_REDEFINITION軟件包中引入了在線表格重定義功能。有了DBMS_REDEFINITION軟件包,你就可以:

1.拷貝表格(用CTAS)

2.創建表格的快照(snapshot)

3.把重定義表格的過程中所發生的變化進行排隊

4.並用變化隊列來同步重定義後的表格。

這個特性對24/7Oracle數據庫來說非常重要,這是由于DBA現在可以在保持表格的可更新性的同時重新組織表格的結構。

我們以下面的腳本爲例來說明重新組織表格結構的完整過程。

exec dbms_redefinition.abort_redef_table('PUBS','TITLES','TITLES2');

alter table titles add constraint pk_titles primary key (title_id);

exec dbms_redefinition.can_redef_table('PUBS','TITLES');

create table titles2

as

select * from titles;

exec dbms_redefinition.start_redef_table('PUBS','TITLES','TITLES2','title_id title_id,title title,type type,pub_id pub_id,price price,advance advance,royalty*1.1 royalty,ytd_sales ytd_sales,notes notes,pubdate pubdate');

exec dbms_redefinition.sync_interim_table('PUBS','TITLES','TITLES2');

exec dbms_redefinition.finish_redef_table('PUBS','TITLES','TITLES2');

drop table titles2;

假如重組織失敗,那麽你就必須采取非凡的步驟來讓它重新開始。由于重定義過程需要創建表格的快照,因此爲了重新開始這一過程,你必須調用DBMS_REDEFINITION.ABORT_REDEF_TABLE來釋放快照。

DBMS_REDEFINITION.ABORT_REDEF_TABLE過程有三個參數,即大綱(schema)、原始表格(original table name)名稱以及持有表格名稱(holding table name)。它“出棧”並答應你開始重組織表格。

dbms_redefinition.abort_redef_table('PUBS','TITLES','TITLES2');

然而,在線表格重定義也不是完美無缺的。下面列出了Oracle9i重定義過程的部分限制。

你必須有足以維護兩份表格拷貝的空間。

你不能更改主鍵欄。

表格必須有主鍵。

必須在同一個大綱中進行表格重定義。

在重定義操作完成之前,你不能對新加欄加以NOT NULL約束。

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

不能重定義鏈表(clustered tables)。

不能在SYS和SYSTEM大綱中重定義表格。

不能用具體化視圖日志(materialized view logs)來重定義表格;不能重定義含有具體化視圖的表格。

不能在重定義過程中進行橫向分集(horizontal subsetting)。

用Oracle9i在線表格重定義來重新組織表格
  在Oracle9i出現之前,你只能通過導出和導入的方式來進行表格重定義,因此表格重定義的過程是一個離線過程。甚至在線變化(“ALTER TABLE ADD NEW_COL NUMBER(3)”)也會導致獨占性死鎖(exclusive locks),這就...查看完整版>>用Oracle9i在線表格重定義來重新組織表格
 
Oracle9i在線表格重定義來組織表格
在Oracle9i出現之前,你只能通過導出和導入的方式來進行表格重定義,因此表格重定義的過程是一個離線過程。甚至在線變化(“ALTER TABLE ADD NEW_COL NUMBER(3)”)也會導致獨占性死鎖(exclusive locks),這就需要...查看完整版>>Oracle9i在線表格重定義來組織表格
 
Oracle數據庫在線表格重定義功能簡介
在Oracle9i出現之前,你只能通過導出和導入的方式來進行表格重定義,因此表格重定義的過程是一個離線過程。甚至在線變化(“ALTER TABLE ADD NEW_COL NUMBER(3)”)也會導致獨占性死鎖(exclusive locks),這就需要...查看完整版>>Oracle數據庫在線表格重定義功能簡介
 
9i新特性之——在線表格重定義研究4
4、創建我們需要重新定義的中間表,這個是一個分區表,以後我們將把原表的所有數據在線轉移到該表上來。SQL>create table int_test(a int,b int)partition by range(a)(partition p10 values less than(50), ...查看完整版>>9i新特性之——在線表格重定義研究4
 
9i新特性之——在線表格重定義研究3
具體過程 1、我們創建一個單獨的測試用戶用來測試整個過程 SQL> create user mytest identified by mytest;User createdSQL> grant connect,resource to mytest;Grant sUCceeded SQL> connect mytest/mytes...查看完整版>>9i新特性之——在線表格重定義研究3
 
9i新特性之——在線表格重定義研究1
前言 在Oracle9i出現之前,你只能通過MOVE或導出和導入的方式來進行表格重定義,因此表格重定義的過程可能相當漫長或者說是一個離線過程,在此期間應用程序對該表的操作將失敗,非凡是大型的分區表上的操作(上次coo...查看完整版>>9i新特性之——在線表格重定義研究1
 
9i新特性之——在線表格重定義研究2
基本步驟如下 第一步:利用dbms_redefinition.can_redef_table過程檢查該表是否能被在線重定義。 第二步:創建一個與原表類似的空表結構,用于重定義該表,這裏叫做是中間表 第三步:用dbms_redefinition.start_rede...查看完整版>>9i新特性之——在線表格重定義研究2
 
9i新特性之——在線表格重定義研究5
9、所有的工作都預備完成,我們執行重構完成的過程,這個過程將執行表的交換。 SQL> execute DBMS_REDEFINITION.F...查看完整版>>9i新特性之——在線表格重定義研究5
 
9i新特性之——在線表格重定義研究1
  前言    在Oracle9i出現之前,你只能通過MOVE或導出和導入的方式來進行表格重定義,因此表格重定義的過程可能相當漫長或者說是一個離線過程,在此期間應用程序對該表的操作將失敗,特別是大型的分區表上的操...查看完整版>>9i新特性之——在線表格重定義研究1
 
 
回到王朝網路移動版首頁