oracle11g數據庫導入導出方法教程

原文:https://blog.csdn.net/xinxiaoyonng/article/details/79436673 

oracle11g數據庫導入導出:
①:傳統方式——exp(導出)和(imp)導入:
②:數據泵方式——expdp導出和(impdp)導入;
③:第三方工具——PL/sql Develpoer;
一、什麼是數據庫導入導出?
oracle11g數據庫的導入/導出,就是我們通常所說的oracle數據的還原/備份。
數據庫導入:把.dmp 格式文件從本地導入到數據庫服務器中(本地oracle測試數據庫中);
數據庫導出:把數據庫服務器中的數據(本地oracle測試數據庫中的數據),導出到本地生成.dmp格式文件。
.dmp 格式文件:就是oracle數據的文件格式(比如視頻是.mp4 格式,音樂是.mp3 格式);
二、二者優缺點描述:
1.exp/imp:
優點:代碼書寫簡單易懂,從本地即可直接導入,不用在服務器中操作,降低難度,減少服務器上的操作也就                                         保證了服務器上數據文件的安全性。
缺點:這種導入導出的速度相對較慢,合適數據庫數據較少的時候。如果文件超過幾個G,大衆性能的電                                       腦,至少需要4~5個小時左右。
2.expdp/impdp:
優點:導入導出速度相對較快,幾個G的數據文件一般在1~2小時左右。
缺點:代碼相對不易理解,要想實現導入導出的操作,必須在服務器上創建邏輯目錄(不是真正的目錄)。我們                                       都知道數據庫服務器的重要性,所以在上面的操作必須慎重。所以這種方式一般由專業的程序人員來完                                           成(不一定是DBA(數據庫管理員)來幹,中小公司可能沒有DBA)。
3.PL/sql Develpoer:
優點:封裝了導入導出命令,無需每次都手動輸入命令。方便快捷,提高效率。
缺點:長時間應用會對其產生依賴,降低對代碼執行原理的理解。
三、特別強調:
目標數據庫:數據即將導入的數據庫(一般是項目上正式數據庫);
源數據庫:數據導出的數據庫(一般是項目上的測試數據庫);
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.確定操作者的賬號權限。    
四、二者的導入導出方法:
1、傳統方法:
通用命令:exp(imp)  username/password@SERVICENAME:1521 file="e:\temp.dmp" full = y;
數據庫導出舉例:
exp xinxiaoyong/[email protected]: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);
2、數據泵方法:
創建directory:
expdp(impdp) username/password@SERVICENAME:1521 schemas=username                                                                       dumpfile=file1.dmp logfile=file1.log directory=testdata1 remap_schema=test:test;
數據庫導出舉例:
expdp xinxiaoyong/[email protected]: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 * form dba_tablespaces;
2.查看管理理員目錄(同時查看操作系統是否存在,因爲Oracle並不關心該目錄是否存在,如果不存                                                    在,則出錯)。
select * form 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;

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;
3、PLSQL方法:
登錄plsql工具,所使用用戶爲源數據庫有導出權限(exp_full_database,dba等)的用戶。 
     1.導出建表語句(包括存儲結構) 
     導出步驟tools ->export user object,選擇要導出的對象,導出.sql格式文件並等待導出完成,如    下圖:

                                            

導出數據文件 ;
      2.導出步驟tools ->export tables,選擇要導出的表及導出的格式進行導出。 
      導出爲dmp格式,如下圖:

導出爲sql格式,如下圖: 

導出爲pde格式,如下圖: 


            提示說明:採用第三方工具導出導入整個數據庫的話,耗時較長,一定要有足夠

                        的時間來操作(數據量大的話需要好幾個小時)。

3.導入建表語句 
      導入步驟tools->import tables->SQL Inserts 導入.sql文件     
4.導入數據; 
      tools->import talbes,然後再根據導出的數據格式選擇導入dmp文件,或者sql文件,
或者pde文件。 
      提示說明:導入之前最好把以前的表刪除,當然導入另外數據庫除外。 
         另外導入時當發現進度條一直卡在一個點,而且導出的文件不再增大時,甚至是提示程序
未響應,千萬不要以爲程序卡死了,這個導入導出就是比較緩慢,只要沒有提示報錯,
或者導入完成就不要停止程序。
 

數據泵的導入導出命令,具體可參考

https://blog.csdn.net/liuzhen12580/article/details/84374394

https://www.cnblogs.com/livebetter/p/9248568.html

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章