文章詳情頁
啟動Oracle常見疑難問題分析
瀏覽:123日期:2023-11-12 16:01:09
啟動Oracle常見疑難問題分析 (2003-10-1);本文出自《網管員世界》2003年第10期“故障診斷”欄目 實例和數據庫的啟動與關閉是DBA的重要職責之一。只有打開數據庫,其他用戶才能對數據庫中的數據進行操作。一旦數據庫關閉,便不能對其操作。對于DBA們來說,關閉和重新啟動數據庫以便優化、調整應用程序的運行是經常碰到的事情。假如用戶已經進入了數據庫,使用SHUTDOWN IMMEDIATE 或SHUTDOWN ABORT命令來執行關閉數據庫,則用戶將失去連接,直到數據庫重新啟動。經常關閉和啟動會對數據庫性能造成一定的影響,當然也會影響到用戶對數據庫的使用。本文從治理數據庫的角度來分析在Oracle啟動和關閉時經常碰到的問題,并總結了在啟動和關閉Oracle數據庫中應該注重的問題和事項。啟動常見問題(一)在一個控制文件被損壞情況下,如何正常啟動? 系統環境 操作系統:windows 2000 Advanced Server數據庫: Oracle 8i R2 (8.1.6) for NT 企業版安裝路徑:C:ORACLE錯誤現象 因硬盤有壞道,一個控制文件損壞了,或人工誤刪一個控制文件,控制面板的Oracle相關服務可以啟動成功,但用SQL*Plus無法連接。錯誤提示為“ORA-01034: ORACLE not available”。解決方法(1)在開始菜單中直接運行命令,進入“svrmgrl>”提示符模式。(2)在“svrmgrl>”提示符下鍵入“connect internal”命令。(3)在“svrmgrl>”提示符下鍵入“shutdown abort”命令關閉數據庫。(4)找到init.ora文件,它一般位于“C:Oracleadminoradbpfile”目錄下,然后修改init.ora文件,使無法使用的控制文件不在control_files參數中定義。如“C:Oracleoradataoradbcontrol03.ctl”,可在init.ora中將其刪除掉,或者更換成其它可啟動的控制文件。修改前:control_files=(“C:Oracleoradataoradbcontrol01.ctl”.C:Oracleoradataoradbcontrol02.ctl“,”“C:Oracleoradataoradbcontrol03.ctl”)修改后:control_files=(“C:Oracleoradataoradbcontrol01.ctl”,“C:Oracleoradataoradbcontrol02.ctl”)(5)重新啟動數據庫實例,即可解決問題。注重:在控制文件中最少要有兩個控制文件。(二)聯機熱備份失敗后,如何打開數據庫? 系統環境: 操作系統:Windows 2000 Advanced Server數據庫: Oracle 8i R2 (8.1.6) for NT 企業版安裝路徑:C:ORACLE錯誤現象 進行聯機熱備份時,服務器發生故障(如掉電等)。重新啟動服務器后,再啟動數據庫時,無法打開數據庫,Oracle要求進行介質恢復,因為表空間還處在熱備份狀態。解決方法 (1)先將數據庫設置為歸檔模式C:>svrmgrlsvrmgrl>connect internalsvrmgrl>alter tablespace 表空間名 begin backup;說明:這是在表空間進行熱備份模式沒結束時,就強行關閉數據庫所造成的錯誤。svrmgrl>shutdown abortsvrmgrl>startup mount(2)將此表空間的數據文件在沒打開數據庫時,設置成“end backup”模式svrmgrl>alter database datafile '表空間的數據文件名' end backup;(3)執行表空間介質恢復svrmgrl>recover tablespace 表空間名;svrmgrl>alter database open;(三)Oracle啟動時,監聽器不啟動或打開出錯?; 錯誤現象: ORACLE啟動時,監聽器不啟動或打開出錯;服務器端:用username/passWord登錄正常,但用username/password@alias登錄不成功;客戶端:用username/password@alias登錄不成功解決方法 (1)假如是因為修改了NT的機器名,則把listener.ora文件中的host參數全部改為新的NT機器名,重新啟動OracleTNSListener80服務即可。 例如: LISTENER =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(Host = NT_Name)(Port = 1521))(ADDRESS=(PROTOCOL=TCP)(Host=NT_Name)(Port= 1526)))(2)使用監聽器實用程序:LSNRCTL80.exe。(3)檢查監聽器參數文件:c:orantNET80adminlistener.ora。(4)檢查監聽器日志文件:c:orantNET80loglistener.log。(5)Tnsnames.ora文件配置錯誤,重新配置。 (6)檢查client端 Tnsnames.ora。(四)Oracle Enterprise Manager(OEM)工具中如何以SYSOPER、SYSDBA方式登錄?軟件環境: Windows NT4.0+ORACLE 8.0.4ORACLE安裝路徑為:C:ORANT錯誤現象 在以Oracle Enterprise Manager(OEM)工具登錄數據庫時,不論是sys用戶、system用戶,還是其他用戶,在Connect As欄中以sysdba或sysoper角色登錄均遭拒絕,報錯:Ora-01017:invalid username/password;logon denied,但以normal登錄成功。 出錯分析在Oracle數據庫中有三種連接方式:(1)normal正常方式,基本連接方式,級別較低。(2)sysopr系統方式,系統連接方式,高一級。(3)sysdba治理員方式,是數據庫治理員連接方式,級別最高。Oracle8中,sys、system已經只是具有特權的普通用戶,而internal才是DBA。所以在DBA進行治理數據時,只能使用具有特權的“internal”連接方式才不會出錯。解決方法 以internal/oracle方式連接即可。; Oracle數據庫的啟動 啟動實例啟動實例,以使Oracle Server完成如下任務:◆ 讀參數文件init.ora文件,以決定如何初始化該實例;◆ 根據參數文件中提供的SGA大小,來為SGA分配存貯空間;◆ 啟動后臺進程;◆ 打開后臺跟蹤文件。實例啟動分正常啟動和約束啟動。所謂約束啟動,就是當數據庫打開后,只能使具有RESTRICTED SESSION系統特權的用戶與其相連接。而正常啟動則答應所有用戶與其相連接。實例啟動有如下三種方式:◆ 只啟動實例;◆ 啟動實例并安裝數據庫,但不打開數據庫;◆ 啟動實例,并安裝和打開數據庫。數據庫安裝數據庫安裝就是將指定的數據庫與已啟動的實例相聯系。被安裝的數據庫在打開之前保持關閉,此時只有DBA能存取。在安裝數據庫時,實例查找參數文件中的CONTROL-Files參數所指定的控制文件,并打開它,從中取得數據庫的數據文件名和日志文件名,然后確認這些文件是否存在。假如希望多個實例并發地安裝同一個數據庫,則DBA可選擇并行方式安裝該數據庫。假如希望只有一個實例可安裝該數據庫,則選擇專用方式安裝該數據庫。假如ORACLE版本不支持并行服務器選項,則只能按專用方式安裝數據庫。當選擇并行方式安裝數據庫時,并發安裝同一個數據庫的實例個數受預定義最大值的限制,而且在參數文件中必須有命名的私用回滾段或可用的公用回滾段。打開數據庫在安裝的數據庫被打開之前,所有合法的用戶(除DBA)都不能對該數據庫進行連接和存取;只有被打開以后才能進行連接和存取。在打開數據庫的同時,實例也打開在線的數據文件和在線日志文件。假如數據庫是由于實例的異常而中止或電源故障而被關閉時,則下次打開它時會自動執行實例恢復。在數據庫被打開時,實例試圖獲取一個或多個回滾段。在分布事務中,若當—個數據庫因電源故障等忽然被關閉,此時若有一個或多個分布式事務還沒提交或回滾,則在該數據庫被重新打開時,繼續完成實例恢復,RECO后臺進程將自動、立即和一致地解決尚未提交或回滾的任何分布事務。常用打開數據庫和實例命令方式(1)startup nomount 非安裝啟動,這種啟動方式下可執行:重建控制文件、重建數據庫和啟動instance,即啟動SGA和后臺進程,這種啟動只需要init.ora文件。 (2)startup mount dbname 安裝啟動,這種啟動方式下可執行:數據庫日志歸檔、數據庫恢復和重新命名一些數據庫文件。(3)startup open dbname 先執行“nomount”,然后執行“mount”,再打開包括Redolog文件在內的所有數據庫文件,這種方式下可訪問數據庫中的數據。 (4)startup等于以下三個命令 startup nomount alter database mount alter database open (5)startup restrict 約束方式啟動,這種方式能夠啟動數據庫,但只答應具有一定特權的用戶訪問,非特權用戶訪問時,會出現以下提示: ERROR: ORA-01035: Oracle 只答應具有RESTRICTED SESSION權限的用戶使用。(6)startup force 強制啟動方式,當不能關閉數據庫時,可以用startup force來完成數據庫的關閉,先關閉數據庫,再執行正常啟動數據庫命令。 (7)startup pfile=參數文件名 帶初始化參數文件的啟動方式,先讀取參數文件,再按參數文件中的設置啟動數據庫。例:startup pfile=E:Oracleadminoradbpfileinit.ora (8)startup exclusive; SQL>conect internal作為internal連接時,connect命令不需要口令,因為其授權是由操作系統隱式提供的。 Internal連接等價于sys連接,它們都是擁有Oracle數據字典的用戶。應用在Unix下啟動Oracle8i,其整個過程步驟如下:(1)telnet 主機IP或者是主機名user:***** password:*****(2)lsnrctl start(3)svrmgrl(4)svrmgrl>connect internal(5)svrmgrl>startup實例和數據庫的關閉關閉實例的步驟關閉實例后,SGA從內存撤消,后臺進程被停止。關閉實例的步驟如下:(1)啟動SQL*DBA(2)作為INTERNAL用戶與數據庫相連接(3)關閉實例◆ 關閉數據庫◆ 卸下數據庫◆ 關閉實例關閉數據庫數據庫關閉時,首先將SGA中的所有數據庫數據和日志項數據寫入相應的數據文件和日志文件。然后關閉所有聯機數據文件和日志文件。在數據庫關閉后和卸下之前,控制文件仍保持打開,此時假如需要打開時,還可重新打開數據庫。卸下數據庫卸下數據庫就是切斷實例與數據庫的聯系,關閉數據庫控制文件,使內存僅保留實例。常用關閉數據庫和實例命令(1)shutdown normal(正常關閉數據庫)在正常關閉情況下,Oracle在關閉數據庫前,等待所有與之相連接的用戶正常結束其對話。于是在下次啟動數據庫時,就不需要恢復實例。(2)shutdown immediate(立即方式關閉數據庫)當選擇Immediate關閉方式時,即實現直接關閉。在SVRMGRL中執行shutdown immediate,數據庫并不立即關閉, 而是在Oracle執行某些清除工作后才關閉(終止會話、釋放會話資源),當使用shutdown不能關閉數據庫時,shutdown immediate可以完成數據庫關閉的操作。 該關閉方式主要用于下列情況:①馬上停電;②Oracle正在非正規的運行數據庫或一個數據庫應用。該方式關閉數據庫過程如下:①Oracle結束當前正在處理的SQL語句;②回滾未提交的事務;③Oracle不等待與之相連接的用戶退出連接,就直接中斷他們,使用這種關閉方式,下次啟動數據庫時,Oracle應自動執行實例恢復。(3)shutdown abort(撤消實例方式關閉數據庫)這是一種最快的關閉方式,它主要用于下列情況:①一分鐘后就要停電;②Oracle正在非正規的運行數據庫或一個數據庫應用,并且其它的關閉方式失效;③啟動一個數據庫實例時碰到問題。該方式關閉數據庫的過程如下:①Oracle不等待調用完成,直接中斷正在處理的SQL語句;②回滾未提交事物。使用這種關閉方式,下次啟動數據庫時,Oracle應自動執行實例恢復。啟動和關閉實例和數據庫的操作需要connect internal系統特權,安裝和打開數據庫的操作還要有alter database系統特權。直接關閉數據庫,正在訪問數據庫的會話會被忽然終止,假如數據庫中有大量操作正在執行,這時執行shutdown abort后,重新啟動數據庫需要很長時間。 應用在Unix中關閉Oracle8i,其具體步驟如下:svrmgrl>connect internalsvrmgrl>shutdownsvrmgrl>exit在關閉Oracle數據庫時需注重問題不要提前關閉SQL*NET。當需要SHUTDOWN數據庫,不要提前關閉SQL*NET,直到確認關閉了SERVER上的所有數據庫后再關閉SQL*NET。假如關閉了SQL*NET,用戶將失去和數據庫的會話。 存檔或刪除舊的trace files和logs 當啟動Oracle的一個實例時,Oracle把關于該實例的診斷信息寫入指定的trace和log文件。每個后臺進程都增加一個TRACE文件,它被存儲在指定的目錄,該路徑由INIT.ORA或CONFIG.ORA文件中的BACKGROUND_DUMP_DEST參數指定。用戶在數據庫中碰到一個內部錯誤時也增加用戶的TRACE文件,該文件的位置由INIT.ORA或CONFIG.ORA文件中的USER_DUMP_DEST參數指定。TRACE文件的個數和名稱形式由使用數據庫的操作系統決定。在每次啟動和關閉數據庫時,Oracle不會自動刪除TRACE文件。假如長期不刪除這些無用文件,它們將占據數據庫中大量的自由空間。數據庫治理員應該很好的治理這些文件,可以采取刪除或者存檔的策略來避免無用文件占用大量自由空間。SQL*NET也產生LOG文件,一般叫LISTENER.LOG,LISTENER.LOG文件大小也隨著啟動的次數不斷的變大,所以通過妥善治理它也能有效的利用空間。查看該文件可以鍵入命令: lsnrctl status 在Oracle8i中使用該命令,其顯示結果為:o200 5% lsnrctl statusLSNRCTL for SGI IRIX64: Version 8.1.6.0.0 - ProdUCtion on 09-APR-2003 09:16:26(c) Copyright 1998, 1999, Oracle Corporation.; All rights reserved.Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))STATUS of the LISTENERAlias;;LISTENERVersionTNSLSNR for SGI IRIX64: Version 8.1.6.0.0 - ProductionStart Date;;;;;19-MAR-2003 14:43:53Uptime;20 days 18 hr. 4607182418800017439 min. 56 secTrace Level;;;;offSecurity; OFFSNMP;;;OFFListener Log File /data/ora8i/OraHome/network/log/listener.logThe listener supports no servicesThe command completed successfully改名ALERT LOG文件 ALERT LOG文件也是用來記錄INSTANCE的診斷信息的。 它的存放目錄也通過BACKGROUND_DUMP_DEST參數來指定。一般情況下ALERT LOG文件命名方式為:ALERT_ .LOG。ALTER LOG文件包括了一些數據庫主要事件信息,例如:startup和shutdown及redolog的使用、表空間的改變、文件的改變、內部錯誤信息和數據庫備份狀態的改變等。ALTER LOG在后續數據庫的使用中,其增長速度非常快。假如一段時間后,再查看它時,其文件已經變得非常大,所以查看它是非常的費勁。一般來講,為了既能留下這些有用的信息,同時不至于浪費很大的空間,最好的治理辦法就是給它改名。可以在任何時候更改ALTER LOG文件名,建議在SHUTDOWN/STARTUP數據庫時更改名字。
排行榜