版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/xinxiaoyonng/article/details/79436673
oracle11g數據庫導入導出:
①:傳統方式——exp(導出)和(imp)導入:
②:數據泵方式——expdp導出和(impdp)導入;
③:第三方工具——PL/sql Develpoer;
1、什麼是數據庫導入導出?
oracle11g數據庫的導入/導出,就是咱們一般所說的oracle數據的還原/備份。
數據庫導入:把.dmp 格式文件從本地導入到數據庫服務器中(本地oracle測試數據庫中);
數據庫導出:把數據庫服務器中的數據(本地oracle測試數據庫中的數據),導出到本地生成.dmp格式文件。
.dmp 格式文件:就是oracle數據的文件格式(好比視頻是.mp4 格式,音樂是.mp3 格式);
2、兩者優缺點描述:
1.exp/imp:
優勢:代碼書寫簡單易懂,從本地便可直接導入,不用在服務器中操做,下降難度,減小服務器上的操做也就 保證了服務器上數據文件的安全性。
缺點:這種導入導出的速度相對較慢,合適數據庫數據較少的時候。若是文件超過幾個G,大衆性能的電 腦,至少須要4~5個小時左右。
2.expdp/impdp:
優勢:導入導出速度相對較快,幾個G的數據文件通常在1~2小時左右。
缺點:代碼相對不易理解,要想實現導入導出的操做,必須在服務器上建立邏輯目錄(不是真正的目錄)。咱們 都知道數據庫服務器的重要性,因此在上面的操做必須慎重。因此這種方式通常由專業的程序人員來完 成(不必定是DBA(數據庫管理員)來幹,中小公司可能沒有DBA)。
3.PL/sql Develpoer:
優勢:封裝了導入導出命令,無需每次都手動輸入命令。方便快捷,提升效率。
缺點:長時間應用會對其產生依賴,下降對代碼執行原理的理解。
3、特別強調:
目標數據庫:數據即將導入的數據庫(通常是項目上正式數據庫);
源數據庫:數據導出的數據庫(通常是項目上的測試數據庫);
1.目標數據庫要與源數據庫有着名稱相同的表空間。
2.目標數據在進行導入時,用戶名儘可能相同(這樣保證用戶的權限級別相同)。
3.目標數據庫每次在進行數據導入前,應作好數據備份,以防數據丟失。
4.使用數據泵時,必定要如今服務器端創建可用的邏輯目錄,並檢查是否可用。
5.弄清是導入導出到相同版本仍是不一樣版本(oracle10g版本與oracle11g版本)。
6.目標數據導入前,弄清楚是數據覆蓋(替換),仍是僅插入新數據或替換部分數據表。
7.肯定目標數據庫磁盤空間是否足夠容納新數據,是否須要擴充表空間。
8.導入導出時注意字符集是否相同,通常Oracle數據庫的字符集只有一個,而且固定,通常不改變。
9.導出格式介紹:
Dmp格式:.dmp是二進制文件,可跨平臺,還能包含權限,效率好;
Sql格式:.sql格式的文件,可用文本編輯器查看,通用性比較好,效率不如第一種,
適合小數據量導入導出。尤爲注意的是表中不能有大字段 (blob,clob,long),若是有,會報錯;
Pde格式:.pde格式的文件,.pde爲PL/SQL Developer自有的文件格式,只能用PL/SQL Developer工具
導入導出,不能用文本編輯器查看;
10.肯定操做者的帳號權限。
4、兩者的導入導出方法:
一、傳統方法:
通用命令:exp(imp) username/password@SERVICENAME:1521 file="e:\temp.dmp" full = y;
數據庫導出舉例:sql
exp xinxiaoyong/123456@127.0.0.1:1521 file="e:\temp.dmp" full = y;數據庫
exp:導出命令,導出時必寫。
imp:導入命令,導入時必寫,每次操做,兩者只能選擇一個執行。
username:導出數據的用戶名,必寫;
password:導出數據的密碼,必寫;
@:地址符號,必寫;
SERVICENAME:Oracle的服務名,必寫;
1521:端口號,1521是默認的能夠不寫,非默認要寫;
file="e:\temp.dmp" : 文件存放路徑地址,必寫;
full=y :表示全庫導出。能夠不寫,則默認爲no,則只導出用戶下的對象;
方法細分:
1.徹底導入導出:
exp(imp) username/password@SERVICENAME:1521 file="e:\temp.dmp" full = y;
2.部分用戶表table導入導出:
exp(imp) username/password@SERVICENAME:1521 file="e:\temp.dmp" tabels= (table1,table2,table3,...);
3.表空間tablespaces導入導出:
//一個數據庫實例能夠有N個表空間(tablespace),一個表空間下能夠有N張表(table)。
exp(imp) username/password@SERVICENAME:1521 file="e:\temp.dmp" tablespaces= (tablespace1,tablespace2,tablespace3,...);
4.用戶名username對象導入導出:
exp(imp) username/password@SERVICENAME:1521 file="e:\temp.dmp" owner(username1,username2,username3);
二、數據泵方法:
建立directory:
expdp(impdp) username/password@SERVICENAME:1521 schemas=username dumpfile=file1.dmp logfile=file1.log directory=testdata1 remap_schema=test:test;
數據庫導出舉例:
expdp xinxiaoyong/123456@127.0.0.1:1521 schemas=xinxiaoyong dumpfile=test.dmp
logfile=test.log directory=testdata1;安全
exp:導出命令,導出時必寫。
imp:導入命令,導入時必寫,每次操做,兩者只能選擇一個執行。
username:導出數據的用戶名,必寫;
password:導出數據的密碼,必寫;
@:地址符號,必寫;
SERVICENAME:Oracle的服務名,必寫;
1521:端口號,1521是默認的能夠不寫,非默認要寫;
schemas:導出操做的用戶名;
dumpfile:導出的文件;
logfile:導出的日誌文件,能夠不寫;
directory:建立的文件夾名稱;
remap_schema=源數據庫用戶名:目標數據庫用戶名,兩者不一樣時必寫,相同能夠省略;
1.查看錶空間:
select * from dba_tablespaces;
2.查看管理理員目錄(同時查看操做系統是否存在,由於Oracle並不關心該目錄是否存在,若是不存 在,則出錯)。
select * from dba_directories;
3.建立邏輯目錄,該命令不會在操做系統建立真正的目錄,最好以system等管理員建立。
create directory testdata1 as 'd:\test\dump';
4.給xinxiaoyong用戶賦予在指定目錄的操做權限,最好以system等管理員賦予。
//xinxiaoyong 是用戶名(123456是用戶密碼)
grant read,write on directory testdata1 to xinxiaoyong;
5.導出數據服務器
1)按用戶導 expdp xinxiaoyong/123456@orcl schemas=xinxiaoyong dumpfile=expdp.dmp directory=testdata1;oracle
2)並行進程parallel expdp xinxiaoyong/123456@orcl directory=testdata1 dumpfile=xinxiaoyong3.dmp parallel=40 job_name=xinxiaoyong3
3)按表名導 expdp xinxiaoyong/123456@orcl tables=emp,dept dumpfile=expdp.dmp directory=testdata1;
4)按查詢條件導 expdp xinxiaoyong/123456@orcl directory=testdata1 dumpfile=expdp.dmp tables=emp query='WHERE deptno=20';
5)按表空間導 expdp system/manager directory=testdata1 dumpfile=tablespace.dmp tablespaces=temp,example;
6)導整個數據庫 expdp system/manager directory=testdata1 dumpfile=full.dmp FULL=y;
6.還原數據
1)導到指定用戶下 impdp xinxiaoyong/123456 directory=testdata1 dumpfile=expdp.dmp schemas=xinxiaoyong;
2)改變表的owner impdp system/manager directory=testdata1 dumpfile=expdp.dmp tables=xinxiaoyong.dept remap_schema =xinxiaoyong:system;
3)導入表空間 impdp system/manager directory=testdata1 dumpfile=tablespace.dmp tablespaces=example;
4)導入數據庫 impdb system/manager directory=dump_dir dumpfile=full.dmp FULL=y;
5)追加數據 impdp system/manager directory=testdata1 dumpfile=expdp.dmp schemas=system table_exists_action;
三、PLSQL方法:
登陸plsql工具,所使用用戶爲源數據庫有導出權限(exp_full_database,dba等)的用戶。
1.導出建表語句(包括存儲結構) 編輯器
導出步驟tools ->export user object,選擇要導出的對象,導出.sql格式文件並等待導出完成,如 下圖:工具
導出數據文件 ;
2.導出步驟tools ->export tables,選擇要導出的表及導出的格式進行導出。 性能
導出爲dmp格式,以下圖:測試
導出爲sql格式,以下圖: spa
導出爲pde格式,以下圖:
提示說明:採用第三方工具導出導入整個數據庫的話,耗時較長,必定要有足夠
的時間來操做(數據量大的話須要好幾個小時)。
3.導入建表語句
導入步驟tools->import tables->SQL Inserts 導入.sql文件
4.導入數據;
tools->import talbes,而後再根據導出的數據格式選擇導入dmp文件,或者sql文件,
或者pde文件。
提示說明:導入以前最好把之前的表刪除,固然導入另外數據庫除外。
另外導入時當發現進度條一直卡在一個點,並且導出的文件再也不增大時,甚至是提示程序
未響應,千萬不要覺得程序卡死了,這個導入導出就是比較緩慢,只要沒有提示報錯,
或者導入完成就不要中止程序。
提示:建立數據庫,表空間這裏略過,本文主要討論數據的導入導出,若是對此感受稍有遺漏,盡請見諒。因爲水平有限,本文檔僅提供參考。如代碼有錯誤之處,請見諒。若是有更好的開發經驗,感謝回覆。謝謝觀看!!!;————————————————版權聲明:本文爲CSDN博主「xinxiaoyong」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/xinxiaoyonng/article/details/79436673