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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解.NET依賴注入中物件的建立與“銷燬”依賴注入物件
- SpringBoot——自定義自動配置與起步依賴Spring Boot
- Gradle For Android (一) 基礎定義與依賴管理篇GradleAndroid
- oracle的靜態註冊和動態註冊Oracle
- Pytest 順序執行,依賴執行,引數化執行
- spring動態註冊bean會使AOP失效?SpringBean
- 一, 建立工程,引入依賴
- 【翻譯】 Guice 動機——依賴注入的動機GUI依賴注入
- Oracle EBR 基於版本重定義Oracle
- 反射,註解,動態代理,依賴注入控制反轉反射依賴注入
- 在 NgModule 裡透過依賴注入的方式註冊服務例項依賴注入
- 聯機重定義表在10g的改進
- Maven依賴機制Maven
- laravel Modules外掛內定時任務執行,自定義命令註冊,外掛內資源釋出Laravel
- xxl-job執行器的註冊
- @EnableDiscoveryClient與Nacos自動註冊client
- 聊聊依賴注入註解@Resource和@Autowired依賴注入
- 【ASK_ORACLE】Oracle 12.2 Bug導致網路卡出現故障後RAC庫未向TCP註冊本地VIP監聽OracleTCP
- PHP 設計模式答疑-物件池與依賴注入的區別PHP設計模式物件依賴注入
- ORACLE 12.2中的更改與新功能Oracle
- 【物件導向依賴關係概念總結】物件導向程式設計的五種依賴關係物件程式設計
- 如何建立依賴專案工程--android moduleAndroid
- [譯] 在 iOS 上使用 Carthage 建立依賴iOS
- Hystrix 自動降級與依賴隔離原理
- C#機房重構之註冊窗體C#
- 定製.NET 6.0的依賴注入依賴注入
- 自己動手實現springboot執行時執行java原始碼(執行時編譯、載入、註冊bean、呼叫)Spring BootJava原始碼編譯Bean
- 嚴重PHP漏洞使威聯通裝置面臨遠端程式碼執行風險PHP
- Vue2元件掛載與物件陣列依賴收集Vue元件物件陣列
- 「轉」Laravel 依賴注入原理(詳細註釋)Laravel依賴注入
- python中物件導向_類_物件的概念與定義Python物件
- 【JDK命令列 一】手動編譯Java原始碼與執行位元組碼命令合集(含外部依賴引用)JDK命令列編譯Java原始碼
- GObject學習筆記(二)型別建立與註冊GoObject筆記型別
- 動態註冊和靜態註冊
- 聯機重定義修改欄位型別(NVARCHAR2->VARCHAR2)型別
- (轉載)依賴、關聯、聚合、組合
- 華納註冊聯絡
- TcpDump使用手冊TCP
- MyBatis 使用手冊MyBatis