国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

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

2024-08-29 13:32:05
字體:
供稿:網(wǎng)友


在oracle9i出現(xiàn)之前,你只能通過導(dǎo)出和導(dǎo)入的方式來進(jìn)行表格重定義,因此表格重定義的過程是一個(gè)離線過程。甚至在線變化(“alter table add new_col number(3)”)也會導(dǎo)致獨(dú)占性死鎖(exclusive locks),這就需要在ddl完成之前防止所有dml(插入、更新)的運(yùn)行。

為了解決這個(gè)問題,oracle9i在其dbms_redefinition軟件包中引入了在線表格重定義功能。有了dbms_redefinition軟件包,你就可以:

 
1.拷貝表格(用ctas)

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

3.把重定義表格的過程中所發(fā)生的變化進(jìn)行排隊(duì)

4.并用變化隊(duì)列來同步重定義后的表格。

這個(gè)特性對24/7oracle數(shù)據(jù)庫來說非常重要,這是由于dba現(xiàn)在可以在保持表格的可更新性的同時(shí)重新組織表格的結(jié)構(gòu)。

我們以下面的腳本為例來說明重新組織表格結(jié)構(gòu)的完整過程。

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;

如果重組織失敗,那么你就必須采取特殊的步驟來讓它重新開始。由于重定義過程需要?jiǎng)?chuàng)建表格的快照,因此為了重新開始這一過程,你必須調(diào)用dbms_redefinition.abort_redef_table來釋放快照。

dbms_redefinition.abort_redef_table過程有三個(gè)參數(shù),即大綱(schema)、原始表格(original table name)名稱以及持有表格名稱(holding table name)。它“出棧”并允許你開始重組織表格。

dbms_redefinition.abort_redef_table('pubs','titles','titles2');

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

你必須有足以維護(hù)兩份表格拷貝的空間。
你不能更改主鍵欄。
表格必須有主鍵。
必須在同一個(gè)大綱中進(jìn)行表格重定義。
在重定義操作完成之前,你不能對新加欄加以not null約束。
表格不能包含long、bfile以及用戶類型(udt)。
不能重定義鏈表(clustered tables)。
不能在sys和system大綱中重定義表格。
不能用具體化視圖日志(materialized view logs)來重定義表格;不能重定義含有具體化視圖的表格。
不能在重定義過程中進(jìn)行橫向分集(horizontal subsetting)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 全州县| 泰宁县| 靖宇县| 平果县| 红河县| 临泽县| 得荣县| 稷山县| 遂宁市| 峨山| 怀化市| 博野县| 远安县| 理塘县| 盐源县| 平阴县| 来安县| 睢宁县| 图木舒克市| 沐川县| 阳高县| 海原县| 德江县| 博野县| 普陀区| 台江县| 得荣县| 青川县| 东乌珠穆沁旗| 察隅县| 东光县| 宝山区| 清原| 牡丹江市| 灵宝市| 进贤县| 陇西县| 定南县| 峨眉山市| 乌拉特前旗| 永修县|