Thursday, December 29, 2011

Hello ~ Oracle Database

Oracle Database 雖然賣的不錯,但不是有用的人就了解如何能充分使用Oracle Database。所以想就分享個人過去學習的經驗,能夠對想要進入學習Oracle DB的人有一些些的幫助。
要了解Oracle Database運作的最重要的一張圖(個人認為)如下:
只要了解這張圖,Oracle DB在做什麼事,執行效能上出問題,怎麼解決,解決的方向大概就不會偏離太多了。
說明待續

自從Oracle Database 10g開始,Oracle創新一項Oracle DB專屬的資料儲存磁碟管理系統--Automatic Storage Management (ASM)。ASM的確讓 Oracle DB充分發揮磁碟輸出與輸入能力,讓DB在I/O上效能調校變的更容易了。
讓初接觸的人來說,還蠻困惑的,什麼是ASM Instance。看簡單一點,把ASM Instance視為檔案管理系統的背景程式就行了。只不過以前呢,檔案系統的背景程式都是作業系統附贈的,沒人去理會,而且習以為常。現在Oracle提供了一種新的檔案系統(資料庫專屬的檔案系統) -- ASM,DBA也就開始又要學習了。

Real Application Cluster
如上圖,為3個節點的RAC資料庫,共同讀取同一(單一)資料庫。
在架構上Heartbeat 至為重要。Heartbeat除了是確認各個節點是否存活的重要溝通管道之外,Oracle DB也用Heartbeat來傳送資料,因為資料從Memory經過Heartbeat傳送到另一個節點的Memory遠遠要比資料從磁碟中讀取再放到Memory要來的快的很多;同時也提升了增加節點數量時可以穩定地提升處理能量。
可以看到每個節點上,各自有獨立的Database Instance,在Instance外有資料庫的"Service"。圖上顯示有三個Service:HR、Sales、Call Center。而從Application/Web Servers所提出的DB Service連線要求(同時提出HR、Sales、Call Center DB Service),則會分別各自落到各個節點所分配的服務上。當然也可以設定某DB Service由兩個以上的節點來提供服務。

如果有架設Oracle Real Application Cluster,必定要了解Grid Infrastructure(GI)。講簡單一點,GI是屬於作業系統層面的軟體,這對原來只懂DB的DBA的的確確是一大挑戰(Oracle 把DBA看成是無所不會的超人了)。沒有架設RAC的人可以暫時先跳過,如果想要了解的人就不能不看懂下面這一張圖:

Wednesday, December 28, 2011

建立台灣"北區"地圖

開啓SQLDeveloper(建議至OTN下載最新穩定的版本)
檢視剛匯入的表格,只有TWN_ADM2含有各縣市的圖資。我打算用HASC_2中的內容來識別不同的縣市。
在建立所謂"北"、"中"、"南"、"東"的區域之前,先建立另一獨立的表格來儲存這些資料。以下為建立新表格的操作步驟
除了給表格名稱之外,並且要建立SDO_GEOMETRY資料型態欄位,請勾選右上角"Advanced"的checkbox。因為只有在勾選之後才能選到該資料型態。
SDO_GEOMETRY資料型態欄位的選擇:先在Schema下拉選單下選取"MDSYS",然後在"Type"選取"SDO_GEOMETRY"。
完成表格建立後的表格資料型態。
接下來,執行SQL指令。
透過SDO_AGGR_UNION函數將符合WHERE子句條件的資料聯集在一起
WHERE子句則是定義所有"北部"區域的代碼。
INSERT之後,別忘記執行"COMMIT:"
資料有了之後,仍需要進行"註冊"的動作,不然Oracle Spatial不認得該表格具有空間資訊。註冊的動作操作如下:
"Coordinate System Identifier"輸入"8307",全球GPS座標系統代碼(如果不知道要填多少,先填這個吧,除非自己很清楚知道要填多少)
接下來,要建立空間資訊索引(在大量空間資料中,可以快速的找到所要的圖資以及進行運算)步驟如下:
給一個空間資訊索引名稱
表格的內容
接下來就可以使用Mapbuilder來檢視匯入的圖資了。

從 Global Administrative Areas 匯入台灣資料

