1. 程式人生 > 資料庫 >淺談入門級oracle資料庫資料匯入匯出步驟

淺談入門級oracle資料庫資料匯入匯出步驟

oracle資料庫資料匯入匯出步驟(入門)

說明:
1.資料庫資料匯入匯出方法有多種,可以通過exp/imp命令匯入匯出,也可以用第三方工具匯出,如:PLSQL
2.如果熟悉命令,建議用exp/imp命令匯入匯出,避免第三方工具版本差異引起的問題,同時效率更高,但特別注意:採用命令時要注意所使用的使用者及其許可權等細節。
3.在目標資料庫匯入時需要建立與匯出時相同的使用者名稱(儘量一致),並賦予不低於匯出時使用者的許可權;同時還需建立與原資料庫相同的表空間名,若本地資料庫已存在相同的表空間,則只能進行表空間擴充。

一、匯入前準備工作(在目標資料庫操作)

知識補充:
表空間
 Oracle資料庫是通過表空間來儲存物理表的,一個數據庫例項可以有N個表空間,一個表空間下可以有N張表。

  表空間(tablespace)是資料庫的邏輯劃分,每個資料庫至少有一個表空間(稱作SYSTEM表空間)。為了便於管理和提高執行效率,可以使用一些附加表空間來劃分使用者和應用程式。例如:USER表空間供一般使用者使用,RBS表空間供回滾段使用。一個表空間只能屬於一個數據庫。

1. 登入伺服器

 用Xshell或者secureCRT工具都可

2. 查詢磁碟空間是否足夠大

 執行df -h或者df -H命令進行查詢,若可用空間不足則更換新的目標環境再繼續其他操作。

[oracle@orac ~]$ df -h

3. 查詢表空間詳情

 ①使用終端登入,依次執行命令:

 在/home/oracle/app/oradata 目錄下新建一個資料夾,後面建立表空間需要用到,該路徑不唯一,根據目標資料庫存放資料檔案位置而定。

 [oracle@orac ~]$ /home/oracle/app/oradata 
 [oracle@orac ~]$ mkdir snail

  ②登入資料庫

 (注意/與as之間要有空格)
 [oracle@orac ~]$ sqlplus / as sysdba 
     			

   執行sql語句

