oracle資料泵方式更換資料預設表空間.

xfhuangfu發表於2015-07-04

 oracle10g之前,匯入和匯出(imp/exp)都作為客戶端程式執行,匯出的資料由資料庫例項讀出,透過網路連線傳輸到匯出客戶程式,然後寫到磁碟上。所有資料在整個匯出程式下透過單執行緒操作,如果再匯出過程中發生網路中斷或客戶端程式異常,都會導致匯出操作失敗。

 

oracle10g中,推出了伺服器端的實用程式----資料泵(data pump)。它的所有工作都由資料庫例項來完成,資料庫可以並行來處理這些工作。透過impdp/expdp執行的命令實際上都是在呼叫server端的API在執行操作,一旦一個任務被排程或執行,客戶端就可以退出連線,任務會在server端繼續執行。如果一個7小時的匯出任務在執行了6小時後因為磁碟空間不夠而失敗,那麼也不用從頭開始重新啟動該任務,此時可以連線到這個失敗的任務,增加一個或多個新的轉儲(dmp)檔案,從失敗的地方重新啟動,這樣只需1小時就可以完成任務了。

 

 

源平臺

 

OSredhat linux as4

DBoracle 10.2.0.4

instance_namelinux10g

 

 

目的平臺

 

OSwindows2003

DBoracle 10.2.0.1

instance_nameora11g

 

 

源平臺 redhat linux as4 + oracle 10.2.0.4

 

1:首先在作業系統層面建立一個目錄 /oradata/expdir ,然後修改該目錄的使用者為oracle ,並授予該目錄讀寫許可權

[oracle@VM-10 ~]$ sqlplus / as sysdba

SQL> create or replace directory expdir as '/oradata/expdir';

SQL> select * from dba_directories;

OWNER      DIRECTORY_NAME      DIRECTORY_PATH

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

SYS            EXPDIR              /oradata/expdir

 

SQL> grant read,write on directory EXPDIR to scott;

 

2:檢視scott使用者所在的表空間

SQL>  select  username,default_tablespace  from dba_users;

USERNAME      DEFAULT_TABLESPACE

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

SCOTT            USERS

 

可以看到scott使用者預設的表空間是 USERS ,也就是說scott使用者下的所有物件都屬於 USERS表空間

 

3:在源平臺匯出資料

[oracle@VM-10 expdir]$ expdp scott/tiger directory=expdir   dumpfile=scott_20131008_%U.dmp  parallel=4 version=10.2.0.1 logfile=scott1008.log

 

Export: Release 10.2.0.4.0 - 64bit Production on Wednesday, 09 October, 2013 11:22:37

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting "SCOTT"."SYS_EXPORT_SCHEMA_01":  scott/******** directory=expdir dumpfile=scott_20131008_%U.dmp parallel=4 version=10.2.0.1 logfile=scott1008.log

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 192 KB

. . exported "SCOTT"."DEPT"                              5.648 KB       4 rows

. . exported "SCOTT"."EMP"                               7.812 KB      14 rows

. . exported "SCOTT"."SALGRADE"                          5.578 KB       5 rows

. . exported "SCOTT"."BONUS"                                 0 KB       0 rows

Processing object type SCHEMA_EXPORT/USER

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/TABLE/COMMENT

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

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

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

Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:

  /oradata/expdir/scott_20131008_01.dmp

  /oradata/expdir/scott_20131008_02.dmp

Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 11:22:42

 

 

注意:這裡面加了引數 version=10.2.0.1 ,表示匯出的dmp檔案將要匯入到版本為10.2.0.1 的目的庫中

 

然後將匯出的dmp檔案上傳到目的庫所在的匯入目錄中(expdir

 

 

目的平臺  windows2003 +oracle 10.2.0.1

 

1:建立新的表空間

C:\>sqlplus / as sysdba

SQL> create tablespace trans datafile 'C:\oradata\wn10g\trans.dbf' size 20m;

表空間已建立。

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME

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

SYSTEM

UNDOTBS1

SYSAUX

TEMP

USERS

TRANS

IDX_TBS

TEST

 

2:檢視匯入目錄

SQL> select * from dba_directories;

OWNER     DIRECTORY_NAME   DIRECTORY_PATH

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

SYS            EXPDIR              C:\expdir

 

3:建立新的使用者 trans01 ,指定該使用者的預設表空間為 TRANS,並授權

SQL> create user trans01 identified by trans01 default tablespace TRANS;

SQL> grant dba to trans01;

SQL> grant read,write on directory expdir to trans01;

 

4:在目的庫中匯入dmp檔案

將原使用者scott的資料匯入到trans01使用者下,儲存的表空間從users變更到test ,同時開啟4個並行程式執行

C:\>impdp trans01/trans01 dumpfile=scott_20131008_01.dmp,scott_20131008_02.dmp directory=expdir remap_schema=scott:trans01  remap_tablespace=users:test  content=all  parallel=4

Import: Release 10.2.0.1.0 - Production on 星期三, 09 10, 2013 11:54:44

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

連線到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已成功載入/解除安裝了主表 "TRANS01"."SYS_IMPORT_FULL_01"

啟動 "TRANS01"."SYS_IMPORT_FULL_01":  trans01/******** dumpfile=scott_20131008_0

1.dmp,scott_20131008_02.dmp directory=expdir remap_schema=scott:trans01 remap_ta

blespace=users:test content=all parallel=4

處理物件型別 SCHEMA_EXPORT/USER

ORA-31684: 物件型別 USER:"TRANS01" 已存在

處理物件型別 SCHEMA_EXPORT/SYSTEM_GRANT

處理物件型別 SCHEMA_EXPORT/ROLE_GRANT

處理物件型別 SCHEMA_EXPORT/DEFAULT_ROLE

處理物件型別 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

處理物件型別 SCHEMA_EXPORT/TABLE/TABLE

處理物件型別 SCHEMA_EXPORT/TABLE/TABLE_DATA

. . 匯入了 "TRANS01"."DEPT"                            5.648 KB       4

. . 匯入了 "TRANS01"."EMP"                             7.812 KB      14

. . 匯入了 "TRANS01"."SALGRADE"                        5.578 KB       5

. . 匯入了 "TRANS01"."BONUS"                               0 KB       0

處理物件型別 SCHEMA_EXPORT/TABLE/INDEX/INDEX

處理物件型別 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

處理物件型別 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

處理物件型別 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

處理物件型別 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

作業 "TRANS01"."SYS_IMPORT_FULL_01" 已經完成, 但是有 1 個錯誤 ( 11:54:57 完成)

 

 

5:驗證匯入的結果是否正確

 

C:\>sqlplus trans01/trans01

SQL> select table_name from user_tables;

TABLE_NAME

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

DEPT

EMP

BONUS

SALGRADE

 

SQL> select index_name,table_owner,table_name,tablespace_name from user_indexes;

INDEX_NAME   TABLE_OWNER    TABLE_NAME      TABLESPACE_NAME

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

PK_DEPT        TRANS01            DEPT              TEST 

PK_EMP         TRANS01            EMP               TEST

 

SQL> select count(*) from emp;

  COUNT(*)

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

        14

 

可以看到新匯入的表及表上的所有都在test表空間,匯入成功

 

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

相關文章