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.dbf' 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文件。
提示說明:導入之前最好把以前的表刪除,當然導入另外數據庫除外。
另外導入時當發現進度條一直卡在一個點,而且導出的文件不再增大時,甚至是提示程序
未響應,千萬不要以為程序卡死了,這個導入導出就是比較緩慢,只要沒有提示報錯,
或者導入完成就不要停止程序。