Oracle 12.2使用物件資料型別來重定義表
Oracle 12.2使用物件資料型別來重定義表,下面的例子將重定義表將列改變為物件屬性,原始表為customer,定義如下:
SQL> create table jy.customer( 2 cid number not null, 3 name varchar2(30), 4 street varchar2(100), 5 city varchar2(30), 6 state varchar2(2), 7 zip number(5) 8 ); Table created SQL> alter table jy.customer add constraint customer_pk primary key(cid); Table altered
建立新的物件型別
SQL> create type jy.addr_t as object 2 ( 3 street varchar2(100), 4 city varchar2(30), 5 state varchar2(2), 6 zip number(5,0) 7 ); 8 9 / Type created
聯機重定義操作如下:
1.用要執行聯機重定義操作的使用者登入資料庫
SQL> conn jy/jy@jypdb Connected.
2.驗證表是否可以執行聯機重定義,可以使用主鍵或偽主鍵來執行驗證操作。
SQL> begin 2 dbms_redefinition.can_redef_table( 3 uname => 'jy', 4 tname =>'customer', 5 options_flag => DBMS_REDEFINITION.CONS_USE_PK); 6 end; 7 / PL/SQL procedure successfully completed
3.建立中間表jy.int_customer
SQL> create table jy.int_customer 2 ( 3 cid number, 4 name varchar2(30), 5 addr addr_t 6 ); Table created
4.因為customer是一個非常大的表,為了讓下一步操作啟用並行執行以下語句:
SQL> alter session force parallel dml parallel 4; Session altered SQL> alter session force parallel query parallel 4; Session altered
5.使用主鍵來執行重定義操作
SQL> begin 2 dbms_redefinition.start_redef_table( 3 uname => 'jy', 4 orig_table => 'customer', 5 int_table => 'int_customer', 6 col_mapping => 'cid cid, name name, 7 addr_t(street, city, state, zip) addr'); 8 end; 9 / 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 => 'customer', 7 int_table => 'int_customer', 8 copy_indexes => DBMS_REDEFINITION.CONS_ORIG_PARAMS, 9 copy_triggers => TRUE, 10 copy_constraints => TRUE, 11 copy_privileges => TRUE, 12 ignore_errors => FALSE, 13 num_errors => num_errors, 14 copy_statistics => TRUE); 15 end; 16 / PL/SQL procedure successfully completed
7.可選操作同步中間表
SQL> begin 2 dbms_redefinition.sync_interim_table( 3 uname => 'jy', 4 orig_table => 'customer', 5 int_table => 'int_customer'); 6 end; 7 / PL/SQL procedure successfully completed
8.完成重定義操作
SQL> begin 2 dbms_redefinition.finish_redef_table( 3 uname => 'jy', 4 orig_table => 'customer', 5 int_table => 'int_customer'); 6 end; 7 / PL/SQL procedure successfully completed
SQL> select dbms_metadata.get_ddl(object_type =>'TABLE',name =>'CUSTOMER',schema => 'JY') from dual; DBMS_METADATA.GET_DDL(OBJECT_TYPE=>'TABLE',NAME=>'CUSTOMER',SCHEMA=>'JY') -------------------------------------------------------------------------------- CREATE TABLE "JY"."CUSTOMER" ( "CID" NUMBER NOT NULL ENABLE, "NAME" VARCHAR2(30), "ADDR" "JY"."ADDR_T" , CONSTRAINT "CUSTOMER_PK" PRIMARY KEY ("CID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TEST" ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TEST" 1 row selected.
可以看到表jy.customer已經成功能聯機重定義
9.等待任何查詢中間表的語句執行完成後將其刪除
SQL> desc jy.customer Name Type Nullable Default Comments ---- ------------ -------- ------- -------- CID NUMBER NAME VARCHAR2(30) Y ADDR ADDR_T Y SQL> drop table jy.customer purge; Table dropped
到此重定義操作就完成了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2142200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE物件型別表Oracle物件型別
- JAVASE——資料型別,變數定義及使用Java資料型別變數
- Oracle 資料型別Oracle資料型別
- 在oracle 9i下線上重定義表Oracle
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- 自定義資料型別資料型別
- 1.1. Oracle 資料庫使用者型別Oracle資料庫型別
- Oracle OCP(19):資料型別Oracle資料型別
- Oracle的number資料型別Oracle資料型別
- Oracle 11G DBMS_REDEFINITION修改表資料型別Oracle資料型別
- 定義多維的點模板類,任意資料型別資料型別
- Typescript 下 Mongoose 外來鍵型別&外來鍵陣列型別定義&型別保護&聯合型別理解TypeScriptGo型別陣列
- DM自定義資料型別資料型別
- Oracle EBR 基於版本重定義Oracle
- oracle 使用sql查詢表註釋和列註釋及資料型別等OracleSQL資料型別
- JavaScript獲取物件資料型別JavaScript物件資料型別
- NumPy之:資料型別物件dtype資料型別物件
- Oracle字串資料型別簡述Oracle字串資料型別
- JS中資料型別、內建物件、包裝型別物件、typeof關係JS資料型別物件
- 阿里為何禁止在物件中使用基本資料型別阿里物件資料型別
- golang基礎語法,定義函式型別 為已存在的資料型別起別名Golang函式資料型別
- 從原始資料型別到值物件資料型別物件
- 自主資料型別:在TVM中啟用自定義資料型別探索資料型別
- JavaScript筆記5:計時器、物件、基本資料型別、引用資料型別JavaScript筆記物件資料型別
- Java 資料型別和 MySql 資料型別對應一覽表JavaMySQL 資料型別
- Oracle和sqlserver資料型別對應OracleSQLServer資料型別
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- 015、Vue3+TypeScript基礎,使用watch監視ref定義的基本型別資料VueTypeScript型別
- Redis 基礎資料型別重溫Redis資料型別
- Redis 高階資料型別重溫Redis資料型別
- 重溫手冊(一):資料型別資料型別
- Vector中存放自定義資料型別資料型別
- Oracle 12.2 Heavy swapping 資料庫自動關閉OracleAPP資料庫
- JavaScript 基礎 (二) - 引用資料型別 (物件)JavaScript資料型別物件
- Golang通脈之型別定義Golang型別
- Hive(一)資料型別以及DDL資料定義Hive資料型別