UNIX 和 WINDOWS2000 上的 ORACLE 的差異 (轉)

amyz發表於2007-08-15
UNIX 和 WINDOWS2000 上的 ORACLE 的差異 (轉)[@more@]

 :namespace prefix = o ns = "urn:schemas--com::office" />

 

Ian Adam,   SAIC Ltd

David Stien, SAIC Ltd

翻譯:Fenng 

 

摘要

是廣為人知的平臺上的領先的。ORACLE和管理員因此熟悉Unix平臺上的ORACLE架構以及它上面的工具和技巧,並從他們的資料庫得到最大的收益。相反,上的ORACLE架構就不那麼的被廣為了解。這篇文章從一個a的角度考察了兩個之間的關鍵的異同點。

 

簡介

在看了幾本令人失望的這方面的書之後,我們寫了這篇文章。那些書的通病是試圖做太多的事情--在細節上講述Windows和ORACLE。我們的這篇文章假定讀者熟悉Unix平臺上的ORACLE DBA的工作。因此本文將分析兩個平臺上的ORACLE的關鍵的差異而不是從頭教你ORACLE的技巧。我們不想把它作為你的一份詳盡的指導或者是手冊的替代品,事實上它可能鼓勵你閱讀一些手冊。作為資料庫平臺,它只會涉及一些Unix和Windows上相關的優點,這就是本文的目的。

 

範例

這個例子使用上的ORACLE 8i,例項名字叫作eighti。上面的ORACLE 8i的例項名字叫作atei。

 

客戶端對ORACLE的訪問

當客戶端連線到ORACLE時,通常的來說ORACLE伺服器的平臺與客戶端的應用無關。這實際上很難說清。 ORACLE DBA 和人員更關心作業系統平臺,他們有的時候會基於需求(如執行時間和可擴充套件性)選擇平臺。 更通常的情況下,他們接受(或是接手)給定的平臺並學習從中得到最大受益。

 

關於WINDOWS 2000

值得一提的是Windows 2000是從升級而來。在這兩個作業系統之間有很多的相似點,Windows 2000 也有些新的特性。從NT4.0的升級途徑見下表。

 

兩個系統間有很多相似點:

-------------------------------------------------------------------------------------

NT 4.0        Windows 2000

-------------------------------------------------------------------------------------

NT 4.0 Workstation      Windows 2000 Professional

NT 4.0 Server      Windows 2000 Server

NT 4.0 Enterprise Edition      Windows 2000 Advanced server

Unix       Windows 2000 Datacenter server

-------------------------------------------------------------------------------------

 

 

ORACLE後臺程式

下面這句話對於用過ORACLE的人來說是會很熟悉的:"每一個執行著的ORACLE資料庫都對應一個ORACLE例項,當一個資料庫在資料庫伺服器(不考慮機器的型別)上啟動的時候,ORACLE分配一塊叫做System Global Area (SGA)的區域並啟動一個或者多個ORACLE程式。SGA和ORACLE程式合起來稱作ORACLE 例項。"――摘自 ORACLE Concepts [4 L Leverenz, 1999]。處理後臺程式是放在首位的,也是不同的作業系統之間最明顯的差異。

 

ORACLE在UNIX上的後臺程式

任何連線到UNIX的使用者都可以很容易的察看ORACLE的後臺程式:

 

% ps -ef|grep eighti|grep -v grep

 

oracle8 18451  1  0 16:37:18 ?  0:00 ora_pmon_eighti

oracle8 18453  1  0 16:37:19 ?  0:00 ora_dbw0_eighti

oracle8 18457  1  0 16:37:19 ?  0:04 ora_ckpt_eighti

oracle8 18461  1  0 16:37:19 ?  0:00 ora_reco_eighti

oracle8 18455  1  0 16:37:19 ?  0:02 ora_lgwr_eighti

oracle8 18459  1  0 16:37:19 ?  0:01 ora_smon_eighti

