數據庫導入導出:
使用EXPDP和IMPDP時應該注意的事項: EXP和IMP是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。 EXPDP和IMPDP是服務端的工具程序,他們只能在ORACLE服務端使用,不能在客戶端使用。 IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件。 expdp或impdp命令時,可暫不指出用戶名/密碼@實例名 as 身份,然后根據提示再輸入,如: expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1; 一、創建邏輯目錄,該命令不會在操作系統創建真正的目錄,最好以system等管理員創建。 create directory dpdata1 as 'd:\test\dump'; 二、查看管理理員目錄(同時查看操作系統是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯) select * from dba_directories; 三、給scott用戶賦予在指定目錄的操作權限,最好以system等管理員賦予。 grant read,write on directory dpdata1 to scott; 四、導出數據 1)按用戶導 expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1; 2)並行進程parallel expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3 3)按表名導 expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1; 4)按查詢條件導 expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20'; 5)按表空間導 expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example; 6)導整個數據庫 expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y; 五、還原數據 1)導到指定用戶下 impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott; 2)改變表的owner impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system; 3)導入表空間 impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example; 4)導入數據庫 impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y; 5)追加數據 impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION 數據泵impdp參數: 1.REMAP_DATAFILE 該選項用於將源數據文件名轉變為目標數據文件名,在不同平台之間搬移表空間時需要該選項. REMAP_DATAFILE=source_datafie:target_datafile 2.REMAP_SCHEMA 該選項用於將源方案的所有對象裝載到目標方案中. REMAP_SCHEMA=source_schema:target_schema 3.REMAP_TABLESPACE 將源表空間的所有對象導入到目標表空間中 REMAP_TABLESPACE=source_tablespace:target:tablespace 4.REUSE_DATAFILES 該選項指定建立表空間時是否覆蓋已存在的數據文件.默認為N REUSE_DATAFIELS={Y | N} 5.SKIP_UNUSABLE_INDEXES 指定導入是是否跳過不可使用的索引,默認為N 6,sqlfile 參數允許創建DDL 腳本文件 impdp scott/tiger directory=dump_scott dumpfile=a1.dmp sqlfile=c.sql 默認放在directory下,因此不要指定絕對路徑 7.STREAMS_CONFIGURATION 指定是否導入流元數據(Stream Matadata),默認值為Y. 8.TABLE_EXISTS_ACTION 該選項用於指定當表已經存在時導入作業要執行的操作,默認為SKIP TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE } 當設置該選項為SKIP時,導入作業會跳過已存在表處理下一個對象; 當設置為APPEND時,會追加數據; 當設置為TRUNCATE時,導入作業會截斷表,然后為其追加新數據; 當設置為REPLACE時,導入作業會刪除已存在表,重建表並追加數據; 注意,TRUNCATE選項不適用與簇表和NETWORK_LINK選項 從一個用戶的一個表空間導入到另一個用戶的另一個表空間 impdp username/passwd directory=expdptemp dumpfile=2015.11.24.dmp remap_schema=training_zj:hagen.zj REMAP_TABLESPACE=training:zhejiang.jianli 關於空表exp不會導出的問題 1、Oracle11g默認對空表不分配segment,故使用exp導出Oracle11g數據庫時,空表不會導出。 2、設置deferred_segment_creation 參數為FALSE后,無論是空表還是非空表,都分配segment。 在sqlplus中,執行如下命令: SQL>alter system set deferred_segment_creation=false; 查看: SQL>show parameter deferred_segment_creation; 該值設置后只對后面新增的表產生作用,對之前建立的空表不起作用。 3、可以使用手工為空表分配Extent的方式,來解決導出之前建立的空表的問題。說明如下: 3.1 使用ALLOCATE EXTENT的說明 使用ALLOCATE EXTENT可以為數據庫對象分配Extent。其語法如下: ----------- ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer } ----------- 可以針對數據表、索引、物化視圖等手工分配Extent。 ALLOCATE EXTENT使用樣例: ALLOCATE EXTENT ALLOCATE EXTENT(SIZE integer [K | M]) ALLOCATE EXTENT(DATAFILE 'filename') ALLOCATE EXTENT(INSTANCE integer) ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE 'filename') ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer) 針對數據表操作的完整語法如下: ----------- ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})] ----------- 故,需要構建如下樣子簡單的SQL命令: ----------- alter table aTabelName allocate extent ----------- 3.2 構建對空表分配空間的SQL命令, 查詢當前用戶下的所有空表(一個用戶最好對應一個默認表空間)。命令如下: ----------- SQL>select table_name from user_tables where NUM_ROWS=0; ----------- 根據上述查詢,可以構建針對空表分配空間的命令語句,如下: ----------- SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 ----------- 批量輸出上述生成的SQL語句,建立C:\createsql.sql,其內容如下: ----------- set heading off; set echo off; set feedback off; set termout on; spool C:\allocate.sql; Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; spool off; ----------- 執行C:\createsql.sql,命令如下: ----------- SQL>@ C:\createsql.sql; ----------- 執行完畢后,得到C:\allocate.sql文件。 打開該文件會看到,已經得到對所有空表分配空間的命令SQL語句。 3.4 執行SQL命令,對空表分配空間: 執行C:\allocate.sql,命令如下: ----------- SQL>@ C:\allocate.sql; ----------- 執行完畢,表已更改。 3.4 此時執行exp命令,即可把包括空表在內的所有表,正常導出。 另外:Oracle11g中,對密碼是大小寫敏感的,即密碼中的字母是區分大小寫的。 在Oracle10g中及以前,密碼中的字母大小寫無所謂。
