標籤:oracle
一、匯入和匯出
Oracle的備份是oracle操作中常見的工作,常見的備份方案包括有:
1、邏輯備份(IMP&EXP命令進行備份)
有如下四種模式:
(1)資料表空間備份(tablespace)
(2)表備份(table)
(3)使用者備份(user)
(4)完全備份(full)
2、物理檔案備份(離線及聯機備份
3、利用RMAN(Recovery Manager)的增量物理檔案系統備份
oracle的邏輯備份是使用IMP&EXP命令進行資料匯入匯出操作。使用EXP命令匯出或者使用IMP命令匯入時,需要Create Session系統許可權,但是如果要匯出其他的表,必須擁有許可權:EXP_FULL_DATABASE.
調用匯入匯出命令時,首先要估計所需的空間。EXP命令匯出的檔案時二進位檔案(*.dmp)只能由對應的IMP命令進行讀取恢複。匯入匯出的用途是:
·備份與恢複
·Oracle平台更換:可以在相同版本之間進行備份與恢複,Oracle較低版本的export資料檔案可以import到高版本的Oracle資料庫中,但是Oracle的版本只能是相鄰的,不能跨版本。
·重組表
·在不同資料庫使用者間移動資料
·在不同資料庫之間移動資料資料表空間
·將表的定義存入二進位的作業系統檔案以防止使用者操作失誤造成資料丟失。
需要指出的是邏輯備份是不能對資料庫進行完全恢複的,即資料的丟失時在所難免的。那麼邏輯備份會丟失多少資料呢?從匯出開始到匯入為止,這段時間之內的資料將全部丟失,這對銀行、證券證券交易所和電信等行業的資料庫是絕對不能接受的。所以對於絕大多數真正的生產或商務資料庫,邏輯備份永遠是不能作為備份和恢複策略的基石,它們必須要有物理備份以保證全恢複,而邏輯備份只能作為輔助手段。
二、EXP匯出資料
EXP命令可以在互動環境下匯出資料庫中的資料,也可以在非互動環境下執行命令。互動環境下的命令執行,是一步一步執行的過程。
1.互動式匯出
650) this.width=650;" title="6.PNG" style="float:none;" alt="wKioL1j3IYjDKHizAAB1keZ9EOc885.png" src="https://s2.51cto.com/wyfs02/M01/91/A1/wKioL1j3IYjDKHizAAB1keZ9EOc885.png" />
650) this.width=650;" title="7.PNG" style="float:none;" alt="wKiom1j3IYiDb5a2AAAhf1hUAiQ533.png" src="https://s2.51cto.com/wyfs02/M01/91/A2/wKiom1j3IYiDb5a2AAAhf1hUAiQ533.png" />
圖中一些代碼的解析:(1)Exp是匯出命令,該命令後面緊跟“使用者名稱/密碼@伺服器網路連接”
(2)Exp程式匯出時使用的緩衝區大小,緩衝區越大,匯出速度越快。直接斷行符號代表使用預設值4096B。
(3)Exp命令會把所有要匯出的資料匯出到一個Dmp檔案中,該步驟是Exp詢問匯出的資料檔案名稱。
(4)Exp程式詢問匯出整個使用者還是匯出某個表。預設匯出整個使用者。
(5)Exp程式詢問是否匯出每張表的存取權限。預設匯出存取權限。
(6)Exp程式詢問是否匯出表中的資料。預設匯出資料庫表中的資料。
(7)Oracle表中的資料可能來自不同的分區中的資料區塊,預設匯出時會把所有的資料壓縮在一個資料區塊上,IMP匯入時,如果不存在連續一個大資料區塊,則會匯入失敗。
2.非互動式匯出
也可以在使用Exp命令時,一次性設定好各種參數,是準備就緒的Exp命令不需要與使用者互動,按照參數的要求,Exp命令會一次性執行匯出工作。要指定參數,您可以使用關鍵字
EXP KEYWORD=value 或 KEYWORD=(value1,value2,...valueN)
例如:EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
參數名 說明
USERID 表示“使用者名稱/密碼”
BUFFER 資料緩衝區大小。以位元組為單位,一般在64000以上
FILE 指定輸出檔案的路徑和檔案名稱,一般以.dmp為尾碼名,注意該檔案包
括完整路徑,但是路徑必須存在,匯出命令不能自動建立路徑。
COMPRESS 是否壓縮匯出,預設yes
GRANTS 是否匯出許可權,預設yes
INDEXES 是否匯出索引,預設yes
DIRECT 是否直接匯出,預設情況,資料先經過Oracle的資料緩衝區,然後再
匯出資料。
LOG 指定匯出命令的日誌所在的記錄檔的位置
ROWS 是否匯出資料行,預設匯出所有資料
CONSTRAINTS 是否匯出表的約束條件,預設yes
PARFILE 可以把各種參數配置為一個文本索引值形式的檔案,該參數可以指定參 數檔案的位置
TRIGGERS 是否匯出觸發器,預設值是yes
TABLES 表的名稱列表,匯出多個表可以使用逗號隔開
TABLESPACES 匯出某個資料表空間的資料
Owner 匯出某一個使用者的資料
Full 匯出資料庫的所有資料。預設值是no
QUERY 把查詢的結果匯出
650) this.width=650;" title="8.PNG" alt="wKiom1j3KluiB3ikAAAvjwevbAc226.png" src="https://s4.51cto.com/wyfs02/M00/91/A4/wKiom1j3KluiB3ikAAAvjwevbAc226.png" />
三、匯入資料
IMP程式匯入就是把exp匯出的檔案重新匯入到資料庫的過程。匯入時也有一些重要的參數。
>>>Fromuser:指出匯出時dmp檔案中記載的使用者資訊。
>>>Touser:dmp檔案匯入到什麼目標使用者中。
>>>Commit:預設是N,在緩衝區滿時是否需要commit,如果設為N,需要較大的復原段。
>>>Ignore:Oracle在恢複資料的過程中,當恢複某個表時,該表已經存在,就要根據ignore參數的設定來覺得如何操作。若ignore=y,Oracle不執行CREATE TABLE語句,直接將資料插入到表中,如果插入的記錄違背了約束條件,比如主鍵約束,則出錯的記錄不會插入,但合法記錄會添加到表中。如ignore=n,Oracle不執行CREATE TABLE語句,同時也不會將資料插入到表中,而是忽略該表的錯誤,繼續回複下一個表。
D:\>imp system/manager file=employee.dmp fromuser=scott touser=employee commit=y
四、常見問題
·資料對象已經存在
一般情況,匯入資料前應該徹底刪除目標資料下的表,序列,函數/過程,觸發器等。
資料庫物件已經存在,按預設的imp參數,則會匯入失敗。
如果用了參數ignore=y,會把exp檔案內的資料內容匯入。
如果表沒有唯一關鍵字的約束條件,將引起記錄重複。
·資料庫物件有主外鍵約束
不符合主外鍵約束時,資料會匯入失敗。
解決辦法:先匯入主表,再匯入依存表。
disable目標匯入對象的主外鍵約束,匯入資料後,再enable他們。
·許可權不夠
如果要把A使用者的資料匯入B使用者下,A使用者需要由imp_full_datebase許可權。
·匯入大表(大於80M)時,儲存分配失敗
預設的EXP時,compress=Y,也就是把所有的資料壓縮在一個資料區塊上。
匯入時,如果不存在連續一個大資料區塊,則會匯入失敗。
匯出80M以上的大表時,記得compress=N,則不會引起這種錯誤。
·imp和exp使用的字元集不同
如果字元集不同,匯入會失敗,可以改變unix環境變數或者NT註冊表裡NLS_LANG相關資訊。
·imp和exp版本上不能往上相容
imp可以成功匯入低版本exp產生的檔案,不能匯入高版本exp產生的檔案根據情況我們使用。
五、匯入和匯出執行個體
本文出自 “小小知識庫” 部落格,請務必保留此出處http://babyhanggege.blog.51cto.com/11741640/1917492
oracle學習筆記----資料庫匯入匯出