Global Administrative Areas 網站的網址(http://www.gadm.org/country) (註: 資料不是很新)
Country: 選台灣(Taiwan), File format: 選 "Shapefile"
按下"Download",下載"TWN_adm.zip"
 
解壓縮到目錄下(範例: "D:\Users\mili\Download\Taiwan Map")
啓動Mapbuilder,並連線至資料庫(範例: user: taiwan)
匯入shapefile: 點選 Tools -> Import Shapefile
在資料選擇上, 使用 "Multiple Files or Directories", 並按下 "Select" 鍵, 選擇剛才 zip 檔案所解壓縮的目錄(範例: "D:\Users\mili\Download\Taiwan Map")。
選擇 "下一步"
除非自己很清楚該選那數值,不然建議選擇預設SRID 值 8307,
 按 "下一步"
 這裏檢查一下,是否都找到該有需要匯入的 shapefile 檔案
 資料匯入中(觀察是否有任何的錯誤)
 匯入完成,檢查表格是否都已經建立(預設表格名稱為檔案名稱)

Thursday, November 10, 2011

移除Oracle Spatial 中不需要的點

在使用Mapviewer來顯示Spatial的屬性, 如果發現無法顯示(已經使用了Stick Text), 應該要如何處理呢?
首先, 要檢查該 Spatial content 的SDO_GTYPE是否為 2003 或是2007. 若不是, Label 是無法正常顯二的. 因此, 最常發生的是spatial content內含有 "點" 或者是"點集合".透過檢查sdo_elem_info, 來了解 spatial content, 是否包含了非多邊型(polygons)的元件.
接下來要處理的問題就是將這些不要的點移除. 以下為移除點的函數(Provided by Siva Ravada)


create or replace function remove_points(g IN sdo_geometry)
return sdo_geometry deterministic as
els number;
g1 sdo_geometry;
g2 sdo_geometry;
idx number;
begin

   g2 := null;
   els := sdo_util.getnumelem(g);
   FOR idx in 1 .. els LOOP
     g1 := sdo_util.extract(g, idx);
     if ( (g1.sdo_gtype <> 2001) AND (g1.sdo_gtype <> 2005) ) then
      g2 := sdo_util.append(g2, g1);
     end if;
   END LOOP;
    return g2;
end;
/
舉例來說, Table M_ADMIN_AREA0 (from Naviteq world sample data sets)中的 'North America' spatial content 的 SDO_GTYPE 是 2004 (elements collections), 是無法正常顯示 Label, 檢查內容, 發現有多餘的"點". 因此可以透過 remove_points function 來移除點.


update M_Admin_Area0  set geometry = remove_points(geometry)
where name = 'North America';

Wednesday, October 12, 2011

如何引用Google Maps做為 Oracle Mapviewer 底圖

Oracle Mapviewer可以引用外部圖資做為其底圖, 如Google Map,...等。接下來說明如何在Oracle Mapviewer設定使用 Google Maps。
透過web proxy存取Google Maps
如果Oracle Mapviewer是在公司內部防火牆內,則先要能對外存取Google Map。一般來說公司都會允許透過web proxy來對外存取外部的網站。所幸,Google Maps是web-based的maps,可以在Mapviewer的設定檔內設定透過web proxy來存取Google Maps。

設定完成之後,記得要重新啓動Mapviewer。
取得Google Maps API Key
要取得 Google Maps API key,先要有Google的帳號。這個部分應該相當容易,就不敍述了。接下來到Sign Up for the Google Maps API,將 Oracle Mapviewer執行的主機註冊。例如我的 Mapviewer執行主機的IP為10.179.187.1(Google是建議使用主機名稱與網域進行註冊)。


設定 Oracle Mapviewer部部圖資來源
輸入相關的資訊
該是檢視成果的時候了
成果如下:

Monday, September 05, 2011

Oracle OLAP 一個簡單的範例

Oracle OLAP
需要工具
Oracle Analytic Workspace Manager 一般在安裝完Oracle Client 就會有. 如果想安裝獨立版本, 下載位置: http://www.oracle.com/technetwork/database/options/olap/olap-downloads-098860.html

啓動後需要建立資料庫連線


 



我要試作的範例非常簡單
維度: 地區, 例如: 全國-> 台北市->中正區
計量: 人口數

首先, 先建立一"分析工作區"



建立維度
Area(地區)

在「層次」的TAB下, 建立"COUNTRY"->"COUNTY"->"TOWN", 一個維度的三個層次

設定"AREA"維度的階層


建立CUBE(立方結構)其中只包括一個維度(AREA)與一個計量(人口數)



建立計量(人口數)






設定對應
點選"維度"下的"對應"
維度對應的設定
最上階層(ROOT)設定'中華民國'
點選"立方結構"下的"對應"
立方結構的對應定

產生Oracle BIEE 設定檔
先確定有下載 Oracle BIEE Plug-In
下載位置: http://www.oracle.com/technetwork/database/options/olap/olap-downloads-098860.html
並將Plug-In放置正確的位置






打開  Oracle BIEE Administration Tool
"Past"