Oracle 12.2使用手動建立與註冊依賴物件來執行聯機重定義
下面的例子將使用手動建立與註冊依賴物件的方法來執行聯機重定義操作,原始表建立如下:
SQL> create table jy.t1(c1 number); Table created SQL> create index jy.t1_idx_1 on jy.t1(c1); Index created
假設在聯機重定義之後列c1變為了c2。在這種情況下,使用copy_table_dependents過程試圖對中間表的c1列建立索引t1_idx,因為不存在列c1就會出現錯誤。因此必須在列c2上建立索引然後進行註冊。
聯機重定義操作如下:
1.用要執行聯機重定義操作的使用者登入資料庫
SQL> conn jy/jy@jypdb Connected.
2.驗證原始表t1是否可以執行聯機重定義操作
SQL> begin 2 dbms_redefinition.can_redef_table( 3 uname => 'jy', 4 tname => 't1', 5 options_flag => DBMS_REDEFINITION.CONS_USE_ROWID); 6 end; 7 / PL/SQL procedure successfully completed.
3.手動建立中間表jy.int_t1並且在列c2上建立索引jy.int_t1_idx_1
SQL> create table jy.int_t1(c2 number); Table created. SQL> create index jy.int_t1_idx_1 on jy.int_t1(c2); Index created.
4.開始執行聯機重定義操作
SQL> begin 2 dbms_redefinition.start_redef_table( 3 uname => 'jy', 4 orig_table => 't1', 5 int_table => 'int_t1', 6 col_mapping => 'c1 c2', 7 options_flag => DBMS_REDEFINITION.CONS_USE_ROWID); 8 end; 9 / PL/SQL procedure successfully completed.
5.註冊原始(索引t1_idx_1)與中間(int_t1_idx_1)依賴物件
SQL> begin 2 dbms_redefinition.register_dependent_object( 3 uname => 'jy', 4 orig_table => 't1', 5 int_table => 'int_t1', 6 dep_type => DBMS_REDEFINITION.CONS_INDEX, 7 dep_owner => 'jy', 8 dep_orig_name => 't1_idx_1', 9 dep_int_name => 'int_t1_idx_1'); 10 end; 11 / PL/SQL procedure successfully completed.
6.複製依賴物件
SQL> declare 2 num_errors pls_integer; 3 begin 4 dbms_redefinition.copy_table_dependents( 5 uname => 'jy', 6 orig_table => 't1', 7 int_table => 'int_t1', 8 copy_indexes => DBMS_REDEFINITION.CONS_ORIG_PARAMS, 9 copy_triggers => TRUE, 10 copy_constraints => TRUE, 11 copy_privileges => TRUE, 12 ignore_errors => TRUE, 13 num_errors => num_errors); 14 end; 15 / PL/SQL procedure successfully completed.
7.可選操作同步中間表
SQL> begin 2 dbms_redefinition.sync_interim_table( 3 uname => 'jy', 4 orig_table => 't1', 5 int_table => 'int_t1'); 6 end; 7 / PL/SQL procedure successfully completed.
8.完成聯機重定義操作
SQL> begin 2 dbms_redefinition.finish_redef_table( 3 uname => 'jy', 4 orig_table => 't1', 5 int_table => 'int_t1'); 6 end; 7 / PL/SQL procedure successfully completed.
SQL> select dbms_metadata.get_ddl(object_type =>'TABLE',name =>'T1',schema => 'JY') from dual; DBMS_METADATA.GET_DDL(OBJECT_TYPE=>'TABLE',NAME=>'T1',SCHEMA=>'JY') -------------------------------------------------------------------------------- CREATE TABLE "JY"."T1" ( "C2" NUMBER ) SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "TEST" 1 row selected.
可以看到表jy.t1已經成功能聯機重定義
9.等待任何查詢中間表的語句執行完成後將其刪除
SQL> desc jy.t1 Name Type Nullable Default Comments ---- ------ -------- ------- -------- C2 NUMBER Y SQL> drop table jy.t1 purge; Table dropped
到此重定義操作就完成了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2142201/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12.2使用物件資料型別來重定義表Oracle物件資料型別
- Oracle 12.2 使用聯機重定義對錶進行多處改變Oracle
- Oracle 12.2 聯機重定義使用VPD策略的表並修改表的列名Oracle
- Oracle使用聯機重定義來給表增加新列與分割槽Oracle
- 【問題分析】assm註冊依賴物件頻頻失敗SSM物件
- Oracle 12.2 聯機重定義使用VPD策略的表並不修改表的任何列Oracle
- Oracle 12.2 聯機重定義多個分割槽並將其移動到不同的表空間中Oracle
- 從檢視看Oracle物件依賴機制Oracle物件
- Oracle Listener 動態註冊 與 靜態註冊Oracle
- Oracle Listener 動態註冊與靜態註冊Oracle
- 詳解.NET依賴注入中物件的建立與“銷燬”依賴注入物件
- oracle監聽動態註冊與靜態註冊Oracle
- SpringBoot——自定義自動配置與起步依賴Spring Boot
- Oracle監聽的動態註冊與靜態註冊Oracle
- 反射、註解與依賴注入總結反射依賴注入
- Oracle 12.2使用dbms_redefinition.redef_table過程來重定義表的儲存屬性Oracle
- Gradle For Android (一) 基礎定義與依賴管理篇GradleAndroid
- oracle監聽動態註冊與靜態註冊[轉帖]Oracle
- ORACLE的動態註冊行為 ztOracle
- Pytest 順序執行,依賴執行,引數化執行
- 10g線上重定義新特性——關聯物件自動重新命名(二)物件
- 10g線上重定義新特性——關聯物件自動重新命名(一)物件
- oracle 線上重定義Oracle
- Oracle線上重定義Oracle
- 【翻譯】 Guice 動機——依賴注入的動機GUI依賴注入
- 依賴倒置(DIP)與依賴注入(DI)依賴注入
- spring動態註冊bean會使AOP失效?SpringBean
- SpringIOC容器-物件依賴Spring物件
- linux如何使程式開機自動執行Linux
- 一, 建立工程,引入依賴
- Oracle listener靜態註冊和動態註冊Oracle
- oracle的靜態註冊和動態註冊Oracle
- Online Redefinition線上重定義(三)--多表關聯重定義案例
- oracle 表線上重定義Oracle
- oracle表線上重定義Oracle
- 【Oracle】線上重定義表Oracle
- 反射,註解,動態代理,依賴注入控制反轉反射依賴注入
- oracle監聽靜態註冊和動態註冊Oracle