Oracle11g中數據的倒庫和入庫操做以及高版本數據導入低版本數據可能引起的問題

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/sql

1.前言

在10g以前,傳統的導出和導入分別使用EXP工具和IMP工具,從10g開始,不只保留了原有的EXP和IMP工具,還提供了數據泵導出導入工具EXPDP和IMPDP。因此在11G的倒庫和入庫方式中,咱們也有兩種方式能夠選擇:傳統模式和數據泵模式。數據庫

傳統模式又分爲:常規導入導出和直接導入導出。服務器

下面以導出數據爲例,分別介紹各自導出原理。session

1.1簡述各導入導出方式的原理

1.1.1常規導出原理

傳統路徑模式使用SQL SELECT語句抽取表數據。數據從磁盤讀入到buffer cache緩衝區中,行被轉移到評估緩衝區。在此以後根據SQL表達式,將記錄返回給導出客戶端,而後寫入到dump文件。app

常規導出的例子:exp zhejiang/zhejiang file=/data1/zj_regular.dmp buffer=20480000工具

1.1.2直接導出

直接導出模式,數據直接從磁盤中讀取到導出session的PGA中,行被直接轉移到導出session的私有緩衝區,從而跳過SQL命令處理層。 避免了沒必要要的數據轉換。最後記錄返回給導出客戶端,寫到dump文件。測試

直接導出的例子:exp zhejiang/zhejiang file=/data1/zj_direct.dmp buffer=20480000 recordlength=65535 direct=y。spa

1.1.3數據泵導出

數據泵方式是EXP方式的增強版,其原理相似,可是它的導出要借鑑服務器端的數據庫目錄。server

1.2傳統模式和數據泵模式的對比

1.2.1傳統模式的優勢

EXP和IMP是客戶段工具程序,它們既能夠在客戶端使用,也能夠在服務器段使用。blog

而EXPDP和IMPDP是服務端的工具程序,它們只能在ORACLE服務端使用,不能在客戶端使用。

1.2.2數據泵模式的優勢

數據泵導出數據的時間更短,並且導出的數據文件大小更小。

    如下表格爲我將網友的一個測試進行的統計:

類型

例子(導出40G左右的數據)

傳統模式(直接導出)

18分鐘

數據泵模式

14分鐘,且導出的文件比傳統模式小1.5G

1.3 注意

IMP只適用於EXP導出文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出文件,而不適用於EXP導出文件。

1.4 小結

由上面對比可見,在實際操做中,咱們在服務器端選擇數據泵方式導入數據會更快一些。下面我主要介紹數據泵方式的導入和導出。

2.數據泵導出數據的流程

2.1建立邏輯目錄並受權

建立邏輯目錄「EXPDP_DIR」並將其映射到物理路徑「D:\DBbak」下,在PL/SQL下面執行語句:Create or replace directory expdp_dir as 'D:\DBbak';

執行完後,要在對應的硬盤目錄下建立該文件夾。

能夠經過SQL查詢是否成功建立邏輯目錄,Select * from dba_directories,能夠看到以下結果:

                       

最後,再給建立的目錄賦予權限:

Grant read,write on directory EXPDP_DIR to Public;

2.2執行導出操做

創建expdp.bat文件,文件內容爲:Expdp sccot/tiger@testDB directory=expdp_dir dumpfile =STDCG _201501.dmp logfile= STDCG _201501.log;執行該bat;

由於是導出全部數據,因此沒有設置tables| schemas| tablespaces。

導出成功後,導出的數據會自動放在以前設置的Expdp_Dir文件夾下。

3.數據泵導入數據的流程

3.1 建立數據庫實例等基本操做

a.建立數據庫stdcg,包含SYS和SYSTEM兩個用戶

b.用SYS登錄PL/SQL->File->Open->SQL script執行建立表空間sql腳本。須要注意的就是修改腳本中的路徑:

DATAFILE 'F:\app\DELL\oradata\stdcg\DLGIS.DBF'(紅色部分是本地數據庫的路徑)

c.執行建立用戶腳本:包含dlsys、dlmis、dlinit、dlgis、sde、mms、umstat、ulog用戶。

3.2建立邏輯目錄並受權

如2.2中所描述的,這裏直接給出語句:

Create or replace directory expdp_dir as 'd:\DBbak';

Grant read,write on directory expdp_dir to public;

不過多出了這樣一個步驟:在D盤創建文件夾DBbak 後,須要將數據庫的導出文件:STDCG _201501.DMP和STDCG _201501.log 一塊兒拷貝到D:\DBbak目錄下。

3.3執行導入操做

創建impdp.bat文件,文件中的內容爲: impdp dlsys/dlsys@stdcg dumpfile= STDCG _201501.dmp  logfile= STDCG _201501_EXP.log。運行該bat文件。

一樣,由於是全庫導入,因此沒有使用tables| schemas| tablespaces來進行導入內容設置。

4.11g數據導入10g的庫中

4.1 降版本導出而後導入

首先要作與通常數據泵導出時相同的操做,即建立邏輯目錄: Create or replace directory expdp_dir as 'D:\DBbak';

而後再導出數據時,sql命令上要加上一個version控制便可:

expdp sccot/tiger@testDB  dumpfile=stdcg10g.dmp  directory= expdp_dir  version=10.0.2。

導出後,再將導出的dmp文件導入到10g的庫中便可。

4.2容易出現的問題

目前在江北項目和煙臺項目中均作了以下操做:shp數據首先經過SDE導入到了11g的數據庫中,因爲現場數據庫忽然須要降級,而後將11g的數據又從新導入導出到10g中。可是,兩個現場都不分別出現了不一樣的問題。

江北現場的問題是,在catalog裏可以直連到10g上Oracle,也能看到各空間數據。可是,在arcmap中添加該數據庫中的空間數據,圖層渲染時會出現SDE內部錯誤,致使圖層沒法顯示。

 

而煙臺現場,則直接出現了直連數據庫不定時失效問題:

測試能夠鏈接:

 

點OK後又不能鏈接:

 

4.3解決方法及分析

4.3.1解決方法

將空間數據所在的DLGIS和SDE用戶刪除,從新經過SQL生成這兩個用戶以及先關表結構後。手動經過catalog直連到數據庫上,而後手動導入圖層,解決上述問題。

4.3.2 問題分析

猜測爲11g數據轉成10g數據時可能某些空間信息表被改變或者破壞,再也不符合arcgis10.0的鏈接規範等。形成了sde不穩定或者sde內部錯誤。

相關文章
相關標籤/搜索