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


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

1.前言

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

傳統模式又分為:常規導入導出和直接導入導出。

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

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

1.1.1常規導出原理

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

常規導出的例子: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。

1.1.3數據泵導出

數據泵方式是EXP方式的加強版,其原理類似,但是它的導出要借鑒服務器端的數據庫目錄。

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

1.2.1傳統模式的優點

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

而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內部錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM