UNIX和WINDOWS2000上的ORACLE的差異 PartII
2024-08-29 13:49:25
供稿:網(wǎng)友
Ian Adam ,SAIC Ltd
David Stien,SAIC Ltd
翻譯:Fenng
PartII
數(shù)據(jù)庫啟動(dòng)與關(guān)閉
在windows 2000上數(shù)據(jù)庫可以通過啟動(dòng)相關(guān)的服務(wù)打開。通過控制面板的服務(wù)選項(xiàng)或者是通過命令行模式,如:
net start OracleServiceatei就可以打開相關(guān)服務(wù)。這依靠于一些注冊表參數(shù),我們在后面討論。停止相關(guān)的服務(wù),例如:net stop OracleServiceatei可以關(guān)閉一個(gè)數(shù)據(jù)庫。
在所有的平臺(tái)上,ORACLE8i實(shí)例都可以從服務(wù)治理器(或者SQL*Plus!)中通過startup命令啟動(dòng)。在Unix中,這個(gè)命令啟動(dòng)后臺(tái)進(jìn)程并且打開數(shù)據(jù)庫。它還生成了一個(gè)Unix特定文件,叫做$ORACLE_HOME/dbs/lk<DBNAME>,這是個(gè)MOUNT鎖文件[6 Metalink, 2000]。這會(huì)阻止兩個(gè)實(shí)例mount在同一數(shù)據(jù)庫上,當(dāng)不使用并行服務(wù)器的模式下,要使用不同的ORACLE_SID。原來這是個(gè)0長度文件,不過現(xiàn)在包含文本'DO NOT DELETE THIS FILE!'。不要試圖通過查看這個(gè)文件來得知是否數(shù)據(jù)庫是可用的,它不是很準(zhǔn)確的。在Windows 2000中,startup命令并不啟動(dòng)ORACLE服務(wù),不過,假如服務(wù)已經(jīng)運(yùn)行的話,這將打開數(shù)據(jù)庫。
類似的,服務(wù)治理器Server Manager的shutdown命令在任何平臺(tái)上都會(huì)關(guān)掉數(shù)據(jù)庫,不過在Windows 2000上它并不停掉服務(wù)。很有可能的情況就是ORACLE服務(wù)被啟動(dòng)但是數(shù)據(jù)庫卻關(guān)掉了。
UNIX上的數(shù)據(jù)庫的自動(dòng)啟動(dòng)與關(guān)閉
在 Unix上,ORACLE 提供了dbstart和dbshut 腳本以供使用。在linux
中ORACLE檢測文件/etc/oratab 來決定哪個(gè)數(shù)據(jù)庫自動(dòng)的啟動(dòng)/關(guān)閉。在 Solaris (和一些其他版本的Unix)中,檢查/var/opt/oracle/oratab文件。要注重:8.1.6 版本的dbstart有個(gè)bug,在8.1.7中已經(jīng)被修復(fù),察看[7 Metalink, 2000]有具體說明。
在Linux上,作為root用戶,在/etc/rc.d/init.d目錄中創(chuàng)建一個(gè)一個(gè)名為dbora的文件。這個(gè)文件將會(huì)檢查參數(shù)是否是 'start' 或者 'stop' 并且適當(dāng)?shù)膱?zhí)行 dbstart/dbshut;通常也從這個(gè)腳本啟動(dòng)listener 。再生成兩個(gè)符號聯(lián)接
/etc/rc.d/rc2.d/S99dbora 和
/etc/rc.d/rc0.d/K10dbora。數(shù)據(jù)庫在運(yùn)行級2(多用戶)時(shí)通過/etc/rc.d/rc2.d/S99dbora
啟動(dòng),在系統(tǒng)關(guān)閉到運(yùn)行級0的時(shí)候通過/etc/rc.d/rc0.d/K10dbora關(guān)閉數(shù)據(jù)庫
。在Solaris上,這個(gè)腳本的在/etc/init.d中而不是在/etc/rc.d/init.d.
要注重默認(rèn)的dbshut執(zhí)行了一個(gè)正常(normal)的關(guān)閉操作。在Unix 中可以通過編輯$ORACLE_HOME/bin/dbshut中的這一行來改變數(shù)據(jù)庫的關(guān)閉模式。
把
shutdown
修改成
shutdown immediate
假如啟動(dòng)一個(gè)已經(jīng)運(yùn)行的實(shí)例,dbstart 還會(huì)執(zhí)行一個(gè) shutdown abort 。在dbstart script腳本的頂部警告說 'It should ONLY be executed as part of the system boot PRocedure'。這個(gè)腳本要常被復(fù)制、修改,這樣在其它的時(shí)候使用才能足夠安全。
WINDOWS 2000上的數(shù)據(jù)庫自動(dòng)的啟動(dòng)與關(guān)閉
在以前的版本(8i)中,當(dāng)oracle的啟動(dòng)被一個(gè)額外的服務(wù)ORACLEStartSID處理,服務(wù)器的啟動(dòng)和關(guān)閉的時(shí)候ORACLE不能被自動(dòng)的干凈的關(guān)掉。從ORACLE8i開始,stop/start功能成為了主要的ORACLE服務(wù),并通過注冊表控制。注重當(dāng)ORADIM用于創(chuàng)建或者修改實(shí)例的時(shí)候,自動(dòng)的在注冊表中設(shè)定這些值。這些設(shè)置在HKEY_LOCAL_MACHINE OFTWARE/ORACLE/HOMEID鍵值下。
ID 號從0開始,每有一個(gè)額外的ORACLE home遞增。
-----------------------------------------------------------------
參數(shù) 描述
-----------------------------------------------------------------
ORA_SID_AUTOSTART 設(shè)定為TRUE的時(shí)候
(默認(rèn)值),ORACLEServiceSID啟動(dòng)的時(shí)候啟動(dòng)數(shù)據(jù)
庫。
ORA_SID_PFILE 設(shè)定INIT.ORA參數(shù)文件的全路徑。
ORA_SHUTDOWN 當(dāng)設(shè)定為TRUE的時(shí)候,在當(dāng)前任何ORACLE
home下的任何數(shù)據(jù)庫將shutdown。
ORA_SID_SHUTDOWN 設(shè)定為TRUE的時(shí)候,關(guān)閉標(biāo)記SID值的ORACLE8i數(shù)據(jù)庫。
-----------------------------------------------------------------
假如
SHUTDOWN參數(shù)設(shè)定為FALSE,停掉ORACLEServiceSID將會(huì)abort的方式關(guān)閉實(shí)例,下次啟動(dòng)的
時(shí)候要進(jìn)行實(shí)例恢復(fù)。
下面的可選參數(shù)可以在注冊表中設(shè)為合適的值
-----------------------------------------------------------------
參數(shù) 描述
-----------------------------------------------------------------ORA_SID_SHUTDOWNTYPE 指明數(shù)據(jù)庫關(guān)閉模式Aabort),
I (immediate), N (normal)。
假如你不設(shè)定這個(gè)參數(shù)的話,
默認(rèn)的模式是 I (immediate)。
ORA_SID_SHUTDOWN_TIMEOUT 在一個(gè)SID停止前等待的最大時(shí)間。
-----------------------------------------------------------------
操作系統(tǒng)認(rèn)證
OS認(rèn)證在兩個(gè)平臺(tái)間是相似的,參數(shù)文件中設(shè)定os_authent_prefix
參數(shù),創(chuàng)建用戶都標(biāo)記為externally。在Windows2000中創(chuàng)建用戶要指定大寫的域名并且用戶名要在 "" 中,否則不起作用。假如你在注冊表中把 OSAUTH_PREFIX_DOMAIN 設(shè)定成FALSE的話,你可以忽略掉域。客戶機(jī)和服務(wù)器的機(jī)器還需要在sqlnet.ora中包含sql net.authentication_services=(nts)這一行。
在 Windows 2000 中,可以答應(yīng)一個(gè)域用戶登陸到一個(gè)遠(yuǎn)程pc上,無需提供額外的密碼就可以連接到數(shù)據(jù)庫中。參見[2 K elly III,2000]可以得到具體內(nèi)容。
LISTENER
在 Windows 2000上面 listener作為一個(gè)服務(wù)實(shí)現(xiàn)的,所以listener可以通過啟動(dòng) ORACLETNSListener 服務(wù)來啟動(dòng)。兩種平臺(tái)上listener都可以從lsnrctl命令控制。在Unix上lsnrctl start啟動(dòng) listener 進(jìn)程;在 Windows
2000啟動(dòng) ORACLETNSListener 服務(wù)就可以。 假如listener第一次啟動(dòng)的時(shí)候沒有ORACLETNSListener服務(wù)將創(chuàng)建它。假如從你的計(jì)算機(jī)中刪除ORACLE的話,listener 服務(wù)要手工從注冊表中刪除。
在兩個(gè)平臺(tái)上的listener都可以監(jiān)聽不同版本的數(shù)據(jù)庫。在win2000中,
在LISTENER.ORA中不需要ORACLE_HOME參數(shù)(在UNIX中要使用到的),因?yàn)槊總€(gè)SID在SERVER中是唯一的。listener可以從注冊表中得到正確的ORACLE_HOME。
ORACLE8i 有個(gè)特性叫服務(wù)器注冊,pmon自動(dòng)對listener注冊信息。這意味著Net8 listener可以無需在listener.ora文件中設(shè)置就可以監(jiān)聽一個(gè)數(shù)據(jù)庫。不過這樣做的話,Enterprise Manager要直到啟動(dòng)后才可以連接到數(shù)據(jù)庫。所以這個(gè)例子不能用來啟動(dòng)一個(gè)遠(yuǎn)程的實(shí)例。通常最好在listener.ora中設(shè)置所有的實(shí)例以避免沖突,尤其在一個(gè)有多位DBA的站點(diǎn)中,,可以避免我們提到的 Enterprise Manager 問題。
加長的SID名字
Windows NT上的ORACLE 7 實(shí)例名字有著4個(gè)字符長的限制,這可能會(huì)產(chǎn)生很晦澀的實(shí)例名--慶幸的是在8i中SID名字已經(jīng)加長了。
不過在包括命名服務(wù)的幾個(gè)場合中使用太長的實(shí)例名字也不總是很有用。在Windows 2000上面有個(gè)bug,限制了實(shí)例名字最長15個(gè)字符。
----------------------------------------------------------------
Unix NT
----------------------------------------------------------------
數(shù)據(jù)庫名 實(shí)例名 數(shù)據(jù)庫名 實(shí)例名
----------------------------------------------------------------
ORACLE7 8 8 8 4
ORACLE8 8 8 8 4
ORACLE8i 8 64 8 64
----------------------------------------------------------------
數(shù)據(jù)庫的創(chuàng)建
當(dāng)你在安裝過程中的時(shí)候選擇創(chuàng)建ORACLE 8i數(shù)據(jù)庫,數(shù)據(jù)庫生成助手就會(huì)通過ORACLE Universal Installer
自動(dòng)運(yùn)行。在安裝后它也可以作為一個(gè)單獨(dú)的工具手工運(yùn)行。用它還可以手工的輸入SID代替默認(rèn)的ORCL,默認(rèn)的情況下,不在ORACLE_HOME下面創(chuàng)建數(shù)據(jù)庫,完全遵循OFA的意圖。
建議你運(yùn)行Database Creation Assistant,不過在最后一頁選擇Save information to a batch file(保存信息到一個(gè)批處理文件中),再點(diǎn)擊"完成"按鈕。這會(huì)產(chǎn)生幾個(gè)腳本。從不同的平臺(tái)對比它們的內(nèi)容很有趣的。在Unix 和
Windows上的內(nèi)容很相似,除了windows上對oradim的調(diào)用不同。第一次對它的調(diào)用產(chǎn)生了一個(gè)與ORACLE 數(shù)據(jù)庫相關(guān)聯(lián)的ORACLE服務(wù):
D:/ORACLE/Ora817/bin/oradim -new -sid ATEI -intpwd man -startmode manual -pfile
"D:/ORACLE/admin/atei/pfile/initatei.ora"
第二次對oradim的調(diào)用把服務(wù)更改為自動(dòng)啟動(dòng):
D:/ORACLE/Ora817/bin/oradim -edit -sid atei -startmode auto
可以用這些文件作為創(chuàng)建其它數(shù)據(jù)庫的模版。若你不使用上面建議的方式創(chuàng)建數(shù)據(jù)庫的話,Database Creation Assistant 生成的這些文件和目錄沒什么大用處。在使用這些腳本創(chuàng)建額外的數(shù)據(jù)庫之前,這些文件和目錄不得實(shí)現(xiàn)創(chuàng)建。非凡注明一下,腳本假定一個(gè)密碼文件已經(jīng)存在,密碼文件可以用orapwd命令預(yù)創(chuàng)建[2 H Kelly III, 2000]。
Database Creation Assistant創(chuàng)建的目錄:
Windows 2000
ORACLE_BASE = D:/oracle
Unix
ORACLE_BASE = /db01/app/oracle
ORACLE_BASE/oradata/atei
$ORACLE_BASE/oradata/eighti
ORACLE_BASE/oradata/atei/archive
$ORACLE_BASE/oradata/eighti/archive
ORACLE_BASE/admin/atei
$ORACLE_BASE/admin/eighti
還有這些子文件夾
sadhoc bdump cdump create eXP pfile udump
通過Database Creation Assistant創(chuàng)建/改動(dòng)的文件:
Windows 2000
ORACLE_HOME = D:/oracle/ora817
Unix
ORACLE_HOME = /db01/app/oracle/prodUCt/8.1.7
ORACLE_HOME/database/PWDatei.ora
$ORACLE_HOME/dbs/orapweighti.ora
ORACLE_BASE/admin/atei/pfile/initatei.ora
$ORACLE_BASE/admin/eighti/pfile/initeighti.ora
ORACLE_HOME/database/initatei.ora
包含一行
IFILE='d:/oracle/admin/atei/pfile/initatei.ora‘
$ORACLE_HOME/dbs/initeighti.ora
符號鏈接到:
/db01/app/oracle/admin/eighti/pfile/initeighti.ora
添加到 tnsnames.ora的條目
添加到 tnsnames.ora的條目
添加到 listener.ora的條目
添加到 listener.ora的條目
windows沒有相關(guān)的操作
添加項(xiàng)目到oratab
通過Database Creation Assistant創(chuàng)建的腳本:
Windows 2000
Unix
注釋
atei.bat
eighti
調(diào)用其它腳本,在Windows上還可以調(diào)用ORADIM
ateirun.sql
eightirun.sh
包含創(chuàng)建數(shù)據(jù)庫的語句
ateirun1.sql
eightirun1.sh
創(chuàng)建表空間/ 創(chuàng)建回滾段
不創(chuàng)建系統(tǒng)中的第二個(gè)回滾段
N/a
eightirun2.sh
額外的腳本(如,catproc),
這些在Windows上從ateirun1.sql中運(yùn)行
ateisqlplus.sql
eightisqlplus.sh
添加 SQL*Plus 幫助
@c:/oracle/ora817 qlplus/admin/help/helpbld.sql helpus.sql
ateialterTablespace.sql
eightialterTablespace.sh
為SYSTEM用戶更改默認(rèn)的和臨時(shí)的表空間
ateireplicate.sql
ateijava.sql
ateiordinst.sql
ateiiMedia.sql
ateidrsys.sql
ateicontext.sql
ateispatial1.sql
ateitimeseries.sql
ateivirage.sql
eightireplicate.sh
eightijava.sh
eightiordinst.sh
eightiiMedia.sh
eightidrsys.sh
eighticontext.sh
eightispatial1.sh
eightitimeseries.sh
eightivirage.sh
各種腳本,只有在你選擇相應(yīng)的選項(xiàng)的時(shí)候才會(huì)生成。
遠(yuǎn)程掛接的文件系統(tǒng),如UNIX上的NFS和Windows 2000上UNC,在兩個(gè)平臺(tái)上都不支持。