溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle在線重定義表有什么功能

發布時間:2021-11-05 11:21:39 來源:億速云 閱讀:278 作者:iii 欄目:關系型數據庫

這篇文章主要講解了“oracle在線重定義表有什么功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“oracle在線重定義表有什么功能”吧!

在線重定義表具有以下功能:

修改表的存儲參數;

可以將表轉移到其他表空間;

增加并行查詢選項;

增加或刪除分區;

重建表以減少碎片;

將堆表改為索引組織表或相反的操作;

增加或刪除一個列。

原理:增量物化視圖刷新

目的:清理表中碎片,釋放空間(重建表以減少碎片)

重定義方法:

存在兩種重定義方法,一種是基于主鍵、另一種是基于ROWID。

ROWID的方式不能用于索引組織表,而且重定義后會存在隱藏列M_ROW$$。

默認采用主鍵的方式。

前提條件:

1)查看表中是否含有主鍵,在線重定義需要表中存在主鍵

select a.constraint_name,  a.column_name from dba_cons_columns a, dba_constraints b 

where a.constraint_name = b.constraint_name  and b.constraint_type = 'P' and a.table_name in('ZWD_JDMSG_GD','ZB2C_KUCUN_LOG');

2)如果在執行在線重定義的過程中出現任何的失敗操作,那么需要執行dbms_redefinition.abort_redef_table來回退;

1、檢查是否能夠重定義

EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('用戶名', '源表', DBMS_REDEFINITION.CONS_USE_PK);   --主鍵方式

EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('用戶名', '源表', DBMS_REDEFINITION.CONS_USE_ROWID);   --ROWID方式

2、獲取源表建表語句

SET SERVEROUTPUT ON 

SET LINESIZE 1000 

SET FEEDBACK OFF 

set long 99999           

set pagesize 4000

select dbms_metadata.get_ddl('TABLE','ZWD_JDMSG_GD','SAPSR3') from dual;

3、創建中間表(根據源表創建語句)

4、查看依賴對象

SELECT * from dba_dependencies where REFERENCED_NAME in ('ZWD_JDMSG_GD','ZB2C_KUCUN_LOG');

5、調用dbms_redefinition包執行表的在線重定義。

EXEC DBMS_REDEFINITION.start_redef_table('SAPSR3','ZWD_JDMSG_GD','T_TEMP');

或者

--null代表所有的列名與原表一樣

begin

dbms_redefinition.start_redef_table(‘用戶’,‘原表’,‘中間表’,null,dbms_redefinition.cons_use_rowid);

end;

6、復制依賴對象到中間表,后幾個參數分別表示從原表復制索引、觸發器、約束、權限、某一項復制出錯跳過、復制過程中的出錯數目、復制統計信息、復制物化視圖日志

(各選項憑需要取用,完畢后需檢查num_errors的值,有錯一定要查看,酌情處理)

DECLARE

num_errors PLS_INTEGER;

BEGIN

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS

(‘用戶’, ‘原表’,‘臨時表’, DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors, TRUE, TRUE);

END;

7、查看報錯信息

select object_name,base_table_name,ddl_txt from DBA_REDEFINITION_ERRORS;

8、 將中間表中的數據和原始表中的數據進行同步操作(這一步不是必須的)。

如果在執行dbms_redefinition.start_redef_table和dbms_redefinition.finish_redef_table之間有大量的DML操作發生,

那么執行一次dbms_redefinition.sync_interim_table來減少最后一步執行dbms_redefinition.finish_redef_table時的鎖定時間。

EXEC dbms_redefinition.sync_interim_table('DBSYAN','T_TEST','T_TEMP');

9、結束在線重定義過程

EXEC dbms_redefinition.finish_redef_table('DBSYAN','T_TEST','T_TEMP');

執行完FINISH_REDEF_TABLE()過程后,原始表重定義后具有了中間表的屬性、索引、約束、授權和觸發器。中間表上disabled的約束在原始表上處于enabled狀態。

10、檢查原表的表空間是否改變,檢查其數據、結構、索引等依賴對象是否正確

11、執行失敗,進行回退

EXEC dbms_redefinition.abort_redef_table ('DBSYAN','T_TEST','T_TEMP');

注意:

對于采用了ROWID方式重定義的表,包括了一個隱含列M_ROW$$。推薦使用下列語句經隱含列置為UNUSED狀態或刪除 

ALTER TABLE TABLE_NAME SET UNUSED (M_ROW$$);

ALTER TABLE TABLE_NAME DROP UNUSED COLUMNS;

感謝各位的閱讀,以上就是“oracle在線重定義表有什么功能”的內容了,經過本文的學習后,相信大家對oracle在線重定義表有什么功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女