SQL> select a.tablespace_name,a.bytes/1024/1024 "sum MB",(a.bytes-b.bytes)/1024/1024 "used MB",b.bytes/1024/1024 "free MB",round (((a.bytes-b.bytes)/a.bytes)*100,2) "used%" from (select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,(select tablespace_name,sum(bytes) bytes,max (bytes) largest from dba_free_space group by tablespace_name)b where a.tablespace_name=b.tablespace_name order by ((a.bytes-b.bytes)/a.bytes) desc;

即可得到當前資料庫的表空間情況,如下圖:

這裡寫圖片描述

  也可以通過第三方工具登入資料庫執行上述sql語句(以下幾步也同樣可以)
  注: 如果要匯入的資料庫表空間名與當前已有表空間名相同,則無需新建表空間(也不可以再建),但是必須確定已有表空間大小充足,或者已經設定為自動增加並且自動增加的最大值足夠大,那麼就不需要進行表空間擴充,直接使用該表空間級即可,跳過第四步。
 反之如果沒有該名稱的表空間,或者表空間大小不足以存放要匯入的資料時,需要對該表空間進行擴充,執行第四步。

4. 表空間擴充

 對錶空間進行擴充有多種方法,簡單介紹其中幾個常用方法:
 ① 直接增大表空間的大小:
   先查看錶空間中資料檔案存放的位置

SQL> select tablespace_name,file_id,file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;

  確定資料檔案位置後,執行命令:
  alter database datafile ‘資料檔案路徑' resize 要增大的大小
  例如:

SQL> alter database datafile '/home/oracle/oradata/SPS_DATA.DBF' resize 4000m

   注意:此法在增大存在表資料的表空間時會報錯,提示增加失敗,建議用下一種方法

 ② 增加資料檔案的個數
  alter tablespace 表空間名 add datafile ‘新增加的資料檔案路徑' size 資料檔案的大小
  例如:

SQL> alter tablespace SPS_DATA add datafile '/home/oracle/app/oradata/snail/SPS_DATA02.dbf' size 2000m 

 ③ 設定表空間自動擴充套件
  alter database datafile ‘要擴充套件的表空間' autoextend on next 擴充套件單元大小 maxsize 最大擴充套件大小
  例如:

SQL> alter database datafile '/home/oracle/app/oradata/snail/SPS_DATA.dbf' autoextend on next 100m maxsize 10000m

 備註:方法可以結合使用,尤其當不確定匯入檔案最終大小時建議使用,如:

SQL> alter tablespace SPS_DATA add datafile '/home/oracle/app/oradata/snail/SPS_DATA02.dbf' size 2000m autoextend on next 200M maxsize 12000M;

  對錶空間擴充之後可再次執行3.步中查看錶空間大小的sql,確認表空間擴充成功。

5. 建立臨時表空間與資料表空間

 建立使用者前必須要先建立臨時表空間和資料庫表空間兩個表空間,否則用系統預設的表空間,會引起其他問題。
 ①建立臨時表空間
  create temporary tablespace 臨時表空間名 tempfile ‘臨時表空間位置' size 臨時表空間大小autoextend on next 100m maxsize 10240m extent management local;
  例如:

SQL> create temporary tablespace SPS_DATA_temp tempfile'/home/oracle/app/oradata/snail/SPS_DATA_temp.dbf' size 1024m autoextend on next 100m maxsize 10240m extent management local;

 ②建立資料表空間
  引數大致同建立臨時表空間
  例如:

SQL> create tablespace SPS_DATA logging datafile'/home/oracle/app/oradata/snail/SPS_DATA01.dbf' size 1024m autoextend on next 100m maxsize 10240m extent management local;

  注意:如果是執行4.步之後,即表空間為擴充而來而不是新建的,則不需要建立資料表空間(但是臨時表空間還需要建立——個人觀點)

6. 建立資料庫使用者並指定表空間

  該使用者用於管理即將匯入的資料,匯入時也切換到該使用者進行匯入操作(如果用imp命令進行匯入,最好此使用者名稱與匯出時採用的使用者名稱為同樣的使用者名稱,不同的話可能還需要做對映),格式為:
  create user 使用者名稱identified by 使用者密碼default tablespace 所指定的表空間名 temporary tablespace 臨時表空間名;
  例如:

SQL> create user abc identified by ABC default tablespace SPS_DATA temporary tablespace SPS_DATA_temp;

7. 賦予使用者許可權

 因為要用該使用者進行匯入操作,故應給予使用者的許可權至少包括dba、IMP_FULL_DATABASE許可權,也有人建議應與匯出資料庫資料時使用者的許可權一致。
 授權sql:(視具體情況而定)

grant dba,imp_full_database,exp_full_database,connect,resource,create session to 使用者名稱;

 例如:

SQL> grant create user,drop user,alter user,create any view,drop any view,dba,read,write,create session to abc;

二、採用exp/imp命令

知識擴充:
 資料泵匯出匯入(EXPDP和IMPDP)的作用
  1、實現邏輯備份和邏輯恢復。
  2、在資料庫使用者之間移動物件。
  3、在資料庫之間移動物件
  4、實現表空間搬移。
 資料泵匯出匯入與傳統匯出匯入的區別:
  在10g之前,傳統的匯出和匯入分別使用EXP工具和IMP工具,從10g開始,不僅保留了原有的EXP和IMP工具,還提供了資料泵匯出匯入工具EXPDP和IMPDP.使用EXPDP和IMPDP時應該注意的事項:
  EXP和IMP是客戶段工具程式,它們既可以在客戶端使用,也可以在伺服器段使用。
  EXPDP和IMPDP是服務端的工具程式,他們只能在ORACLE服務端使用,不能在客戶端使用
  IMP只適用於EXP匯出檔案,不適用於EXPDP匯出檔案;IMPDP只適用於EXPDP匯出檔案,而不適用於EXP匯出檔案。

1. 匯出命令

 匯出與匯入分別都有三種方式:
 ①完全模式匯出(匯入):
  將整個資料庫內容匯出,但是操作時需要有特殊許可權,
  exp 使用者名稱/密碼buffer=32000file=匯出的目錄 full=y
  例如:

exp system/manager buffer=32000 file=d:\iom.dmp full=y 

 ②使用者模式匯出(匯入)
  將指定使用者的所有物件進行匯出,例如:

 exp iom/iom  buffer=32000 file=d:\iom.dmp owner=iom

 ③表模式匯出(匯入)
  將使用者的所有表資料進行匯出,例如:

exp iom/iom  buffer=32000 file=d:\iom.dmp owner=iom tables=(iom) 

 備註:可以執行exp help=y、imp help=y檢視幫助命令,以及執行exp或者imp檢視對應版本號。

 匯出步驟:
 首先切換到oracle使用者(資料庫超級管理員)

[oracle@orac ~]$ su - oracle  

 根據所需要採用的匯出模式進行匯出

[oracle@orac~]$exp iom/iom file=iom.dmp log=oradb.log full=y compress=y direct=y  

  COMPRESS引數將在匯出的同時合併碎塊,儘量把資料壓縮到initial的EXTENT裡,預設是N,一般建議使用。DIRECT引數將告訴EXP直接讀取資料,而不像傳統的EXP那樣,使用SELECT來讀取表中的資料,這樣就減少了SQL語句處理過程。一般也建議使用。不過有些情況下DIRECT引數是無法使用的。
其他引數可參照幫助命令,或者其他資料進行學習。在此不一一贅述。

2. 匯入命令

 登入伺服器,切換到oracle使用者。

[oracle@orac ~]$ su - oracle 

 執行匯入命令:
  匯入時需要用準備工作中建立的新使用者,如:使用者名稱abc,密碼ABC
  imp 使用者名稱/密碼 file=dmp檔案路徑 log=輸出日誌路徑full=y ignore=y;
  例如:

[oracle@orac ~]$imp abc/ABC file=/home/oracle/iom.dmp log=/home/oracle/iom.log full=y ignore=y;

 溫馨提示:採用資料泵匯入過程經常會遇到問題,建議多查閱資料,總有方法解決。相信每一件事物都有它存在的必要性,問題只是暫時的,成功才是必然的!

三、採用第三方工具(以PLSQL為例)

1. 匯出格式介紹

 ① Dmp格式:.dmp是二進位制檔案,可跨平臺,還能包含許可權,效率好,
 ② Sql格式:.sql格式的檔案,可用文字編輯器檢視,通用性比較好,效率不如第一種,適合小資料量匯入匯出。尤其注意的是表中不能有大欄位(blob,clob,long),如果有,會報錯
 ③ Pde格式:.pde格式的檔案,.pde為PL/SQL Developer自有的檔案格式,只能用PL/SQL Developer工具匯入匯出,不能用文字編輯器檢視。
 備註: 雖然dmp格式為最優選,但是不容易實現,原因有倆點:首先此格式需要安裝oracle完整版,因為匯出時需要選擇對應exp.exe與imp.exe,而且匯出是安裝的版本要與要匯出資料的資料庫版本一致,同理匯入時也要對應,否則會出現版本不一致的問題(查閱資料中介紹的,個人沒有證實);其次此格式的匯出經常會遇到匯出過程一閃而過,但是匯出不成功的情況,原因未知(可以查閱環境變數配置ORACLE_HOME配置正確,個人嘗試多次,仍有問題,最後無奈選取匯出為pde格式)。

2. 匯出方法

登入plsql工具,所使用使用者為源資料庫有匯出許可權(exp_full_database,dba等)的使用者。
 ①匯出建表語句(包括儲存結構)
 匯出步驟tools ->export user object,選擇要匯出的物件,匯出.sql檔案,如下圖:

這裡寫圖片描述
  

等待匯出完成

 ②匯出資料檔案
  匯出步驟tools ->export tables,選擇要匯出的表及匯出的格式進行匯出。
  匯出為dmp格式,如下圖:

這裡寫圖片描述  

匯出為sql格式,如下圖: 

這裡寫圖片描述

 匯出為pde格式,如下圖: 

這裡寫圖片描述

備註:採用第三方工具匯出匯入整個資料庫的話,耗時較長,一定要有足夠的時間來操作(資料量大的話需要好幾個小時)

3. 匯入方法

登入plsql工具,使用之前準備工作所建立的使用者。
 步驟類似匯出方法
 ①匯入建表語句
  匯入步驟tools->import tables->SQL Inserts 匯入.sql檔案
 ②匯入資料
   tools->import talbes,然後再根據匯出的資料格式選擇匯入dmp檔案,或者sql檔案,或者pde檔案。
  備註:匯入之前最好把以前的表刪除,當然匯入另外資料庫除外。
     另外匯入時當發現進度條一直卡在一個點,而且匯出的檔案不再增大時,甚至是提示程式未響應,千萬不要以為程式卡死了,這個匯入匯出就是比較緩慢,只要沒有提示報錯,或者匯入完成就不要停止程式。

參考文獻:

Oracle - 資料庫的例項、表空間、使用者、表之間關係:
 http://www.cnblogs.com/adforce/p/3312252.html
2.PL/SQL Developer匯入匯出資料庫方法:
 http://jingyan.baidu.com/article/d5a880eb69ff7313f047cc5f.html
3.linux下建立oracle表空間:
 http://blog.sina.com.cn/s/blog_62192aed01018aep.html
4.plsql連線64位資料庫及plsql匯出表閃現錯誤:
 http://201405221449.iteye.com/blog/2241714
5.oracle安裝包官網下載:
 http://www.oracle.com/technetwork/topics/winsoft-085727.html
6.ORACLE 表空間擴充套件方法:
 //www.jb51.net/database/201110/109669.html
7.Exp/imp命令詳解:
 http://blog.csdn.net/caijing3210/article/details/7528788
 http://www.cnblogs.com/yugen/archive/2010/07/25/1784763.html
 http://www.cnblogs.com/whsa/p/3975817.html

到此這篇關於淺談入門級oracle資料庫資料匯入匯出步驟的文章就介紹到這了,更多相關oracle資料庫資料匯入匯出步驟內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!