日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Oracle數(shù)據(jù)庫通過在線重定義的方法新增字段詳解

Oracle數(shù)據(jù)庫操作中,假如在原始表TB_HXL_USER上新增字段remark01,默認(rèn)值為'A',但是由于該表的數(shù)據(jù)量比較大,直接在原表上新增字段,執(zhí)行的時間特別長,最后還報出了undo空間不足的問題。而且在新增字段的過程中,其他用戶還不能訪問該表,出現(xiàn)的等待事件是library cache lock。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、望城網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為望城等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

下面試著通過在線重定義的方法新增字段,能夠避免undo空間不足以及其他用戶不能訪問該表的情況。

1.使用如下SQL獲取原始表的DDL

設(shè)置分隔符號以及去掉表DDL中的storage屬性:

 
 
 
  1. begin  
  2.  
  3. Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,  
  4.  
  5. 'SQLTERMINATOR',  
  6.  
  7. True);  
  8.  
  9. Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,  
  10.  
  11. 'STORAGE',  
  12.  
  13. False);  
  14.  
  15. end; 

提取表,索引,約束以及權(quán)限的語句。

 
 
 
  1. Select Dbms_Metadata.Get_Ddl(Object_Type => 'TABLE', Name => 'TB_HXL_USER') ||  
  2.  
  3. Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'INDEX',  
  4.  
  5. Base_Object_Name => 'TB_HXL_USER') ||  
  6.  
  7. Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'CONSTRAINT',  
  8.  
  9. Base_Object_Name => 'TB_HXL_USER') ||  
  10.  
  11. Dbms_Metadata.Get_Dependent_Ddl('OBJECT_GRANT', 'TB_HXL_USER', 'HXL')  
  12.  
  13. From Dual 

2.將步驟1 SQL中的表名TB_HXL_USER 替換為TB_HXL_USER_MID 創(chuàng)建中間表

3.中間表新增字段 remark01

 
 
 
  1. alter table TB_HXL_USER_MID add remark01 varchar2(10) default 'A'; 

4.檢查能否進(jìn)行重定義,過程執(zhí)行成功即說明可以重定義

 
 
 
  1. Begin  
  2.  
  3. Dbms_Redefinition.Can_Redef_Table(USER, 'TB_HXL_USER');  
  4.  
  5. End; 

5.開始重定義表

注意:如原始表有未提交的事物,該過程會一直在等待,等待事件為enq: TX - row lock contention。

不能執(zhí)行start_redef_table的情況下,需要將如下權(quán)限賦予用戶。

 
 
 
  1. grant create any table to hxl;  
  2.  
  3. grant alter any table to hxl;  
  4.  
  5. grant drop any table to hxl;  
  6.  
  7. grant lock any table to hxl;  
  8.  
  9. grant select any table to hxl;  
  10.  
  11. grant create any trigger to hxl;  
  12.  
  13. grant create any index to hxl; 

運行start_redef_table過程

 
 
 
  1. BEGIN  
  2.  
  3. dbms_redefinition.start_redef_table(  
  4.  
  5. uname => USER,  
  6.  
  7. orig_table => 'TB_HXL_USER',  
  8.  
  9. int_table => 'TB_HXL_USER_MID',  
  10.  
  11. options_flag => DBMS_REDEFINITION.cons_use_pk); 

如果有主鍵則是options_flag => DBMS_REDEFINITION.cons_use_pk,如果沒有

 
 
 
  1. DBMS_REDEFINITION.cons_use_rowid  
  2. END; 

6.開始同步中間表

 
 
 
  1. BEGIN  
  2.  
  3. dbms_redefinition.sync_interim_table(  
  4.  
  5. uname => USER,  
  6.  
  7. orig_table => 'TB_HXL_USER',  
  8.  
  9. int_table => 'TB_HXL_USER_MID');  
  10.  
  11. END; 

7.完成同步

注意:如原始表有未提交的事物,該過程會一直在等待

 
 
 
  1. BEGIN  
  2.  
  3. dbms_redefinition.finish_redef_table(  
  4.  
  5. uname => USER,  
  6.  
  7. orig_table => 'TB_HXL_USER',  
  8.  
  9. int_table => 'TB_HXL_USER_MID');  
  10.  
  11. END; 

8.刪除中間表

 
 
 
  1. drop table tb_hxl_user_mid; 

9.修改索引名稱

 
 
 
  1. alter index idx_tb_hxl_user_mid_n1 rename to idx_tb_hxl_user_n1;  
  2.  
  3. alter index idx_tb_hxl_user_mid_u1 rename to idx_tb_hxl_user_u1; 

執(zhí)行完以上的9個步驟,新增字段就創(chuàng)建成功了。

關(guān)于Oracle數(shù)據(jù)庫用在線重定義的方法新增字段的操作就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. 關(guān)于Oracle數(shù)據(jù)庫閃回個性的詳細(xì)介紹
  2. Oracle數(shù)據(jù)庫對DDL語句和DML語句的事務(wù)管理
  3. Oracle數(shù)據(jù)庫啟動參數(shù)文件及相關(guān)SQL語句簡介
  4. Oracle數(shù)據(jù)庫的幾種文件及表空間數(shù)據(jù)塊的知識簡介
  5. Oracle數(shù)據(jù)庫查詢登錄用戶名所屬表空間及其使用情況

標(biāo)題名稱:Oracle數(shù)據(jù)庫通過在線重定義的方法新增字段詳解
鏈接URL:http://m.5511xx.com/article/codjdho.html