UNIX 和 WINDOWS2000 上的 ORACLE 的差異
2024-08-29 13:31:08
供稿:網(wǎng)友
ian adam, saic ltd
david stien, saic ltd
翻譯:fenng
摘要
oracle是廣為人知的unix硬件平臺(tái)上的領(lǐng)先的數(shù)據(jù)庫(kù)系統(tǒng)。oracle用戶和管理員因此熟悉unix平臺(tái)上的oracle架構(gòu)以及它上面的工具和技巧,并從他們的數(shù)據(jù)庫(kù)得到最大的收益。相反,windows上的oracle架構(gòu)就不那么的被廣為了解。這篇文章從一個(gè)dba的角度考察了兩個(gè)操作系統(tǒng)之間的關(guān)鍵的異同點(diǎn)。
簡(jiǎn)介
在看了幾本令人失望的這方面的書之后,我們寫了這篇文章。那些書的通病是試圖做太多的事情--在細(xì)節(jié)上講述windows和oracle。我們的這篇文章假定讀者熟悉unix平臺(tái)上的oracle dba的工作。因此本文將分析兩個(gè)平臺(tái)上的oracle的關(guān)鍵的差異而不是從頭教你oracle的技巧。我們不想把它作為你的一份詳盡的指導(dǎo)或者是手冊(cè)的替代品,事實(shí)上它可能鼓勵(lì)你閱讀一些手冊(cè)。作為數(shù)據(jù)庫(kù)服務(wù)器平臺(tái),它只會(huì)涉及一些unix和windows上相關(guān)的優(yōu)點(diǎn),這就是本文的目的。
范例
這個(gè)例子使用linux上的oracle 8i,實(shí)例名字叫作eighti。windows 2000上面的oracle 8i的實(shí)例名字叫作atei。
客戶端對(duì)oracle的訪問
當(dāng)客戶端連接到oracle時(shí),通常的來(lái)說oracle服務(wù)器的平臺(tái)與客戶端的應(yīng)用無(wú)關(guān)。這實(shí)際上很難說清。 oracle dba 和系統(tǒng)管理人員更關(guān)心操作系統(tǒng)平臺(tái),他們有的時(shí)候會(huì)基于需求(如運(yùn)行時(shí)間和可擴(kuò)展性)選擇平臺(tái)。 更通常的情況下,他們接受(或是接手)給定的平臺(tái)并學(xué)習(xí)從中得到最大受益。
關(guān)于windows 2000
值得一提的是windows 2000是從windows nt升級(jí)而來(lái)。在這兩個(gè)操作系統(tǒng)之間有很多的相似點(diǎn),windows 2000 也有些新的特性。微軟從nt4.0的升級(jí)途徑見下表。
兩個(gè)系統(tǒng)間有很多相似點(diǎn):
-------------------------------------------------------------------------------------
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后臺(tái)進(jìn)程
下面這句話對(duì)于用過oracle的人來(lái)說是會(huì)很熟悉的:"每一個(gè)運(yùn)行著的oracle數(shù)據(jù)庫(kù)都對(duì)應(yīng)一個(gè)oracle實(shí)例,當(dāng)一個(gè)數(shù)據(jù)庫(kù)在數(shù)據(jù)庫(kù)服務(wù)器(不考慮機(jī)器的類型)上啟動(dòng)的時(shí)候,oracle分配一塊叫做system global area (sga)的內(nèi)存區(qū)域并啟動(dòng)一個(gè)或者多個(gè)oracle進(jìn)程。sga和oracle進(jìn)程合起來(lái)稱作oracle 實(shí)例。"――摘自 oracle 8i concepts [4 l leverenz, 1999]。處理后臺(tái)進(jìn)程是放在首位的,也是不同的操作系統(tǒng)之間最明顯的差異。
oracle在unix上的后臺(tái)進(jìn)程
任何連接到unix的用戶都可以很容易的察看oracle的后臺(tái)進(jìn)程:
% 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進(jìn)程與一個(gè)sql*plus會(huì)話相關(guān),其他的進(jìn)程都是后臺(tái)進(jìn)程。在oracle中我們可以通過輸入sql*plus會(huì)話察看這些進(jìn)程:
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 [email protected] (pmon)
2 18453 oracle8 [email protected] (dbw0)
3 18455 oracle8 [email protected] (lgwr)
4 18457 oracle8 [email protected] (ckpt)
5 18459 oracle8 [email protected] (smon)
6 18461 oracle8 [email protected] (reco)
7 19168 oracle8 [email protected](tns v1-v3)
7 rows selected.
每一個(gè)后臺(tái)進(jìn)程都有一行,還有一行信息是與sql*plus會(huì)話相關(guān)的,spid對(duì)應(yīng)相應(yīng)的unix進(jìn)程號(hào)。
在windows2000上的oracle后臺(tái)進(jìn)程
回到windows上,從操作系統(tǒng)中察看后臺(tái)進(jìn)程有些困難。從任務(wù)管理器中可能會(huì)看到運(yùn)行著的應(yīng)用(任務(wù)管理器的察看方法:在任務(wù)欄點(diǎn)擊右鍵選擇"任務(wù)管理器")。在服務(wù)器上orac
le可以是可用的,運(yùn)行著的應(yīng)用卻是不可見的。進(jìn)程表的確顯示一個(gè)進(jìn)程叫做oracle.exe,
察看alert log 顯示oracle的所有后臺(tái)進(jìn)程都是啟動(dòng)的:
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
要看實(shí)際的后臺(tái)進(jìn)程,需要運(yùn)行額外的軟件,例如,進(jìn)程察看器。該軟件可以從windows
2000 cd 中得到(windows nt 的話可以從資源包中得到)。
在windows 2000上,oracle實(shí)例是作為一個(gè)單一的windows 2000進(jìn)程(oracle.exe)實(shí)現(xiàn)的。這個(gè)進(jìn)程包括實(shí)例所需要實(shí)現(xiàn)的每個(gè)任務(wù)的線程。
因此一個(gè)線程對(duì)應(yīng)每個(gè)oracle 后臺(tái)進(jìn)程。oracle.exe進(jìn)程作為一個(gè)服務(wù)運(yùn)行,可以從控制面板的服務(wù)中察看到 oracleservicesid。其他的服務(wù)也可以這樣控制。
這允許oracle在沒有用戶登錄服務(wù)器的時(shí)候也持續(xù)的運(yùn)行。對(duì)于共享主處理器資源的所有的進(jìn)程來(lái)說,oracle能夠達(dá)到高速、低負(fù)荷的上下文切換。
在unix下顯示oracle中的進(jìn)程,我們也可以通過輸入簡(jiǎn)單的sql語(yǔ)句來(lái)達(dá)到。為了顯示pid列,sql語(yǔ)句做了些輕微的改動(dòng)。要注意pid匹配警告日志中報(bào)告的值。
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.
每一個(gè)后臺(tái)進(jìn)程都有一行,還有一行信息是與sql*plus會(huì)話相關(guān)。程序名字并沒有指明后臺(tái)進(jìn)程的名字,和在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.
斷開會(huì)話
提交sql命令 alter system disconnect session可以斷開會(huì)話。有的時(shí)候需要在操作系統(tǒng)級(jí)別斷開會(huì)話,在unix上,通過kill命令實(shí)現(xiàn),前面例子中的sql會(huì)話可以通過輸入unix命令斷開:
kill -9 19168
在windows 2000上可以用orakill斷開一個(gè)會(huì)話。orakill是windows平臺(tái)上的oracle的一個(gè)特定命令,默認(rèn)安裝在$oracle_home/bin下。在命令行下輸入orakill可以察看它的用法。前面例子中的sql*plus會(huì)話可以通過輸入如下的命令斷開:
orakill atei 1200
kill of thread id 1200 in instance atei successfully signaled.
在windows 2000中,如果一個(gè)斷開的會(huì)話標(biāo)記為 "marked for kill"但是沒被刪除,orakill會(huì)終止它。要記住殺掉一個(gè)后臺(tái)進(jìn)程總不是個(gè)好主意,尤其是windows上,會(huì)導(dǎo)致進(jìn)程崩潰,甚至導(dǎo)致數(shù)據(jù)庫(kù)不可用。
windows 2000 注冊(cè)表
和其他的windows 2000中的應(yīng)用那樣,oracle的大多數(shù)的設(shè)定都在注冊(cè)表中。應(yīng)該看看hkey_local_machine oftware/oracle下面都有什么。這些參數(shù)中的一些在后面會(huì)詳細(xì)討論。和oracle服務(wù)相關(guān)的參數(shù)和其他的服務(wù)一樣存貯在同樣的位置:
hkey_local_machine ystem/currentcontrolset ervices。
環(huán)境變量
在unix中兩個(gè)最重要的變量是oracle_home和oracle_sid。一旦這些變量設(shè)定的話,應(yīng)用就可以運(yùn)行并聯(lián)接到本地?cái)?shù)據(jù)庫(kù)。 通常也把$oracle_home/bin 包含在 $path
中以便在使用oracle 工具(如:sqlplus)的時(shí)候免去輸入全路徑的麻煩。
windows 2000 中可以打開命令行設(shè)定oracle_sid 變量再聯(lián)接到本地?cái)?shù)據(jù)庫(kù)。其他的值可以從注冊(cè)表中得到。
multiple oracle homes
windows 2000全面支持多個(gè)oracle home。以前在windows nt上這是個(gè)主要的問題,一直到oracle8.0.4以后才開始支持。最初得對(duì)這一點(diǎn)的支持很差勁。oracle home selector, oracle8i的一個(gè)新的應(yīng)用工具, 改變環(huán)境路徑,使選擇的oracle home 路徑作為主的home。只是簡(jiǎn)單的改變系統(tǒng)路徑,把oracle選擇的bin目錄放在啟動(dòng)路徑中。
每一個(gè) bin目錄都有一個(gè)oracle.key文件,指明在注冊(cè)表中oracle程序在哪里可以找oracle_home 和其他的環(huán)境變量。如果在服務(wù)器上面只有一個(gè)數(shù)據(jù)庫(kù),通常在注冊(cè)表中設(shè)定oracle_sid。不過,不要設(shè)定 oracle_home,對(duì)于oracle產(chǎn)品來(lái)說根本不需要,可能會(huì)導(dǎo)致問題。
文件系統(tǒng)
多 oracle home的支持允許在windows上面實(shí)現(xiàn) unix 的ofa 標(biāo)準(zhǔn)。這極大的簡(jiǎn)化了從unix的過渡。ofa目錄樹的頂層的名字有差異,不過主要的子目錄和文件名字在兩種操作系統(tǒng)中都是一致的。
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 id
/db02/oradata/sid
f:/oracle/oradata id
/db03/oradata/sid
g:/oracle/oradata id
服務(wù)管理器
從oracle 8i開始,服務(wù)管理器的名字在不同的平臺(tái)上都一致了,都叫做svrmgrl。以前在
windows nt上oracle的執(zhí)行文件名字隨著版本變動(dòng)而改變,對(duì)于那些在多平臺(tái)上工作的人來(lái)說這很令人討厭,尤其是在使用一些命令(imp、exp等)的時(shí)候。
------------------------------------------------------------------
oracle 服務(wù)器版本 windows 服務(wù)器管理器可執(zhí)行文件
------------------------------------------------------------------
7.3 svrmgr23
8.0 svrmgr30
8.1 svrmgrl
------------------------------------------------------------------
要注意server manager 正在逐步被淘汰(譯者注:9i中徹底淘汰了svrmgrl),一些額外的功能被加到了sql*plus 中。
parti. to be continued…..
,歡迎訪問網(wǎng)頁(yè)設(shè)計(jì)愛好者web開發(fā)。