藉助 oracle提供的 expdp\impdp及exp\imp命令來實現導出\導入。由於exp\imp命令會自動忽略row_num=0的表,導致最後導出的表不完整。所以我們選擇使用expdp\impdp命令。
我們要完成的任務:
1,從airtest用戶導出.dmp的文件格式(也可以選擇格式爲.sql,但是sql表中不能有大字段(blob,clob,long),如果有,執行sql文件會報錯。)
2,將導出的a.dmp文件再倒入airtest用戶中,相當於備份。
3,將導出的a.dmp文件轉存到dev用戶中,相當於數據傳輸
sqlplus /nolog
connect / as sysdba
在plsql或者sqlplus中執行命令:
create directory dump_test as 'F:\dump'
(提前在硬盤上創建'F:\dump'對應的文件件)
--查看一下是否存在該目錄
select * from dba_directories;
--授權給操作用戶這個dump目錄的權限
grant read, write on directory dump_test to airtest;
grant read, write on directory dump_test to dev;
退出sql,到cmd下執行下列命令
任務1:使用本地用戶airtest進行導出數據,導出到dump_test指定的目錄中.即'F:\dump'
格式:Expdp 本地用戶/用戶的密碼@oracle的sid , directory參數指定導出到本地目錄 dumpfile指定導出文件的文件名
expdp airtest/airtest@orcl directory=dump_test dumpfile=a.dmp logfile=a.log
任務2:將數據導入到airtest 中
impdp airtest/airtest@orcl directory=dump_test dumpfile =a.dmp logfile=b.log ;
任務3:將數據導入到dev
impdp dev/dev@orcl directory=dump_test dumpfile=a.dmp logfile=b.log remap_schema=airtest:dev (結尾沒有分號!!!)
參考資料:
http://blog.163.com/shexinyang@126/blog/static/1367393122013612105445369/
http://www.cnblogs.com/lanzi/archive/2011/01/06/1927731.html
在實際操作中當impdp 和expdp時有如下報錯:
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
產生這個錯誤的原因通常有兩個:
1.對存放dmp文件或log文件的路徑沒有權限。
2.對dmp文件沒有權限。
反覆排查還是沒有找出原因。另闢蹊徑:使用oracle自帶的directory
select * from dba_directories;
選中一個directory,這裏選的是DATA_PUMP_DIR,path:/opt/oracle/admin/orcl/dpdump/
並將shadow文件從root/Downloads中移動到這個directory;
mv SHADOW.DMP /opt/oracle/admin/orcl/dpdump/
在bash下執行:
impdp shadow/shadow@orcl directory=DATA_PUMP_DIR dumfile=SHADWO.DMP logfile=2.log TABALE_EXISTS_ACTION=REPLACE;
TABALE_EXISTS_ACTION:當有表重複時,操作是替換。默認是skip。這裏僅僅對重複的table執行替換操作,但是,sequence重複時還會報錯:
可以刪掉sequence然後在impdp。
drop sequence hibernate_sequence;
補充,如果新建一個數據庫,從無到有的導入數據,如新建一個airback,然後執行impd時會出現如下錯誤:
連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39006: 內部錯誤
ORA-39068: 在 PROCESS_ORDER=-4 的行中主表數據無效
ORA-01950: 對錶空間 'USERS' 無權限
ORA-39097: 數據泵作業出現意外的錯誤 -1950
解決辦法:
grant unlimited tablespace to airback;
原因:
39068錯誤是由於表空間份額不足造成的連鎖反應
remap_model 權限不足:
爲數據庫授予導入導出的權限
grant exp_full_database
(grant imp_full_database to user /grant exp_full_database to user)