1、expdp和impdp簡介
資料泵導出工具(expdp):使用expdp将資料庫對象的中繼資料(對象定義) 或者 資料 導出到轉儲檔案中。
資料泵導入工具(impdp):使用impdp将轉儲檔案的資料庫對象的中繼資料(對象結構定義) 或者 資料 導入到oracle資料庫中。
資料泵的工作流程是這個樣子的:
1)在作業系統指令行執行 指令。
2)expdp,impdp指令調用DBMS_DATAPUMP PL/SQL包,這個api提供高速的導出導入功能。
3)當data移動的時候,data pump會自動選擇direct path 或者external table mechanism 或者兩種方式結合,當matedata(中繼資料,即資料定義)移動的時候,data pump 會使用DBMS_METADATA PL/SQL包,metadata API 會将中繼資料存儲在XML裡面,所有的程序都能load和unload這些中繼資料。
因為data pump 調用的是伺服器端的API, 是以當一個任務被排程或者執行的時候。用戶端就可以退出連接配接,任務job會在server端繼續執行。随後通過用戶端實用程式,從任何地方檢查任務的的狀态和進行修改。
2、使用expdp/impdp
使用資料泵導出包括:導出表,導出方案,導出表空間,導出資料庫。
expdp工具可以帶有多個指令行選項,下面詳細介紹expdp工具的所有指令選項。
1) ATTACH : 用于在客戶會話與已存在導出導入作業之間建立關聯。文法如下:
ATTACH = [schema_name.] job_name
如上所示,schema_name用于指定方案名,job_name用于指定導出作業名。注意,如果要使用ATTACH選項,那麼在指令行除了連接配接字元串和attach選項之外,不能指定任何其他選項。示例:
expdp scott /tiger ATTACH = scott.export_job
impdp scott/tiget ATTACH = import_job
2)CONTENT:用于指定要導出導入的内容,其預設值ALL, 文法如下:
CONTENT = {ALL | DATA_ONLY | METADATA_ONLY}
如上所示,當設定CONTENT選項為ALL時,會導出導入對象定義及其所有資料。當設定選項為DATA_ONLY時,隻會導出導入對象資料;當設定選項為METADATA_ONLY時,隻會導出導入對象定義。示例如下:
expdp scott/tiger DIRECTORY = dump DUMPFILE = a.dmp CONTENT = METADATA_ONLY
3) DIRECTORY :該選項用于指定轉儲檔案和日志檔案所在的位置。文法如下:
DIRECTORY = directory_object 。 其中directtory _object 用于指定目錄對象名,注意:目錄對象是使用CREATE DIRECTORY 語句所建立的對象,而不是os目錄。示例:
expdp scott/tiger DIRECTORY = dump DUMPFILE = a.dmp
impdp scott/tiger directory = dump dumpfile = a.dmp tables= emp
4)DUMPFIL : 用于指定轉儲檔案的名稱,預設名為expdp.dmp。 文法如下:
DUMPFILE =[ directory_object:] file_name[ ,/..]
directory_object指定目錄對象名。file_name用于指定轉儲檔案名。注意,如果不指定directory_object. 那麼導出工具會自動使用directory選項所 指定的目錄對象。示例:
expdp scott/tiger DIRECTORY = dump1 DUMPFILE = dump2:a.dmp —— 這個就會使用dump2目錄,而不會使用DIRECTORY所指定的目錄。
impdp scott/tiger directory=dump dumpfile = a.dmp tables=emp
5)ESTIMATE:指定估算被導出導入表所占用的磁盤空間的方法。預設值為BLOCKS,文法如下:
ESTIMATE = {BLOCKS | STATISTICS} 當設定選項為BLOCKS時,oracle後按照目标對象所占用的資料塊個數乘以資料塊尺寸估算對象占用的空間;當設定該選項為statistics時,oracle會根據最近的統計值估算對象占用的空間,示例:
expdp scott/tiger TABLES= emp ESTIMATE = STATISTICS DIRECTORY = dump DUMPFILE = a.dmp.
impdp scott/tiger TABLES= sales NETWORK_LINK=db_link DIRECTORY = dump ESTIMATE = STATISTICS
6) ESTIMATE_ONLY : 該選項用于指定是否隻估算導出作業所占用的磁盤空間,其預設值為n,文法如下:
ESTIMATE_ONLY={Y|N}
當設定該選項為Y時,導出作業隻會估算對象所占用的磁盤空間,而不會執行導出操作;當設定該選項為n時,導出作業不僅會估算對象所占用的磁盤空間。而且會執行導出操作。示例:
expdp scott/tiger ESTIMATE_ONLY = Y NOLOGFILE =y
7)EXCLUDE : 指定當執行導出導入操作時要排除的對象類型或相關對象。文法如下:
EXCLUDE = object_type [ :name_clause] [ ,...]
object_type 用于指定要排除的類型,name_clause用于指定要排除的具體對象。注意,EXCLUDE 和 INCLUDE 不能同時使用。示例:
expdp scott/tiger DIRECTORY = dump DUMPFILE= a.dmp EXCLUDE = VIEW;
impdp scott/tiger directory=dump dumpfile=a,dmp exclude=cluseter
8)FILESIZE : 用于指定導出檔案的最大尺寸,其預設值為0(辨別檔案尺寸無限制)文法:
FILESIZE = integer [B | K | M | G ] 示例:
expdp scott/tiger DIRECTORY= dump DUMPFILE = hr_3.dmp FILRSIZE= 3M
9) FLASHBACK_SCN :用于指定導出導入特定scn時刻的表資料,文法如下:
FLASHBACK_SCN = scn_value
如上所示,scn_value 用于辨別scn值,當設定該選項時,oracle 會激活flashback特質。注意FLASHBACK_SNC 和 FLASHBACK_TIME 不能同時使用,示例:
expdp scott/tiger DIRECTORY = dump DUMPFILE = a.dmp FLASHBACK_SCN = 385823;
impdp scott/tiger directory = dump flashback_scn = scn_number network=db_link
10)FLASHBACK_TIME :用于指定導出導入特征時間點的表資料。文法如下:
FLASHBACK_TIME=" to_timestamp(time-value)"
注意,FLASHBACK_TIME 和 FLASHBACK_SCN 不能同時使用。 示例:
expdp scott/tiger directory = dump DUMPFILE = a.dmp FLASHBACK_TIME = "to_timestamp('2012-05-12 14:35:24 ' , ' yyyy-mm-dd hh24:mi:ss')"
impdp scott/tiger directory = dump FLASHBACK_TIME = "to_timestamp('2012-05-12 14:35:24 ' , ' yyyy-mm-dd hh24:mi:ss')"
11) FULL :用于指定資料庫模式導出,其預設值為N,文法如下:
FULL={Y| N}
選項為y時,辨別執行資料庫導出,導入轉儲檔案的所有内容。注意,當執行資料庫導出時,
資料庫使用者必須具有exp_full_database 角色或dba角色 ,那麼導入該檔案時,使用者必須具有imp_full_database
角色或dba角色 ,
expdp scott/tiger DIRECTORY= dump DUMPFILE= full.dmp FULL = y
impdp system/manager directory=dump dumpfile = a.dump full= y
12) HELP :用于指定是夠顯示expdp指令行或導入選項的幫助資訊,其預設值為n,文法如下:
HELP={y | n} 當設定選項為y時,會顯示導出選項的幫助資訊。示例如下:
expdp help = y
impdp help = y
13)INCLUDE : 用于指定導出導入時要包含的對象類型及相關對象。文法如下:
INCLUDE = object_type [:name_clause] [,....]
如上所示,object_type 用于指定要導出的隊形類型,name_clause 用于指定要導出的對象名。注意,include和exclude選項不能同時使用,示例:
expdp scott/tiger DIRECTORY = dump DUMPFILE = a.dmp INCLUDE = TABLE
impdp scott/tiger directory = dump dumpfile = a.dmp include = view
14) JOB_NAME 指定導出導入作業的名稱,預設為SYS_XXX.。前文說過,調用的API都是job,注意作業名稱不能超過30字元,示例:
expdp scott/tiger DIRECTORY = dump DUMPFILE = a.dmp JOB_NAME = empjob_name
impdp scott/tiger DIRECTORY = dump DUMPFILE = a.dmp JOB_NAME =impjob_name
15) LOGFILE: 用于指定導出導入日志檔案的名稱,預設名稱為export.log 文法如下:
LOGFILE = [directory_object:] file_name
這裡directory_object 用于指定目錄對象名稱,file_name用于指定導出日志檔案名。注意,如果不指定directory_object,那麼導出作業會自動使用DIRECTORY的相應選項值,示例如下:
expdp scott/tiger DIRECTORY = dump DUMPFILE= a.dmp logfile = a.log
impdp scott/tiger directory=dump dumpfile = a.dmp logfile = a.txy
16) NETWORK_LINK 用于指定資料庫鍊名。如果要将遠端資料庫對象導出到本地執行個體的轉儲檔案中,必須設定該選項。文法如下:
NETWORK_LINK = source_database_link
這個source_database_link用于指定資料庫鍊名。注意,對象表不支援遠端導出。對于導入時,導入工具會将遠端資料庫對象導入到本地資料庫,并且使用該選項時不能指定dumpfile。示例:
expdp scott/tiger DIRECTORY = dump DUMPFILE= a.dmp NETWORK_L;INK = orcl
impdp scott/tiger directory = dump tables = emp network_link=orcl
17) NOLOGFILE : 用于指定禁止生成導出導入日志檔案,預設為n(表示不禁止,即允許生成)文法如下:
NOLOGFILE = {Y | N} 當設定選項為y時,導出導入操作不會生成日志檔案。示例:
expdp scott/tiger DUMPFILE = dump:a.dump NOLOGFILE = Y
impdp scott/tiger directory=dump dumpfile=a.dmp nologfile=y
18) PARALLEL :用于指定指定導出導入操作的并行程序個數,預設值為1.文法如下:
PARALLEL = integer
通過執行并行導出操作,可以加快導導入出速度。示例:
expdp scott/tiger DIRECTORY = dump DUMPFILR = a.dmp PARALLEL = 3
impdp scott/tiger DIRECTORY = dump DUMPFILR = a.dmp PARALLEL = 3
19 ) PARFLE : 用于指定導出導入參數檔案的名稱。文法如下:
PARFILE = [directory_path] file_name
如上所示:directory_path 用于指定參數檔案所在的目錄,file_name用于指定參數檔案名。參數檔案(parm.txt) 示例如下:
TABLES = DEMP , EMP
DIRECTORY = dump
DUMPFILE = tab.dmp
注意,在expdp/impdp 參數檔案中不能包含parafile選項,另外,如果在使用參數檔案時不指定directory_path 那麼導出導入工具會将目前的目錄作為參數檔案的路徑。使用參數檔案的示例如下:
expdp scott/tiget PARFILE = d:\dump\parm.txt
impdp scott/tiget PARFILE = d:\dump\parm.txt
20 ) QUERY 用于指定過濾導出導入資料的where條件,文法如下:
QUERY = [schema.] [table_name:] query_alause
這裡,schema用于指定方案名,table_name用于指定表名,query _clause用于指定條件限制子句。注意query選項不能與 CONNECT= METADATA_ONLY , ESTIMATE_ONLY, TRANSPORT_TALESPACES 等選項同時使用。示例如下:
expdp scott/tiger DIRECTORY = dump DUMPFILE = a.dmp TABLES = emp QUERY = ' " wheree deptno=20" '
impdp scott/tiger directory = dump dumpfile=tab.dmp tables=emp query=' " where deptno=10 " '
21.1)REMAP_DATAFILE :(隻用于impdp)該選項用于将源資料檔案的名稱轉變為目标資料檔案名稱,當在不同平台之間搬移表空間時可能需要使用該選項。文法如下:
REMAP_DATAFILE = source_datafile:target_datafile
如上所示:source_datafile用于指定源資料庫的資料檔案名,target_datafile用于指定目标資料庫的資料檔案名。注意,當使用該選項時要求使用者必須具有imp_full_database角色或者dba角色,示例:
impdp scott/tiger full=y directory=dump dumpfile = full.cmp remap_datafile='DB1$:tbs6.f ' : ' /db1/hrdata/payroll/tbs6.f '
21.2)REMAP_SCHEMA : (隻适用于impdp)用于将原方案所有對象裝載到目标方案中,文法如下:
REMAP_SCHEMA=source_schema:target_schema
如上,source_schema指定 原方案,target_schema用于指定目标方案。注意,使用該選項要求使用者必須具有IMP_FULL_DATABASE角色或者dba角色。示例如下:
impdp system/manager directory=dump dumpfile=tab.dmp remap_schema=scott :system
21.3) REMAP_TABLESPACE:(是适用于impdp)用于将源表空間的所有對象導入到目标表空間,示例如下:
REMAP_TABLESPACE= source_tablespace : target_tablespace
如上,source_tablespace指定 源表空間,target_tablespace用于指定目标表空間。
impdp system/manager directory =dump dumpfile=tab.dmp REMAP_TABLESPACE=user01 : user02
21.4)REUSE_DATAFILES : 用于指定在建立表空間時是否需要覆寫已經存在的資料檔案,預設值為n,文法如下:
REUSE_DATAFILES={Y | N }
如上所示:當設定選項為y時,在執行create tablespace指令時會覆寫已經存在的資料檔案;當設定選項為n時,如果檔案已經存在,那麼在執行create tablespace指令時會顯示錯誤資訊:
impdp system/manager directory = dump dumpfile=tab.dmp reuse_datafiles=y
21.5) SCHEMAS: 用于指定執行方案模式導出導入,預設為目前使用者方案。文法如下:
SCHEMAS = dvhrms_name [,...]
如上所示,schema_name 用于指定執行方案名,使用者可以導出導入自身方案,但如果要導出導入其他方案,則要求使用者必須具有exp/imp_full_database角色或者dba角色,示例如下:
expdp system/manager DIRECTORY= dump DUMPFILE= a.dmp SCHEMA= scott,system
impdp system/manager DIRECTORY= dump DUMPFILE= a.dmp SCHEMA= scott
22.1) SKIP_UNUSABLE_INDEXS :(隻适用于impdp)用于指定在導入時是否需要跳過不可使用的索引,其預設值為n。
SKIP_UNUSABLE_INDEXES={Y | N}
如上所示:當選項為y時,會跳過不可用的索引。當設定該選項為n時,會導入不可用的索引。示例:
impdp system/manager directory=dump dumpfile=full.dmp skip_unusable_indexes=y
22.2) SQLFILE: (隻适用于impdp) 用于指定将導入操作需要執行的所有ddl語句寫入到sql腳本檔案中。文法如下:
SQLFILE = [directory_object : ] file_name
如上所示,directory_object用于指定目錄對象名,file_name用于指定要生成的sql語句檔案名。注意,如果不指定directory_object,那麼導入工具會在directory選項所對應的os目錄中建立sql腳本。示例如下:
impdp scott/tiger directory=dump dumpfile = tab.dmp SQLFILE= a.sql
22.3) STATUS :指定顯示導出導入作業程序的詳細狀态,預設值為0,文法如下:
STATUS = integer
如上所示,integer用于指定顯示導出導入作業狀态的時間間隔(機關:秒)。當指定了該選項之後,每隔特定的時間間隔就會顯示作業完成的百分比,示例:
expdp system/manager DIRECTORY = dump DUMPFILE= a.dmp FULL = y STATUS = 30
impdp system/manager DIRECTORY = dump DUMPFILE= a.dmp FULL = y STATUS = 10
22.4) STREAMS_CONFIGURATION:(隻适用于impdp)該選項用于确定是否要導入流中繼資料(strean metadata) 預設值為y
sreams_donfiguraton = {y | n }
如上所示:當設定選項為y時,會導入流中繼資料;當設定選項為n時,不會導入流中繼資料。示例如下:
impdp system/manager directory=dump dumpfile = full.dmp tables=scott.emp streams_configration=n
23.1) TABLE_EXISTS_ACTION: (隻适用于impdp) 該選項用于指定檔表已經 存在時,導入作業應該執行的操作,預設值為SKIP,文法如下:
TABLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE }
如上所示:當設定為SKIP時,導入作業會跳過已經很存在的表并處理下一個對象;當設定該選項為APPEND時,導入作業會為表追加資料;當設定為TRUNCATE時,導入作業會截斷表,然後為其追加新資料;當設定該選項為REPLACE時,導入作業會删除已經存在表,重建立表并追加資料。注意,TRUNCATE選項不适用于簇表和NETWORK_LINK選項,示例:
impdp scott/tiger directory =dump dumpfile=tab.dmp table_exists_action=append
23.2) TABLES :用于指定表模式導出導入,文法:
TABLES=[schema_name.] table_name [:partition_name] [ , ....]
schema_name用于指定方案名,table_name用于指定要導出導入的表名,partition_name用于指定要導出導入的分區名。注意,使用者可以直接導出其自身方案的表,單如果要導出其他方案的表,則要就使用者必須具有exp_full_database角色或者dba角色 ,示例:
expdp system/manager DIRECTORY=dump DUMPFILE= a.dmp tables=scott.dept scott.emp
impdp scott/tiger DIRECTORY=dump DUMPFILE= a.dmp tables=emp
24) TABLESPACES :指定要導出的表空間清單,文法如下:TABLESPACES= tablespace_name[ ,...]
當指定了該選項後,會到處該表空間上所有的表,示例:
expdp system/manager DIRECTORY= dump DUMFILE= a.dmp TABLESPACES= user01;
impdp scott/tiger DIRECTORY= dump DUMFILE= a.dmp TABLESPACES= user01;
25.1)TRANSFORM :(隻适用于impdp) 用于指定是夠需要修改建立對象的ddl語句,文法如下:
TRANSFORM = transform_name:value [:object_tyoe]
如上所示,transform_name用于指定轉換名,其中segment_attributes用于辨別段屬性(實體屬性,存儲屬性,表空間,日志等資訊)storage用于辨別段存儲資料;value用于指定是夠要包含段屬性或段存儲屬性(Y:包含 , N,不包含) object_type用于指定對象類型,示例如下:
impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp TRANSRORM =segment_attributes:n:table
25.2)TRANSPORT_DATAFILES: (隻适用于impdp) 用于指定當搬移表空間時要被導入到目标資料庫的資料檔案名稱,文法如下:
TRANSPORT_DATAFILES=datafile_name 示例:
impdp system/manager directory=dum dumpfile=tts.dmp transport_datafiles='/user01/data/tbs1.f '
25.3) TRANSPORT_FULL_CHECK. 該選項用于指定被搬移表空間和未搬移表空間關聯關系的檢查,其預設值為n,文法如下:
TRANSPORT_FULL_CHECK={Y | N}
如上所示,當設定該選項為Y時,導出導入作業會檢查表空間之間的完整關系,如果表所在的表空間或其其索引所在的表空間隻有一個表空間被搬移。則會顯示錯誤資訊,當設定該選項為n時,導出導入作業隻會檢查單端依賴,如果要搬移索引所在的表空間,單未搬移表所在的表空間,那麼會顯示錯誤資訊; 但是如果要搬移表所在的表空間,未搬移索引所在的表空間,則不會顯示錯誤資訊。注意,當執行impdp時,該選項必須與NETWORK_LINK同時使用。示例:
expdb system/manager DIRECTORY= dump DUMPFILE = b.dmp TRANSPORT_TABLESPACES = user01 TRANSPORT_FULL_CHECK=Y;
impdb system/manager DIRECTORY= dump TRANSPORT_TABLESPACES = user01 NETWOEK_LINK=source_database_link TRANSPORT_FULL_CHECK=Y TRANSPORT_DATAFILES='/wkdir/data/user_01.f '
26) TRANSPORT_TABLESPACES 用于指定執行表空間模式導出導入,文法如下:
TRANSPORT_TABLESPACES = tablwspace_name [,..]
這裡tablespace_name表示要導出表空間名稱,當搬移表空間時,要求資料庫使用者必須具有EXP/IMP_FULL_DATABASE角色或者dba角色。示例如下:
expdp system/manager DIRECTORY = dump DUMPFILE = b.dmp TRANSPORT_TABLESPACE = user01;
impdp system/manager directory=dump transport_tablespaces=tabs_6 NETWORK_LINK=source_database_link TRANSPORT_FULL_CHECK=y TRANSPORT_DATAFILES=‘/wkdir/data/tbs6.f ’
27) VERSION : 用于指定被導出對象的資料庫版本,其預設值為COMPARIBLE 文法如下:
VERSION = {COMPATIBLE |LATEST | version_string } 當設定該資料項為COMPATIBLE時,會根據初始化參數COMPATIBLE生成對象中繼資料; 當設定該參數為LATEST 時,會根據資料庫的實際版本生成對象中繼資料;version_string 用于指定資料庫版本字元串,示例如下:
expdp scott/tiger DIRECTORY = dump DUMPFILE = c.dmp VERSION = latest
impdp scott/tiger DIRECTORY = dump DUMPFILE = c.dmp VERSION = latest
3、調用 expdp/impdp
當使用expdp工具時,必須首先建立directory對象,而且需要為資料庫使用者授予使用directory對象的權限,操作如下:
SQL> conn / as sysdba
SQL> create directory dump_dir as '/home/oracle/exp';
SQL>grant read , write on directory dump_dir to scott;
如果這個導出目錄不想要了,可用下列語句删除:
SQL>drop directory dump_dir;
1.1、導出表:導出表是指将一個或者多個表的資料結構集齊資料存儲到轉儲檔案中,導出表是通過使用tables選項來完成的。普通使用者隻能導出自身方案表,如果要導出其他方案表,則要求使用者必須具有exp_full_database 角色或 dba角色。注意,當使用導出表模式時,每次隻能導出同屬于一個方案的表,下面以導出scott方案的dept和emp表為例,說明導出表的方法。
expdp scott/tiger DIRECTORY = dump_dir DUMPFIEL = tab.dmp TABLES= dept,emp.
1.2、導入表:當導入表時,既可以将表導入到源方案中,也可以蔣彪導入到其他方案中,注意如果要将表導入到其他方案,則必須制定:remap_schema選項。下面将表dept,emp分别導入到自身方案scott和方案system為例說明:
impdp scott/tiger directory=dump_dir dumpfile=tab.dmp tables=dept,emp
impdp system/manager directory=dump_dir dumpfile=tab.dmp tables=scott.dept , scott.emp remap_schema=scott : system
2.1、導出方案:是指将一個或多個方案的所有對象結構及資料 存儲到轉儲檔案中,導出方案是通過schemas 選項來完成的。普通使用者隻能導出自身方案。如果要導出其他方案,則要求使用者必須有dba角色,或EXP_FULL_DATABASE角色,下面以導出system方案和scott方案的所有對象為例說明:
expdp system/manager directory = dump_dir dumpfile = schema.dmp schemas = system,scott
2.2、導入方案:普通使用者隻能導入自身方案。如果要導入其他方案,則要求使用者必須有dba角色,或IMP_FULL_DATABASE角色。當導入方案時,既可以将方案的所有對象導入到原方案中,也可以将方案的所有隊形導入到其他方案中。注意,如果要将方案對象導入到其他方案中,則必須制定remap_schema選項,
impdp scott/tiger directory=dump_dir dumpfile=schema.dmp schemas=scott
impdp system/manager directory=dump_dir dumpfile=schema.dmp schemas = scott remap_schema = scott : system
3.1、導出表空間:是指将一個或多個表空間的所有對象結構及資料 存儲到轉儲檔案中,導出表空間是通過tablespaces選項來完成的。導出表空間,要求使用者必須有dba角色,或EXP_FULL_DATABASE角色,下面以導出user01和 user02為例說明:
expdp system/manager directory = dump_dir dumpfile = tablespace.dmp tablespaces = user01,user02。
3.2、導入表空間:是指将轉儲檔案中的一個或多個表空間的所有對象結構及資料 裝載到資料庫中,導入表空間是通過tablespaces選項來完成的。
impdp system/manager directory = dump_dir dumpfile = tablespace.dmp tablespaces = user01
4.1、導出資料庫:導出資料庫是指将資料庫的所有對象及資料存儲到轉儲檔案中,倒數資料庫是通過full選項來完成的,導出資料庫要求使用者必須具有dba角色或exp_full_database角色,注意當導出資料庫時,不會導出sys,ordsys,ordplugins,ctxsys。mdsys,lbacsys,xdb等方案對象。
expdp system/manager directory = dump_dir dumpfile= full.dmp full = y;
4.2、導入資料庫:如果到處轉儲檔案時要求使用者必須具有exp_full_database 角色或者dba角色,那麼導入資料庫時也要求使用者必須具有imp_full_database角色或者dba角色,示例如下:
impdp system/manager directory =dump_dir dumpfile = fill.dmp full=y.
4、搬移表空間
同過查詢動态性能視圖v$transportable_platform可以顯示在哪些os平台之間可以搬移表空間。
SQL> select platform_name from v$transportable_platform;
搬移表空間可以使用emp/imp工具,還可以使用expdp/impdp更快。但是搬移表空間有以下限制:
1)要求源資料庫和目标資料庫必須具有相同的資料庫字元集和民族字元集,通過查詢資料字典視圖NLS_DATABASE_PARAMETERS,dba使用者可以取得資料庫字元集(NLS_CHARACTERSET)和民族字元集(NLS_NCHAR_CHARARCTERSET)
2)不能将表空間搬移到具有同名 表空間的目标資料庫中,在10g之前,如果在目标資料庫中存在同名表空間。那麼表空間将無法搬移。但從10g開始,通過使用alter tablespace rename 指令可以修改中繼資料庫表空間或目标資料庫表空間的名稱。
3)不能搬移system表空間和sys使用者對象所在的表空間。
4)如果要将表空間搬移到其他os平台上,則必須将初始化參數compatible設定為10.0以上。
下面以在windows平台上将demo資料庫的user02表空間搬移到orcl資料庫中為例,說明搬移表空間的方法,具體操作步驟如下:
1、确定自包含表空間集合,自包含表空間集合是指具有關聯關系的表空間集合。當搬移表空間是,如果兩個表空間之間存在關聯關系,則必須同時搬移這兩個表空間。(就像一個表空間a含有表,另個一表空間b含有a表空間表的索引)。發生以下情況時,我們說違反了自包含表空間集合的規則,也就是不能搬移:
表空間集合含有sys方案對象。
表空間集合包含了索引所在的表空間,但是沒有包含索引基表所在的表空間。
表空間集合沒有包含分區表的所有分區。
表空間集合包含了表所在的表空間,但是沒有包含其lob列所在的表空間。
在搬移之前,為了確定特定的表空間集合可以被搬移,必須先檢查表空間集合是否為自包含的,通過執行包:DBMS_TTS的過程TRANSPORT_SET_CHECK可以完成這項任務,當執行 了該過程之後,系統會将違反自包含表空間集合規則的資訊寫入到臨時表transport_set_violations 。當查詢該臨時表時,如果沒有傳回任何資訊,則說明表空間集合是自包含的,否則會傳回違反自包含表空間集合規則的詳細資訊。注意,執行DBMS_TTS包要求使用者必須具有EXECUTE_CATALOG_ROLE角色,示例:
SQL> conn system/manager
SQL> execute sys.dbms_tts.tranport_set_check('user02' , true)
SQL > select * from sys.transport_set_violations ——此時會顯示一些違反自包含規則的資訊。
為了確定成功執行搬移,可以删除其中的索引,或者将索引移動到其他表空間。
SQL > drop index scott.dept_emp_idx; ——将産生沖突的索引删除。
2、生成要搬移的表空間集合。
首先将所有要搬移的表空間轉變為隻讀狀态,以確定其内容不會發生改變,示例:
SQL> alter tablespace user02 read only;
這時就可以使用資料泵導出工具搬移表空間集合了。注意,當生成要搬移的表空間集合時,要求使用者必須具有emp_full_database角色或者dba角色。示例如下:
SQL > HOST expdp system/manager directory=dump_dir dumpfile=transport.dmp tranport_tablespaces=user02
3、傳送轉儲檔案和資料庫檔案到目标資料庫。在生車了轉儲檔案之後,可以使用任何拷貝工具(如cp指令等)将轉儲檔案和自包含表空間集合的資料檔案傳送到目标資料庫所在的機器的合适位置。本例假定demo資料庫和orcl資料庫在同一台機器上,是以在這裡隻是拷貝資料檔案到相應的目錄。示例:
SQL> host copy d:\demo\user02.dbf
d:\oracle\oradata\orcl\user02.dbf
4、插入表空間到目标資料庫:
在将這兩個檔案傳送到目标資料庫之後,就可以使用資料泵導入工具将表空間user02插入到目标資料庫了。注意,插入表空間到資料庫要求使用者必須具有imp_full_database角色或者dba角色;另外,如果目标資料庫有同名表空間,則需要執行alter tablespace rename指令修改表空間名稱,因為demo資料庫的标準塊尺寸為4K,orcl資料庫的标準塊支援為8K,是以需要在orcl資料中配置設定非标準資料庫高速緩存DB_4K_CACHE_SIZE,然後才能将表空間user02插入到orcl資料庫,具體示例如下:
SQL> alter system set db_cache_size=20M;
SQL> alter system set db_4k_cache_size= 4M;
SQL.> HOST Impdp system/manager@orcl directory=dump_dir dumpfile=trandport.dmp tranport_datafiles=d:\oracle\oradata\orcl\user02.dbf remap_schema= scott: hr
在執行了以上指令之後,就将user02表空間插入到目标資料庫orcl中 了,應為user02表空間處于隻讀狀态,是以為了在該表空間上執行dml和ddl操作,還應該将表空間轉變為可續寫狀态:
SQL> alter tablespace user02 read write;
<a href="http://blog.csdn.net/tianlesoftware/article/details/4674224">http://blog.csdn.net/tianlesoftware/article/details/4674224</a>