Oracle 10g與Oracle 11g之間的導(dǎo)入與導(dǎo)出

一. 問(wèn)題場(chǎng)景描述:

今天在做項(xiàng)目過(guò)程中,需要將別人機(jī)子里面的Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)復(fù)制一份到自己本地機(jī)子上,因?yàn)橹皩iT總結(jié)過(guò)一篇關(guān)于Oracle數(shù)據(jù)庫(kù)導(dǎo)入與導(dǎo)出(exp/imp)的文章即:《Oracle導(dǎo)出/導(dǎo)入數(shù)據(jù)》,所以這次想必應(yīng)該so easy!

可去執(zhí)行操作的時(shí)候,發(fā)現(xiàn)不管導(dǎo)出的是.sql文件還是.dmp文件,都會(huì)報(bào)錯(cuò)。即使最后嘗試使用Oracle SQL Developer進(jìn)行復(fù)制操作,依然會(huì)報(bào)錯(cuò)。而報(bào)錯(cuò)內(nèi)容花樣還挺多,有說(shuō)是表或視圖不存在的,也有說(shuō)是語(yǔ)法不正確的。

一直沒(méi)搞清楚是什么原因,直到腦子一個(gè)機(jī)靈,估計(jì)是Oracle數(shù)據(jù)庫(kù)版本不同的緣故。查了一下,發(fā)現(xiàn)果然不一樣。一個(gè)是Oracle11g,一個(gè)是Oracle10g,再查看一下規(guī)則,果然是因?yàn)榘姹静煌斐傻摹?/p>

二. Oracle 的exp/imp特性:

Oracle的imp/exp組件的一個(gè)操作原則就是向下兼容,且有一些規(guī)則:

規(guī)則1:低版本的exp/imp可以連接到高版本(或同版本)的數(shù)據(jù)庫(kù)服務(wù)器,但高版本的exp/imp不能連接到低版本的數(shù)據(jù)庫(kù)服務(wù)器。

規(guī)則2:高版本exp出的dmp文件,低版本無(wú)法imp(無(wú)法識(shí)別dmp文件);低版本exp出的dmp文件,高版本可以imp(向下兼容)。

規(guī)則3:從Oracle 低版本Export的數(shù)據(jù)可以Import到Oracle高版本中,但限于Oracle的相鄰版本,如從Oracle 7 到 Oracle 8。對(duì)于兩個(gè)不相鄰版本間進(jìn)行轉(zhuǎn)換,如從Oracle 6 到 Oracle 8,則應(yīng)先將數(shù)據(jù)輸入到中間版本Oracle 7,再?gòu)闹虚g數(shù)據(jù)庫(kù)轉(zhuǎn)入更高版本Oracle 8。

