[Oracle] UNIX與Windows 2000上Oracle的差異(I)

來源:互聯網
上載者:User
摘要

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

簡介

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

範例

這個例子使用 Linux 上的ORACLE 8i ,執行個體名字叫作 eighti 。Windows 2000 上面的 ORACLE 8i 的執行個體名字叫作 atei 。

用戶端對 ORACLE 的訪問

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

關於 WINDOWS 2000

值得一提的是 Windows 2000 是從 Windows NT 升級而來。在這兩個作業系統之間有很多的相似點, 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 8i 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_eightioracle8 19168 19167 0 16:43:46 ? 0:00 oracleeighti (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

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

SELECT 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 進程號。

在 WINDOWS2000 上的 ORACLE 後台進程

回到 WINDOWS 上,從作業系統中察看後台進程有些困難。從工作管理員中可能會看到運行著的應用(工作管理員的察看方法:在工作列點擊右鍵選擇 " 工作管理員 " )。在伺服器上 ORACLE 可以是可用的,運行著的應用卻是不可見的。進程表的確顯示一個進程叫做 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 DISCONNECT SESSION 可以斷開會話。有的時候需要在作業系統層級斷開會話,在 UNIX 上,通過 kill 命令實現,前面例子中的 ">SQL 會話可以通過輸入 UNIX 命令斷開:

kill -9 19168 

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

orakill atei 1200 Kill of thread id 1200 in instance atei successfully signaled. 

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

Windows 2000 註冊表

和其他的 Windows 2000 中的應用那樣, ORACLE 的大多數的設定都在註冊表中。 你應該看看註冊表中的 HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE 下面都有什麼。這些參數中的一部分在後面會詳細討論。和ORACLE 服務相關的參數和其他的服務一樣存貯在同樣的位置:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services

環境變數

在 Unix 中兩個最重要的變數是 ORACLE_HOME 和 ORACLE_SID 。一旦這些變數設定的話,應用就可以運行並聯結到本機資料庫。 通常也把 $ORACLE_HOME/bin 包含在 $PATH 中以便在使用 ORACLE 工具(如: Sql*Plus )的時候免去輸入全路徑的麻煩。

Windows 2000 中可以開啟命令列設定 ORACLE_SID 變數再聯結到本機資料庫。其他的值可以從註冊表中得到。

MULTIPLE ORACLE HOMES

Windows 2000 全面支援多個 ORACLE home 。以前在 Windows NT 上這是個主要的問題, 一直到 ORACLE 8.0.4 以後才開始支援。最初得對這一點的支援很差勁。 ORACLE Home Selector, ORACLE8i 的一個新的應用工具,改變環境路徑,使選擇的 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:/Oracle/Ora817
Admin directories /oracle/app/oracle/admin D:/Oracle/Admin
Database files /db01/oradata/ ">SID D:/Oracle/Oradata/SID
  /db02/oradata/ ">SID F:/Oracle/Oradata/SID
  /db03/oradata/ ">SID G:/Oracle/Oradata/SID
服務管理員

從 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 中。 

http://www.dbanotes.net/database/oracle_unix_vs_windows_2000.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.