使用PARTITION_OPTIONS引數控制資料泵分割槽表匯入

realkid4發表於2014-12-15

 

 

資料泵(Data Pump)是Oracle10g開始推出,並且不斷強化以期替代原有exp/imp工具的資料遷移工具。在11g中,資料泵產品不斷地強化功能和彌補缺陷,在原有的exp/imp功能基礎上提供了更多的靈活空間。

分割槽表Partition Table是我們經常遇到的資料物件型別。在11g中,Data Pump提供了針對分割槽表的操作選項引數PARTITION_OPTION。藉助這個新引入的引數,可以實現在匯入過程中對資料表結構進行變化。

本篇主要集中介紹PARTITION_OPTION引數的選項值和使用方法。

 

1、引數介紹和環境介紹

 

從取值上看,PARTITION_OPTIONS引數包括三個可選值,DepartitionMergeNone,用於指定匯入分割槽表的轉換方式。

 

 

PARTITION_OPTIONS

Specify how partitions should be transformed.

Valid keywords are: DEPARTITION, MERGE and [NONE].

 

 

預設情況下,該引數取值為NONE,表示不進行任何轉換。如果是分割槽資料表,匯入之後依然為分割槽資料表。Departition為分表操作,也就是將每個分割槽作為一個獨立的資料表進行匯入,匯入之後可見與原資料表分割槽對應的資料表集合。

Merge引數是取消分割槽設定,將資料匯入到一個非分割槽表的轉換動作。

下面筆者使用11.2.0.4版本進行測試。

 

 

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0 Production

TNS for 64-bit Windows: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

 

 

建立實驗使用者test,以及對應的許可權資訊。

 

 

SQL> create user test identified by test;

User created

 

SQL> grant select any dictionary to test;

Grant succeeded

 

SQL> grant resource, connect to test;

Grant succeeded

 

SQL> grant select_catalog_role to test;

Grant succeeded

 

 

test使用者下建立分割槽資料表t_part

 

 

SQL> conn test/test@sicsdb

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0

Connected as test

 

SQL> create table t_part

  2  (owner varchar2(100),

  3   object_id number,

  4   object_name varchar2(100))

  5  partition by list (owner)

  6  (

  7    partition p1 values ('SYS'),

  8    partition p2 values ('PUBLIC'),

  9    partition p3 values (default)

 10  );

 

Table created

 

SQL> insert into t_part select owner, object_id, object_name from dba_objects;

99695 rows inserted

 

SQL> commit;

Commit complete

 

 

分割槽表結構顯示。

 

 

SQL> select table_name, partition_name, num_rows from user_tab_partitions;

TABLE_NAME        PARTITION_NAME                   NUM_ROWS

------------------------------ ------------------------------ ----------

T_PART                         P1                            

T_PART                         P2                            

T_PART                         P3                            

 

 

SQL> exec dbms_stats.gather_table_stats(user,'T_PART',cascade => true);

PL/SQL procedure successfully completed

 

SQL> select table_name, partition_name, num_rows from user_tab_partitions;

TABLE_NAME        PARTITION_NAME                   NUM_ROWS

------------------------------ ------------------------------ ----------

T_PART             P1                                  37693

T_PART             P2                                  33889

T_PART             P3                                  28113

 

 

使用expdp匯出資料。

 

 

C:\Users\Administrator.SICSENVIRONMENT>expdp \"/ as sysdba\" dumpfile=test.dmp schemas=test

 

Export: Release 11.2.0.4.0 - Production on Mon Dec 15 14:17:48 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

(篇幅原因,有省略……

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported "TEST"."T_PART":"P1"                        1.358 MB   37693 rows

. . exported "TEST"."T_PART":"P2"                        1.356 MB   33889 rows

. . exported "TEST"."T_PART":"P3"                        1012. KB   28113 rows

Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded

******************************************************************************

Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:

  C:\APP\ADMINISTRATOR\ADMIN\SICSDB\DPDUMP\TEST.DMP

Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Dec 15 14:18:00 2

014 elapsed 0 00:00:10

 

 

2Merge引數使用

 

Merge引數使用之後,會將原有分割槽表合併為一般資料表。

 

 

C:\Users\Administrator.SICSENVIRONMENT>impdp \"/ as sysdba\" dumpfile=test.dmp remap_table=test.t_part:t_merge partition_options=merge

 

Import: Release 11.2.0.4.0 - Production on Mon Dec 15 14:28:01 2014

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit

Production

(篇幅原因,有省略……

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. . imported "TEST"."T_MERGE":"P1"                       1.358 MB   37693 rows

. . imported "TEST"."T_MERGE":"P2"                       1.356 MB   33889 rows

. . imported "TEST"."T_MERGE":"P3"                       1012. KB   28113 rows

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Job "SYS"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Mon Dec 15 14:28:03

2014 elapsed 0 00:00:02

 

 

匯入之後,資料schema段結構列表。

 

 

SQL> select segment_name, partition_name, segment_type, tablespace_name from user_segments;

 

SEGMENT_NAME    PARTITION_NAME  SEGMENT_TYPE         TABLESPACE_NAME

--------------- --------------- -------------------- ------------------------------

T_MERGE                         TABLE                USERS

T_PART          P1              TABLE PARTITION      USERS

T_PART          P2              TABLE PARTITION      USERS

T_PART          P3              TABLE PARTITION      USERS

 

 

新資料表t_merge被匯入,而且作為普通資料表出現。

 

3Departition引數

 

Departition引數作用是將分割槽表依據分割槽拆分為多個獨立的資料表。

 

 

C:\Users\Administrator.SICSENVIRONMENT>impdp \"/ as sysdba\" dumpfile=test.dmp remap_table=test.t_part:t_depa partition_options=departition

 

Import: Release 11.2.0.4.0 - Production on Mon Dec 15 14:34:07 2014

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit

(篇幅原因,有省略……

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. . imported "TEST"."T_PART_P1"                          1.358 MB   37693 rows

. . imported "TEST"."T_PART_P2"                          1.356 MB   33889 rows

. . imported "TEST"."T_PART_P3"                          1012. KB   28113 rows

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Job "SYS"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Mon Dec 15 14:34:12

2014 elapsed 0 00:00:04

 

 

新資料表被建立。

 

 

SQL> select segment_name, partition_name, segment_type, tablespace_name from user_segments;

 

SEGMENT_NAME    PARTITION_NAME  SEGMENT_TYPE         TABLESPACE_NAME

--------------- --------------- -------------------- ------------------------------

T_MERGE                         TABLE                USERS

T_PART_P1                       TABLE                USERS

T_PART_P2                       TABLE                USERS

T_PART_P3                       TABLE                USERS

T_PART          P1              TABLE PARTITION      USERS

T_PART          P2              TABLE PARTITION      USERS

T_PART          P3              TABLE PARTITION      USERS

 

7 rows selected 

 

 

4、結論

 

PARTITION_OPTIONS11g資料泵提出的新功能選項,在一些特殊場景下,可以方便的幫助我們解決實際問題。從本質上看,這部分轉換應該是在後設資料匯入過程中進行的轉換轉化。這樣的功能提供了一定程度的靈活性。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-1368496/,如需轉載,請註明出處,否則將追究法律責任。

相關文章