在進(jìn)行導(dǎo)入imp過(guò)程中,我的操作之所以出錯(cuò),正是因?yàn)檫`反了規(guī)則2中的內(nèi)容:低版本無(wú)法imp高版本emp的dmp文件。

三. Oracle 的IMPDP/EXPDP的特性:

  1. 在Oracle 9i以后引入數(shù)據(jù)泵命令I(lǐng)MPDP/EXPDP,Oracle 11g中exp命令是無(wú)法導(dǎo)出數(shù)據(jù)庫(kù)中的空表的,但可以通過(guò)EXPDP導(dǎo)出
  2. Oracle 11g通過(guò)exp導(dǎo)出的數(shù)據(jù)是無(wú)法通過(guò)imp導(dǎo)入到oracle10g中的,但可以通過(guò)expdp和impdp完成
  3. IMPDP/EXPDP是服務(wù)器端的命令,無(wú)法在客戶端使用,需要在DOS窗口中進(jìn)行操作。

四. oracle10g數(shù)據(jù)導(dǎo)入到oracle11g中:

在oracle10g上執(zhí)行:

Exp ccense/ccense@orcl file=D:\2012123101.dmp 

在oracle11g上創(chuàng)建好表空間和用戶后執(zhí)行:

Imp  ccense/ccense@orcl file=D:\20121231001.dmp 

這點(diǎn)與Oracle 10g之間的導(dǎo)入/導(dǎo)出相同,具體流程詳見(jiàn)《Oracle導(dǎo)出/導(dǎo)入數(shù)據(jù)》中的操作。

五.Oracle11g數(shù)據(jù)導(dǎo)入到Oracle 10g中:

1. 在Oracle 11g服務(wù)器命令行中用EXPDP導(dǎo)出數(shù)據(jù)

(1) 連接Oracle 11g源數(shù)據(jù)庫(kù),創(chuàng)建生成文件的目錄:
語(yǔ)法:

create directory 目錄名(如:dmpbx) as 存儲(chǔ)地址(如:'/root/usr/……');

具體操作實(shí)例:

SQL> create directory TIANZHI_UC_DATA_PUMP;
--此處沒(méi)有帶as,原因地址忘記了,這個(gè)可根據(jù)實(shí)際場(chǎng)景進(jìn)行修改.
目錄已創(chuàng)建。

(2) 授予權(quán)限
語(yǔ)法:

grant read,write on directory 目錄名 to public;

具體操作實(shí)例:

SQL> grant read,write on directory TIANZHI_UC_DATA_PUMP to public;
授權(quán)成功。
SQL> exit

(3) 導(dǎo)出文件
語(yǔ)法:

expdp 用戶名1/密碼@實(shí)例 dumpfile=備份文件名(ecology.dmp) directory= 目錄名(dmpbx)

具體示例說(shuō)明:

EXPDP USERID='szairpay/szairpay@orcl' schemas=szairpay directory=DATA_PUMP_DIR dumpfile=sz11g.dmp logfile=sz11g.log version=10.2.0.3.0'

szairpay/szairpay@orcl 賬號(hào)/密碼@數(shù)據(jù)庫(kù)實(shí)例
schemas=szairpay 可省略
directory=data_pump_dir 放生成文件的目錄,一般會(huì)生成到admin\orcl\dpdump
dumpfile=sz11g.dmp 生成的文件名
logfile=sz11g.log 日志
version=10.2.0.3.0 對(duì)應(yīng)要放的10g的oracle版本
以上參數(shù)右邊的值都可以按實(shí)際情況改

實(shí)際運(yùn)行時(shí)的代碼:

EXPDP USERID='tianzhi_uc/uc123456@173.18.10.213:1521/orcl' directory=TIANZHI_UC_DATA_PUMP dumpfile=tianzhi_uc_02.dmp logfile=tianzhi_uc_02.log version=10.2.0.1.0
導(dǎo)出數(shù)據(jù) 1

導(dǎo)出數(shù)據(jù) 2

從提示語(yǔ)的結(jié)尾處,可以看到導(dǎo)出的.dmp文件TIANZHI_UC_02.DMP保存在源機(jī)上的C盤(pán)下。

2.在Oracle 10g服務(wù)器DOS命令行中用IMPDP導(dǎo)入數(shù)據(jù):

步驟:
(1). 建表空間;
(2). 建用戶并授權(quán);
(3). 將tianzhi_uc_02.dmp和tianzhi_uc_02.log文件從源數(shù)據(jù)庫(kù)的服務(wù)器上拷貝到10g的dpdump目錄下
(4). impdp導(dǎo)入數(shù)據(jù)庫(kù)

(1) 建表空間:
create tablespace tianzhi_uc datafile 'E:\oracle\product\10.2.0\oradata\orcl\tianzhi_uc.dbf' size 1000m;  

注意: 此表空間名要與11g中的表空間一致

(2) 建用戶:
create user tianzhi_uc identified by uc123456 default tablespace tianzhi_uc quota 500m on users;  
--注意: 此用戶名要與11g中的用戶名一致

--授權(quán):
grant create session to tianzhi_uc;
grant connect to tianzhi_uc;
grant connect, resource, dba to tianzhi_uc;
grant create table to tianzhi_uc;
grant create view to tianzhi_uc;
grant create trigger to tianzhi_uc;
grant select any table to tianzhi_uc;
grant create sequence to tianzhi_uc;
grant create procedure to tianzhi_uc;
grant create role to tianzhi_uc;
grant create type to tianzhi_uc;

grant all privileges to tianzhi_uc;
grant dba to tianzhi_uc;
(3) 復(fù)制.dmp文件

我本地機(jī)器中的Oracle 10g裝在了E:/根目錄下,于是將tianzhi_uc_02.dmptianzhi_uc_02.log文件從源數(shù)據(jù)庫(kù)的服務(wù)器上拷貝到E:\Oracle\product\10.2.0\admin\orcl\dpdump目錄下。

創(chuàng)建目錄命令如下:

sqlplus tianzhi_uc/uc123456@orcl
sql>create directory DATA_PUMP_DIR as 'E:\Oracle\product\10.2.0\admin\orcl\dpdump';
創(chuàng)建目錄

5、導(dǎo)入數(shù)據(jù):

IMPDP USERID='tianzhi_uc/uc123456@orcl as sysdba'  directory=DATA_PUMP_DIR dumpfile=tianzhi_uc_02.dmp logfile=tianzhi_uc_02.log version=10.2.0.1.0
導(dǎo)入數(shù)據(jù)

到這里為止,所有的操作都完成了,終于看到了久違的消息:操作完成!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容