By leverage "Oracle By Example - Chapter 10: Monitoring and Tuning the Database"
Oracle Database10g以後,最簡單對資料庫進行校能診斷的方法就是使用ADDM(Automatic Database Diagnostics Monitor)
在進行OEM (DB Console)主畫面之後,直接點選"Performance"頁籤,就可以看到資料庫執行校能的狀態
由畫面上可以看到有等待的事件--"Application"
點選"Application"就會進入到"Active Sessions Waiting"。在圖示的地方就可以很清楚地看到"enq TX: row lock contention"。我們裝傻一下。
往下捲到底層,可以看到"Additional Monitoring Links",點選"Snapshot"
接著按下"Create"
這時候會問你是否要手動建立snapshot(Are you sure you want to create a manual snapshot?)按下"Yes"。
當snapshot建立完成,按下右上角的"Database"頁籤
往下捲到"ADDM Performance Analysis",應該至少會出現2個警示,其中一個就會是"Row Lock Waits"
ADDM會自動定期(預設大約是1小時一次)地去檢視資料庫的執行校能並主動找出有問題的地方,然後顯示在這個地方
點選"Row Lock Waits"連結,可以再看到更細部的說明
點選Session ID再看細部資訊。其中可以看到那一個SQL指令造成Row Lock
此時,可以非常確定造成Row Lock 的原因了。按下"Performance"頁籤,並往下捲,點選"Additional Monitoring Links"下的"Blocking Sessions"
點選造成Row Lock的Session ID,再按下"Kill Session"
確認要 "Kill Session"的ID,按下"Yes"
到此,問題已完全解決。
Monday, January 02, 2012
Oracle 資料庫 監測
By leverage "Oracle By Example - Chapter 10: Monitoring and Tuning the Database"
身為Oracle Database 管理人員,在主動監測資料庫空間上至可以做到
為資料表格空間(Tablespace)設定警示上限(Threshold)
發送警示通知
為資料表格空間(Tablespace)設定警示上限(Threshold)
在資料表格空間清單下,選擇要設定的資料表格空間(範使用的是TBSALERT),並按下"Edit"
點選"Thresholds"頁籤
在指定的Thresholds(Specified Thresholds)設定60%為警示,68%為嚴重,然後按下套用。這樣子就完成設定。
發送警示通知
在OEM的右上角按下"Setup"
接下來點選左邊選單上的"Notification Methods"
身為Oracle Database 管理人員,在主動監測資料庫空間上至可以做到
為資料表格空間(Tablespace)設定警示上限(Threshold)
發送警示通知
為資料表格空間(Tablespace)設定警示上限(Threshold)
在資料表格空間清單下,選擇要設定的資料表格空間(範使用的是TBSALERT),並按下"Edit"
點選"Thresholds"頁籤
在指定的Thresholds(Specified Thresholds)設定60%為警示,68%為嚴重,然後按下套用。這樣子就完成設定。
發送警示通知
在OEM的右上角按下"Setup"
接下來點選左邊選單上的"Notification Methods"
在Outgoing Mail (SMTP) Server 填入 SMTP 伺服器名稱,入SMTP認証的使用者名稱(User Name)與密碼(Password, Comfirm Password),發信者名稱(Identify Sender As)與發信者電子郵件(Sender's E-mail Address)。填完後,按下"Apply"
接下來按下右上角的"Preference"
在電子郵件清單(E-mail Addresses)下,按下"Add Another Row)
填入收件人的電子郵件,然後按下"Apply"
Oracle Database Memory Management
在 Oracle Database 11g 以後,建議使用Automatic Memory Management功能。省下分別設定SGA (System Global Area)與PGA (Program Global Area)的大小。
下圖為 Enable Automatic Memory Management,設定 Total Memory Size 與 Maximum Memory Size。要注意的是 Total Memory Size < Maximum Memory Size.
下圖為 Enable Automatic Memory Management,設定 Total Memory Size 與 Maximum Memory Size。要注意的是 Total Memory Size < Maximum Memory Size.
Sunday, January 01, 2012
Oracle Enterprise Manager (DB Console) 啓動與設定
By leverage "Oracle By Example - Chapter 3: Getting Started with Oracle Enterprise Manager"
啓動 DB Console
在Windows環境下,可以直接從"服務主控台"上直接啓動。
在Linux/Unix環境下,執行 "emctl start dbconsole"
設定其它使用者使用 EM (Oracle Enterprise Manager)
打開流覽器,預設的網址 https://<hostname>:1158/em
以 sys 登入 DB Console (記得"Connect As" 要選 "SYSDBA")
在網頁的右上角,按下"Setup"
接下來在左邊的選單,按下"Administrator",畫面會顯示管理者(Administrator)清單
按增下"Create"按鈕
使用者的欄位選取資料庫內的使用者(範是選取"HR");Administrator Privilege選取"Super Administrator",然後按下"Review",再按下"Finish"。
啓動 DB Console
在Windows環境下,可以直接從"服務主控台"上直接啓動。
在Linux/Unix環境下,執行 "emctl start dbconsole"
設定其它使用者使用 EM (Oracle Enterprise Manager)
打開流覽器,預設的網址 https://<hostname>:1158/em
以 sys 登入 DB Console (記得"Connect As" 要選 "SYSDBA")
在網頁的右上角,按下"Setup"
接下來在左邊的選單,按下"Administrator",畫面會顯示管理者(Administrator)清單
按增下"Create"按鈕
使用者的欄位選取資料庫內的使用者(範是選取"HR");Administrator Privilege選取"Super Administrator",然後按下"Review",再按下"Finish"。
新增的使用者就會列在"Administrator List"
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的人可以暫時先跳過,如果想要了解的人就不能不看懂下面這一張圖:
要了解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';
首先, 要檢查該 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';
Subscribe to:
Posts (Atom)





