oracle8 19168 19167  0 16:43:46 ?  0:00 oracleeighti

  (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

 

最後一行的ORACLE程式與一個*Plus會話相關,其他的程式都是後臺程式。在ORACLE中我們可以透過輸入SQL*Plus會話察看這些程式:

 

sid, spid, osuser, s.program

FROM v$process p, v$session s WHERE p.addr=s.paddr;

 

  SID SPID  OSUSER  PROGRAM

  -------------------------------------------------------------------

  1 18451  oracle8  oracle@saic02 (PMON)

  2 18453  oracle8  oracle@saic02 (DBW0)

  3 18455  oracle8  oracle@saic02 (LGWR)

  4 18457  oracle8   oracle@saic02 (CKPT)

  5 18459  oracle8  oracle@saic02 (SMON)

  6 18461  oracle8  oracle@saic02 (RECO)

  7 19168  oracle8  sqlplus@saic02(TNS V1-V3)

7 rows selected.

 

每一個後臺程式都有一行,還有一行資訊是與SQL*Plus會話相關的,SPID對應相應的UNIX程式號。

 

 

在上的ORACLE後臺程式

回到WINDOWS上,從作業系統中察看後臺程式有些困難。從工作管理員中可能會看到執行著的應用(工作管理員的察看方法:在工作列點選右鍵選擇"工作管理員")。在伺服器上ORAC

LE可以是可用的,執行著的應用卻是不可見的。程式表的確顯示一個程式叫做ORACLE.EXE,

察看alert log 顯示ORACLE的所有後臺程式都是啟動的:

 

PMON started with pid=2

DBW0 started with pid=3

LGWR started with pid=4

CKPT started with pid=5

SMON started with pid=6

RECO started with pid=7

 

要看實際的後臺程式,需要執行額外的,例如,程式察看器。該軟體可以從Windows

2000 CD 中得到(Windows NT 的話可以從資源包中得到)。

 

在Windows 2000上,ORACLE例項是作為一個單一的Windows 2000程式(ORACLE.EXE)實現的。這個程式包括例項所需要實現的每個任務的執行緒。

因此一個執行緒對應每個ORACLE 後臺程式。ORACLE.EXE程式作為一個服務執行,可以從控制皮膚的服務中察看到 ORACLEServiceSID。其他的服務也可以這樣控制。

 

這允許ORACLE在沒有使用者登入伺服器的時候也持續的執行。對於共享主資源的所有的程式來說,ORACLE能夠達到高速、低負荷的上下文切換。

 

在Unix下顯示ORACLE中的程式,我們也可以透過輸入簡單的SQL語句來達到。為了顯示PID列,SQL語句做了些輕微的改動。要注意PID匹配警告日誌中報告的值。

 

SELECT s.sid, p.pid, p.spid signaled, s.osuser, s.program

FROM v$process p, v$session s

WHERE p.addr=s.paddr;

 

SID  PID THREADID  OSUSER  PROGRAM

---- ------- --------- --------------- --------------------

  1  2 1088  SYSTEM  ORACLE.EXE

  2  3 1172  SYSTEM  ORACLE.EXE

  3  4 1180  SYSTEM  ORACLE.EXE

  4  5 1192  SYSTEM  ORACLE.EXE

  5  6 1212  SYSTEM  ORACLE.EXE

  6  7 1220  SYSTEM  ORACLE.EXE

  7  8 1200  Administrator  SQLPLUSW.EXE

7 rows selected.

 

每一個後臺程式都有一行,還有一行資訊是與SQL*Plus會話相關。名字並沒有指明後臺程式的名字,和在Unix 中一樣,這些名字可以透過和v$bgprocess 連線得到。

 

SELECT s.sid SID, p.spid THREADID, p.program PROCESSNAME, bg.name NAME

FROM v$process p, v$session s, v$bgprocess bg

WHERE p.addr = s.paddr

AND  p.addr = bg.paddr

AND  bg.paddr <> '00' ;

 

SID THREADID  PROCESSNAME  NAME

---------- --------- --------------- -------------

  1 1088  ORACLE.EXE  PMON

  2 1172  ORACLE.EXE  DBW0

  3 1180  ORACLE.EXE  LGWR

  4 1192  ORACLE.EXE  CKPT

  5 1212  ORACLE.EXE  SMON

  6 1220  ORACLE.EXE  RECO

6 rows selected.

 

 

斷開會話

提交SQL命令 ALTER SYSTEM DINNECT SESSION可以斷開會話。有的時候需要在作業系統級別斷開會話,在UNIX上,透過kill命令實現,前面例子中的SQL會話可以透過輸入UNIX命令斷開:

 

kill -9 19168

 

在Windows 2000上可以用orakill斷開一個會話。orakill是Windows平臺上的ORACLE的一個特定命令,預設在$ORACLE_HOMEin下。在命令列下輸入orakill可以察看它的用法。前面例子中的SQL*Plus會話可以透過輸入如下的命令斷開:

 

orakill atei 1200

Kill of thread id 1200 in instance atei succesully signaled.

 

在Windows 2000中,如果一個斷開的會話標記為 "marked for kill"但是沒被刪除,orakill會終止它。要記住殺掉一個後臺程式總不是個好主意,尤其是Windows上,會導致程式崩潰,甚至導致資料庫不可用。

 

Windows 2000 登錄檔

和其他的Windows 2000中的應用那樣,ORACLE的大多數的設定都在登錄檔中。應該看看HKEY_LOCAL_MACHINESOFTWAREORACLE下面都有什麼。這些引數中的一些在後面會詳細討論。和ORACLE服務相關的引數和其他的服務一樣存貯在同樣的位置:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices。

 

 

環境變數

在Unix中兩個最重要的變數是ORACLE_HOME和ORACLE_SID。一旦這些變數設定的話,應用就可以執行並聯接到本地資料庫。 通常也把$ORACLE_HOME/bin 包含在 $PATH

中以便在使用ORACLE 工具(如:sqlplus)的時候免去輸入全路徑的麻煩。

 

Windows 2000 中可以開啟命令列設定ORACLE_SID 變數再聯接到本地資料庫。其他的值可以從登錄檔中得到。

 

MULTIPLE ORACLE HOMES

Windows 2000全面支援多個ORACLE home。以前在Windows NT上這是個主要的問題,一直到ORACLE8.0.4以後才開始支援。最初得對這一點的支援很差勁。ORACLE Home Selector, 的一個新的應用工具, 改變環境路徑,使選擇的ORACLE home 路徑作為主的home。只是簡單的改變系統路徑,把ORACLE選擇的BIN目錄放在啟動路徑中。

 

每一個 BIN目錄都有一個ORACLE.KEY,指明在登錄檔中ORACLE程式在哪裡可以找ORACLE_HOME 和其他的環境變數。如果在伺服器上面只有一個資料庫,通常在登錄檔中設定ORACLE_SID。不過,不要設定 ORACLE_HOME,對於ORACLE產品來說根本不需要,可能會導致問題。

 

檔案系統

多 ORACLE home的支援允許在Windows上面實現 Unix 的OFA 標準。這極大的簡化了從Unix的過渡。OFA目錄樹的頂層的名字有差異,不過主要的子目錄和檔名字在兩種作業系統中都是一致的。

 

 

Unix

NT

ORACLE_BASE

/oracle/app/oracle

D:Oracle

ORACLE_HOME

/oracle/app/oracle/product/8.1.7

D:OracleOra817

Admin directories

/oracle/app/oracle/admin

D:OracleAdmin

Database files

/db01/oradata/SID

D:OracleOradataSID

 

/db02/oradata/SID

F:OracleOradataSID

 

/db03/oradata/SID

G:OracleOradataSID

 

 

服務管理器

從ORACLE 8i開始,服務管理器的名字在不同的平臺上都一致了,都叫做svrmgrl。以前在

Windows NT上ORACLE的檔名字隨著版本變動而改變,對於那些在多平臺上工作的人來說這很令人討厭,尤其是在使用一些命令(imp、exp等)的時候。

 

------------------------------------------------------------------

ORACLE 伺服器版本   Windows 伺服器管理器可執行檔案

------------------------------------------------------------------

 7.3      svrmgr23

 8.0      svrmgr30

 8.1      svrmgrl

------------------------------------------------------------------

 

要注意server manager 正在逐步被淘汰(譯者注:9i中徹底淘汰了svrmgrl),一些額外的功能被加到了SQL*Plus 中。

 

PartI. To Be Continued…..

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-957961/,如需轉載,請註明出處,否則將追究法律責任。

相關文章