1. 程式人生 > 實用技巧 >oracle11g資料庫匯入匯出方法教程

oracle11g資料庫匯入匯出方法教程

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、傳統方法:

dmp檔案的匯出

首先,我們先了解dmp檔案的匯出

dmp檔案匯出一般用的比較多的是三種,分別是: 匯出整個資料庫例項的所有資料,匯出指定使用者的所有的表,匯出指定表.

我們以自己的資料庫為例,假設我們的資料庫的例項為"Oracle"

可以通過"工作管理員---->服務"中檢視自己的資料庫例項

一般資訊是 已啟用 自動 本地系統

開啟cmd命令列 :

1: 將資料庫Oracle完全匯出,使用者名稱system密碼manager匯出到 c:\daochu.dmp中

exp system/manager@Oracle file=c:\daochu.dmp full=y

2: 將資料庫中RFD使用者與,JYZGCX使用者的表匯出

exp system/manager@ORACLE  file=d:\daochu.dmp owner=(RFD,JYZGCX)

3: 將資料庫中的表T_USER,T_ROLE匯出

 ystem為使用者名稱,manager為密碼,ORACLE為資料庫例項名,其實不一定非的用system使用者,只要是擁有管理員許可權的使用者都可以

exp JYZGCX/JYZGCX@Oracle file = d:\data\newsmgnt.dmp tables = (T_USER,T_ROLE)

dmp檔案的匯入 

步驟如下:

機器環境是windows7,其實也無所謂,命令列不都是樣的麼

1. 開啟"開始" --->輸入cmd,開啟cmd命令視窗,輸入: sqlplus/as sysdba; 然後使用conn / as sysdba;這樣就可以以超級管理員的最高許可權登入,當然這決定於init.ora檔案中的資料庫初始化引數.

2. 上面sysdba登入後,就可以建立表空間和使用者了.

  (開啟"開始"-->輸入cmd-->sqlplus/nolog; 輸入conn/as sysdba 管理員賬戶登入;)

由於我們已經有dmp檔案了,可以用notepad++ 開啟dmp檔案,進去按ctrl+f 去查詢tablespace,可以找到這個dmp檔案對應的表空間,然後根據表空間的資訊去建立表空間,這樣才能匯入dmp檔案.

然後就是建立表空間,命令如下:

create tablespace USERS
logging
datefile 'D:\oracle\product\10.2.0\oradata\orcl\USERS.dnf'
size 32m
autoxtend on
next 32m maxsize 2048m
extend management local;

 建立test使用者,密碼也是test222,使用上面建立的表空間

create user test identifiles by test222
 
default tablespace USERS

 給建立的test使用者分配許可權,為了方便可以直接分配dba許可權

grant dba to test;

 這樣一來,我們前期的準備工作就完成了,然後就可以關掉剛剛的命令視窗了.

開啟"開始" --->輸入cmd(是cmd視窗不是sqlplus視窗)

由於上面的步驟中,建立了test使用者,所以我們往test使用者去匯入資料

直接輸入如下的語句:

imp test/test222@localhost/orcl file="C:\Users\xiejiachen\Desktop\test20190630.DMP" full =y;

下面解釋一下上面的語句:

  test是上面建立的登入資料庫的使用者名稱

  test222是上面的登入資料庫的密碼

  localhost: 代表你的資料庫是本機還是遠端匯入,需要的可以隨時替換ip地址

  orcl: 是例項的名稱

  file: 後面是你的dmp的檔案路徑

  full=y : 全部匯入

以上就是oracle資料庫匯出和匯入dmp檔案的兩種方法.   

2、資料泵方法:
建立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;

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檔案。
   提示說明:匯入之前最好把以前的表刪除,當然匯入另外資料庫除外。
      另外匯入時當發現進度條一直卡在一個點,而且匯出的檔案不再增大時,甚至是提示程式
未響應,千萬不要以為程式卡死了,這個匯入匯出就是比較緩慢,只要沒有提示報錯,

或者匯入完成就不要停止程式。