oracle下邏輯的匯入匯出工具exp/imp
exp/imp簡介:
exp/imp是oracle倖存的最古老的兩個命令列備份工具 ,在小型資料庫的轉儲、資料表空間的遷移、表的抽取、檢測邏輯和物理衝突中使用非常廣泛,我們可以把它作為小型資料庫的物理備份後的一個邏輯備份。它可以跨平台、跨版本。
exp/imp的工作原理:
exp使用者進程通過伺服器處理序串連到資料庫,開啟shadow進程,同時執行select語句查詢資料庫中的資料,通過buffer cache並通過SQL語句處理層再轉移出exp匯出檔案,即exp進程需要佔用伺服器上的SGA和PGA資源。
imp讀取exp匯出的.dmp檔案,構造DDL語句,插入建立表與其他對象以及添加資料的語句
exp的匯出資料的方式:
1、全庫匯出這種方式一般不用)
2、按使用者匯出
3、按表匯出
exp常用參數簡介:exp help=y
650) this.width=650;" title="exp協助.png" src="http://www.bkjia.com/uploads/allimg/131228/2235421939-0.png" />
使用exp/imp工具是,在服務端需開啟監聽,用戶端最好配置連接字串
用戶端的字元集必須與服務端的字元集相同,避免因不同字元集的轉換,導致匯出的資料不可用
用戶端版本必須與服務端版本一致,比如服務端是10g,用戶端是11g,則會報以下錯誤: 650) this.width=650;" title="11g用戶端匯出10g資料庫中的對象報錯.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235422141-1.jpg" />
ok,開始匯出資料吧
環境:linux redhat 5.4 oracle 10g 32位
1、全庫匯出
exp system/oracle@lck full=y file=d:\full_database.dmp
650) this.width=650;" style="float:none" title="全庫匯出1.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235423P2-2.jpg" />
650) this.width=650;" style="float:none" title="全庫匯出2.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235422441-3.jpg" />
2、按使用者匯出
exp system/oracle owner=lck file=d:\lck_tables.dmp
650) this.width=650;" title="按使用者匯出表.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235423Z9-4.jpg" />
3、按表匯出
650) this.width=650;" title="按表匯出使用者的表.jpg" src="http://www.bkjia.com/uploads/allimg/131228/223542M31-5.jpg" />
4、在匯出是,只匯出表結構不匯出資料
650) this.width=650;" title="只匯出表的結構.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235425431-6.jpg" />
exp工具的缺點:
速度慢,由於exp串連到資料庫需要先select要匯出的資料,再通過SGA、PGA傳輸給exp。
如果此串連斷開,則exp需從頭開始匯出,沒有斷點續傳的功能
消耗服務端資源,只能服務端業務的前提下使用
imp 常用參數:imp help=y
650) this.width=650;" title="imp協助.png" src="http://www.bkjia.com/uploads/allimg/131228/22354245O-7.png" />
匯入資料,將匯出的資料匯入到windows平台的oracle 11g 64位中
使用11g客戶段匯入資料
1、按使用者匯入
imp system/oracle@orcl fromuser=lck touser=lck file=d:\lck_tables.dmp; 650) this.width=650;" title="沒建立使用者的匯入.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235424193-8.jpg" />
報錯了,使用者不存在,好吧,在目標資料庫上建立lck使用者
650) this.width=650;" title="建立lck使用者.jpg" src="http://www.bkjia.com/uploads/allimg/131228/223542F56-9.jpg" />
再匯入650) this.width=650;" title="無標題.png" src="http://www.bkjia.com/uploads/allimg/131228/223542FQ-10.png" />
又報錯了,對data資料表空間沒許可權,因為沒有給lck使用者指派在data資料表空間上的配額,其實現在表結構已經導進來了,看一下
650) this.width=650;" title="表結構匯入了.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235423260-11.jpg" />
好吧,那就再給lck的配額,再匯入 650) this.width=650;" title="因為之前的匯入已經建立了表,所以報對象已存在的錯誤.jpg" src="http://www.bkjia.com/uploads/allimg/131228/223542A62-12.jpg" />
啊,還是報錯,對象已存在,加參數ignore=y 忽略建立錯誤),再匯入
650) this.width=650;" title="匯入成功.jpg" src="http://www.bkjia.com/uploads/allimg/131228/223542K41-13.jpg" />
ok,匯入成功, 原來匯入資料不是一帆風順的啊。
總結:匯入資料前需要在目標資料庫中建立對應的使用者,並給使用者相應的許可權和該使用者在自己預設資料表空間上的配額
2、按表匯入
exp system/oracle@orcl talbes=tab1 fromuser=lck,test touser=lck,test file=d:\lck_test_tables.dmp 650) this.width=650;" title="按表匯入.jpg" src="http://www.bkjia.com/uploads/allimg/131228/2235426494-14.jpg" />
ok,匯入成功!!
本文出自 “挨踢小蝌蚪” 部落格,請務必保留此出處http://chunke.blog.51cto.com/2753715/1219686