一、導入和導出
創(chuàng)新互聯(lián)公司服務項目包括阜新網(wǎng)站建設、阜新網(wǎng)站制作、阜新網(wǎng)頁制作以及阜新網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,阜新網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到阜新省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
Oracle的備份是oracle操作中常見的工作,常見的備份方案包括有:
1、邏輯備份(IMP&EXP命令進行備份)
有如下四種模式:
(1)表空間備份(tablespace)
(2)表備份(table)
(3)用戶備份(user)
(4)完全備份(full)
2、物理文件備份(脫機及聯(lián)機備份
3、利用RMAN(Recovery Manager)的增量物理文件系統(tǒng)備份
oracle的邏輯備份是使用IMP&EXP命令進行數(shù)據(jù)導入導出操作。使用EXP命令導出或者使用IMP命令導入時,需要Create Session系統(tǒng)權限,但是如果要導出其他的表,必須擁有權限:EXP_FULL_DATABASE.
調用導入導出命令時,首先要估計所需的空間。EXP命令導出的文件時二進制文件(*.dmp)只能由對應的IMP命令進行讀取恢復。導入導出的用途是:
·備份與恢復
·Oracle平臺更換:可以在相同版本之間進行備份與恢復,Oracle較低版本的export數(shù)據(jù)文件可以import到高版本的Oracle數(shù)據(jù)庫中,但是Oracle的版本只能是相鄰的,不能跨版本。
·重組表
·在不同數(shù)據(jù)庫用戶間移動數(shù)據(jù)
·在不同數(shù)據(jù)庫之間移動數(shù)據(jù)表空間
·將表的定義存入二進制的操作系統(tǒng)文件以防止用戶操作失誤造成數(shù)據(jù)丟失。
需要指出的是邏輯備份是不能對數(shù)據(jù)庫進行完全恢復的,即數(shù)據(jù)的丟失時在所難免的。那么邏輯備份會丟失多少數(shù)據(jù)呢?從導出開始到導入為止,這段時間之內的數(shù)據(jù)將全部丟失,這對銀行、證券交易所和電信等行業(yè)的數(shù)據(jù)庫是絕對不能接受的。所以對于絕大多數(shù)真正的生產或商業(yè)數(shù)據(jù)庫,邏輯備份永遠是不能作為備份和恢復策略的基石,它們必須要有物理備份以保證全恢復,而邏輯備份只能作為輔助手段。
二、EXP導出數(shù)據(jù)
EXP命令可以在交互環(huán)境下導出數(shù)據(jù)庫中的數(shù)據(jù),也可以在非交互環(huán)境下執(zhí)行命令。交互環(huán)境下的命令執(zhí)行,是一步一步執(zhí)行的過程。
1.交互式導出
圖中一些代碼的解析:(1)Exp是導出命令,該命令后面緊跟“用戶名/密碼@服務器網(wǎng)絡連接”
(2)Exp程序導出時使用的緩沖區(qū)大小,緩沖區(qū)越大,導出速度越快。直接回車代表使用默認值4096B。
(3)Exp命令會把所有要導出的數(shù)據(jù)導出到一個Dmp文件中,該步驟是Exp詢問導出的數(shù)據(jù)文件名稱。
(4)Exp程序詢問導出整個用戶還是導出某個表。默認導出整個用戶。
(5)Exp程序詢問是否導出每張表的訪問權限。默認導出訪問權限。
(6)Exp程序詢問是否導出表中的數(shù)據(jù)。默認導出數(shù)據(jù)庫表中的數(shù)據(jù)。
(7)Oracle表中的數(shù)據(jù)可能來自不同的分區(qū)中的數(shù)據(jù)塊,默認導出時會把所有的數(shù)據(jù)壓縮在一個數(shù)據(jù)塊上,IMP導入時,如果不存在連續(xù)一個大數(shù)據(jù)塊,則會導入失敗。
2.非交互式導出
也可以在使用Exp命令時,一次性設置好各種參數(shù),是準備就緒的Exp命令不需要與用戶交互,按照參數(shù)的要求,Exp命令會一次性執(zhí)行導出工作。要指定參數(shù),您可以使用關鍵字
EXP KEYWORD=value 或 KEYWORD=(value1,value2,...valueN)
例如:EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
參數(shù)名 說明
USERID 表示“用戶名/密碼”
BUFFER 數(shù)據(jù)緩沖區(qū)大小。以字節(jié)為單位,一般在64000以上
FILE 指定輸出文件的路徑和文件名,一般以.dmp為后綴名,注意該文件包
括完整路徑,但是路徑必須存在,導出命令不能自動創(chuàng)建路徑。
COMPRESS 是否壓縮導出,默認yes
GRANTS 是否導出權限,默認yes
INDEXES 是否導出索引,默認yes
DIRECT 是否直接導出,默認情況,數(shù)據(jù)先經(jīng)過Oracle的數(shù)據(jù)緩沖區(qū),然后再
導出數(shù)據(jù)。
LOG 指定導出命令的日志所在的日志文件的位置
ROWS 是否導出數(shù)據(jù)行,默認導出所有數(shù)據(jù)
CONSTRAINTS 是否導出表的約束條件,默認yes
PARFILE 可以把各種參數(shù)配置為一個文本鍵值形式的文件,該參數(shù)可以指定參 數(shù)文件的位置
TRIGGERS 是否導出觸發(fā)器,默認值是yes
TABLES 表的名稱列表,導出多個表可以使用逗號隔開
TABLESPACES 導出某個表空間的數(shù)據(jù)
Owner 導出某一個用戶的數(shù)據(jù)
Full 導出數(shù)據(jù)庫的所有數(shù)據(jù)。默認值是no
QUERY 把查詢的結果導出
三、導入數(shù)據(jù)
IMP程序導入就是把exp導出的文件重新導入到數(shù)據(jù)庫的過程。導入時也有一些重要的參數(shù)。
>>>Fromuser:指出導出時dmp文件中記載的用戶信息。
>>>Touser:dmp文件導入到什么目標用戶中。
>>>Commit:默認是N,在緩沖區(qū)滿時是否需要commit,如果設為N,需要較大的回滾段。
>>>Ignore:Oracle在恢復數(shù)據(jù)的過程中,當恢復某個表時,該表已經(jīng)存在,就要根據(jù)ignore參數(shù)的設置來覺得如何操作。若ignore=y,Oracle不執(zhí)行CREATE TABLE語句,直接將數(shù)據(jù)插入到表中,如果插入的記錄違背了約束條件,比如主鍵約束,則出錯的記錄不會插入,但合法記錄會添加到表中。如ignore=n,Oracle不執(zhí)行CREATE TABLE語句,同時也不會將數(shù)據(jù)插入到表中,而是忽略該表的錯誤,繼續(xù)回復下一個表。
D:\>imp system/manager file=employee.dmp fromuser=scott touser=employee commit=y
四、常見問題
·數(shù)據(jù)對象已經(jīng)存在
一般情況,導入數(shù)據(jù)前應該徹底刪除目標數(shù)據(jù)下的表,序列,函數(shù)/過程,觸發(fā)器等。
數(shù)據(jù)庫對象已經(jīng)存在,按缺省的imp參數(shù),則會導入失敗。
如果用了參數(shù)ignore=y,會把exp文件內的數(shù)據(jù)內容導入。
如果表沒有唯一關鍵字的約束條件,將引起記錄重復。
·數(shù)據(jù)庫對象有主外鍵約束
不符合主外鍵約束時,數(shù)據(jù)會導入失敗。
解決辦法:先導入主表,再導入依存表。
disable目標導入對象的主外鍵約束,導入數(shù)據(jù)后,再enable他們。
·權限不夠
如果要把A用戶的數(shù)據(jù)導入B用戶下,A用戶需要由imp_full_datebase權限。
·導入大表(大于80M)時,存儲分配失敗
默認的EXP時,compress=Y,也就是把所有的數(shù)據(jù)壓縮在一個數(shù)據(jù)塊上。
導入時,如果不存在連續(xù)一個大數(shù)據(jù)塊,則會導入失敗。
導出80M以上的大表時,記得compress=N,則不會引起這種錯誤。
·imp和exp使用的字符集不同
如果字符集不同,導入會失敗,可以改變unix環(huán)境變量或者NT注冊表里NLS_LANG相關信息。
·imp和exp版本上不能往上兼容
imp可以成功導入低版本exp生成的文件,不能導入高版本exp生成的文件根據(jù)情況我們使用。
五、導入和導出實例
set line 120; //格式化顯示,更清晰 set pagesize 30; //格式化顯示,更清晰 create table emp_dump as select * from emp; /創(chuàng)建名為emp_dump的表 create table dept_dump as select * from dept; /創(chuàng)建名為emp_dump的表 select count(*) from emp_dump; /驗證 select count(*) from dept_dump; /驗證
當確認這兩個表創(chuàng)建成功后還應創(chuàng)建一個存放邏輯備份文件的目錄f:\export,現(xiàn)在就可以開始做邏輯備份的實驗了。在具體操作之前,先簡單介紹實驗的原理和目的。首先,對剛剛創(chuàng)建的兩個表做一個邏輯備份,之后對其中的一個表進行DML操作并立即提交這些操作。接下來,將這兩個表破壞掉。最后,再用所做的邏輯備份進行數(shù)據(jù)恢復以檢驗究竟能恢復多少數(shù)據(jù)。
exp scott/tiger file=f:\export\scott.dmp tables=(emp_dump,dept_dump) select * from emp_dump; update emp_dump set job='CEO'; commit; select * from emp_dump;檢查修改是否成功 drop table emp_dump; drop table dept_dump; select * from emp_dump; select * from dept_dump; 此時出現(xiàn)錯誤 imp scott/tiger file=f:\export\scott.dmp; 導入操作 select * from dept_dump;發(fā)現(xiàn)職位并沒有改變,仍是提職之前的。
六、數(shù)據(jù)泵介紹
數(shù)據(jù)泵是Oracle 10g引入的一個新工具。它不但包括了所有的以前導入和導出工具的功能,而且還進行了不少擴充和加強。另外,其速度也更快,而且操作也更安全,總之好處多多。其功能與導入導出工具類似。
數(shù)據(jù)泵工具也是一種對操作系統(tǒng)下的應用程序,包括expdp和impdp,其中expdp負責導出,而impdp負責導入。exp導出命令中,我們使用了物理文件的全路徑(絕對路徑),這樣為了將來的管理和維護方便。但是在oracle 10g中,為了系統(tǒng)的安全,在expdpd和impdp應用程序中已經(jīng)不允許使用絕對路徑,取而代之的是在expdp和impdp應用程序中使用數(shù)據(jù)庫的目錄對象。目錄對象一般是由DBA或有相應系統(tǒng)權限的用戶創(chuàng)建,之后再將目錄的讀或寫權限授予所需用戶。為了簡化問題,我們暫時不創(chuàng)建目錄對象,而是使用Oracle數(shù)據(jù)庫系統(tǒng)自動創(chuàng)建一個叫DATA——PUMP_DIR目錄對象,該目錄就是expdp和impdp應用程序默認的工作目錄。
那么如何才能找到該數(shù)據(jù)庫目錄對象所對象的操作系統(tǒng)目錄呢?Oracle提供了一個叫dba_directories數(shù)據(jù)字典,利用它就可以方便地找到所需信息。但是,為了使顯示輸出清晰。首先是要SQL*Plus格式化命令(要以DBA用戶登錄數(shù)據(jù)庫系統(tǒng))。
set line 120;///我們工作常用200 col OWNER for a6; col DIRECTORY_NAME for a20; col DIRECTORY_PATH for a65; select * from dba_directories; GARNT READ,WRITE ON DIRECTORY DATA_PUMP_DIR to scott;//賦予scott用戶對DATA_PUMP_DIR的權限 select * from emp_dump order by job,sql; 切換SCOTT用戶后,查詢相關信息
參數(shù)介紹:
·DIRECTORY=DATA_PUMP_DIR,存放導出文件的目錄為DATA_PUMP_DIR所定義的操作系統(tǒng)目錄。
·tables=(emp_dump,dept_dump),要導出的表為emp_dump和dept_dump
·DUMPFILE=SCOTT.dmp,導出操作系統(tǒng)文件的名為SCOTT.dmp。
·QUERY=scott.emp_dump:"WHERE job<>'ANALYST' AND sal>1250",在scott的emp_dump表中只有job(職位)不是ANALYST(分析員),并且sal(工資)高于1250的數(shù)據(jù)才導出到SCOTT.dmp文件中。
由于這個實力的單數(shù)很多,我么將上面的參數(shù)保存在一個名為scott_par.txt的正文參數(shù)文件中,之后expdp應用程序再調用這個正文參數(shù)文件。如果導出工作是經(jīng)常的工作,這回極大地簡化例行的操作。因此啟動記事本程序并將上面所介紹的參數(shù)寫入,最后以scott_par.txt為文件名存入F:\oracle\mgt目錄中(該目錄時自己創(chuàng)建,也可以使用其他的目錄名)。
啟動DOS窗口,
F:\>cd oracle\mgt F:\>cd oracle\mgt>dir F:\>cd oracle\mgt>more scott_par.txt DIRECTORY=DATA_PUMP_DIR tables=(emp_dump,dept_dump) DUMPFILE=SCOTT.dmp QUERY=scott.emp_dump:"WHERE job<>'ANALYST' AND sql>1250" F:\>cd oracle\mgt>expdp scott/tiger parfile=scott_par.txt 查看是否該文件創(chuàng)建生成 drop table emp_dump; 以scott用戶 select * from emp_dump;//驗證是否真的被刪除
現(xiàn)在就可以利用剛剛做的邏輯備份(用數(shù)據(jù)泵導出的文件)進行邏輯恢復了,可以使用如下命令將用數(shù)據(jù)泵將SCOTT.DMP文件中的數(shù)據(jù)重新導入回SCOTT用戶中(邏輯恢復)。
F:\>cd oracle\mgt> impdp scott/tiger parfile=scott_par.txt
顯示輸出標明,SCOTT用戶下的DEPT_DUMP已經(jīng)存在,這是因為之前只刪除了emp_dump表,但是這并不影響邏輯恢復的結果,impdp程序只是跳過了已經(jīng)存在的表。接下來,使用SQL語句檢查emp_dump表是否已經(jīng)被成功恢復。
select * from emp_dump;
上述語句,顯示出的結果表明:impdp只恢復了滿足條件(job不是ANALYST并且sal高于1250)的數(shù)據(jù),即該表的子集。最后,使用語句檢查一下dept_dump表是否完好無損。經(jīng)查看dept_dump表中的數(shù)據(jù)確實完好無損,這也正是我們期望看到的結果到此為止可以確信所做的邏輯恢復已經(jīng)成功。
本文名稱:oracle學習筆記----數(shù)據(jù)庫導入導出
本文URL:http://jinyejixie.com/article26/psipjg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、、移動網(wǎng)站建設、商城網(wǎng)站、建站公司、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)