先普及一下使用expdp備份oracle資料庫的過程吧。
將伺服器A(CentOS)上的庫匯出:(服務端sqlplus裡可以執行的一般都可以在用戶端plsql裡遠程執行。sqlplus可以遠程操作嗎?沒用過。)
這裡示範sqlplus裡執行的:
cmd輸入:
sqlplus /nolog;
connect as sysdba;
接下來輸入sys賬戶及密碼登陸;#這裡以sysdba登陸,以便建立匯出目錄後給使用者drag賦予讀寫權限,所以不以drag登陸。另外,我試了sqlplus /as sysdba;登陸失敗,以及sqlplus sys/sys或sqlplus "sys/sys"都失敗,不知為何。
SQL>create directory dump_dir as '/opt/dump';
SQL>grant READ ,WRITE ON DIRECTORY dump_dir TO drag;
SQL>select * from dba_directories;#查看資料庫所有的目錄。
退出到系統:
C:>expdp drag/dragtest schemas=drag dumpfile=drag.dmp DIRECTORY=dump_dir 匯出drag使用者下的庫。
C:>EXPDP drag/dragtest directory=/var/ TABLES=t_hostinfhis_n1 dumpfile=drag.dmp parallel=4 logfile=exp.log #匯出一些表
C:>expdp drag/dragtest DIRECTORY=dump_dir DUMPFILE=drag.dmp FULL=y #匯出整個庫
錯誤和解決:
1、檔案無法正確寫入:dump_dir物理上不存在,手動建立,另外注意賦予許可權給drag;只有在系統身份下才能賦予許可權給drag,如果是drag建立的則不需要賦予。
有時候執行了grant 賦予了許可權也不行,索性系統裡面:chmod 777 /opt/dump ,然後就可以了。
2、最糾結的是,一開始我查看以前的操作記錄是:
expdp drag/dragtest@testLinux schemas=drag dumpfile=drag130.dmp DIRECTORY=dump_dir parallel=4 logfile=expdrag.log;匯出drag使用者下的庫。
注意賬戶資訊後面是要加上執行個體名的,可今天不斷報錯。後來把@及以後的去掉就不報錯了。。
難道是因為我本地匯出的,難道之前是遠程用plsql匯出的才加服務名?不記得了。。也許是這麼個道理。。
3.命令結束不要分號。