熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

啟動Oracle常見疑難問題分析

2022-06-13   來源: Oracle 

  實例和數據庫的啟動與關閉是DBA的重要職責之一只有打開數據庫其他用戶才能對數據庫中的數據進行操作一旦數據庫關閉便不能對其操作對於DBA們來說關閉和重新啟動數據庫以便優化調整應用程序的運行是經常碰到的事情如果用戶已經進入了數據庫使用SHUTDOWN IMMEDIATE 或SHUTDOWN ABORT命令來執行關閉數據庫則用戶將失去連接直到數據庫重新啟動經常關閉和啟動會對數據庫性能造成一定的影響當然也會影響到用戶對數據庫的使用本文從管理數據庫的角度來分析在Oracle啟動和關閉時經常遇到的問題並總結了在啟動和關閉Oracle數據庫中應該注意的問題和事項
  
  啟動常見問題
  
  (一)在一個控制文件被損壞情況下如何正常啟動?
  
  系統環境
  
  操作系統Windows Advanced Server
  
  數據庫 Oracle i R () for NT 企業版
  
  安裝路徑C:\ORACLE
  
  錯誤現象
  
  因硬盤有壞道一個控制文件損壞了或人工誤刪一個控制文件控制面板的Oracle相關服務可以啟動成功但用SQL*Plus無法連接錯誤提示為ORA: ORACLE not available
  
  解決方法
  
  ()在開始菜單中直接運行命令進入svrmgrl>提示符模式
  
  ()在svrmgrl>提示符下鍵入connect internal命令
  
  ()在svrmgrl>提示符下鍵入shutdown abort命令關閉數據庫
  
  ()找到initora文件它一般位於C:\Oracle\admin\oradb\pfile目錄下然後修改initora文件使無法使用的控制文件不在control_files參數中定義C:\Oracle\oradata\oradb\controlctl可在initora中將其刪除掉或者更換成其它可啟動的控制文件中國公務網 ::
  
  修改前
  
  control_files=(C:\Oracle\oradata\oradb\controlctlC:\Oracle\oradata\oradb\controlctlC:\Oracle\oradata\oradb\controlctl)
  
  修改後
  
  control_files=(C:\Oracle\oradata\oradbcontrolctlC:\Oracle\oradata\oradb\controlctl)
  
  ()重新啟動數據庫實例即可解決問題
  
  注意在控制文件中最少要有兩個控制文件
  
  (二)聯機熱備份失敗後如何打開數據庫?
  
  系統環境
  
  操作系統Windows Advanced Server
  
  數據庫 Oracle i R () for NT 企業版
  
  安裝路徑C:\ORACLE
  
  錯誤現象
  
  進行聯機熱備份時服務器發生故障(如掉電等)重新啟動服務器後再啟動數據庫時無法打開數據庫Oracle要求進行介質恢復因為表空間還處在熱備份狀態
  
  解決方法
  
  ()先將數據庫設置為歸檔模式
  
  C:\>svrmgrl
  svrmgrl>connect internal
  svrmgrl>alter tablespace 表空間名 begin backup;
  
  說明這是在表空間進行熱備份模式沒結束時就強行關閉數據庫所造成的錯誤
  
  svrmgrl>shutdown abort
  svrmgrl>startup mount
  
  ()將此表空間的數據文件在沒打開數據庫時設置成end backup模式
  
  svrmgrl>alter database datafile %表空間的數據文件名% end backup
  
  ()執行表空間介質恢復
  
  svrmgrl>recover tablespace 表空間名
  svrmgrl>alter database open
  
  (三)Oracle啟動時監聽器不啟動或打開出錯?
  
  錯誤現象
  
  ORACLE啟動時監聽器不啟動或打開出錯服務器端用username/password登錄正常但用username/password@alias登錄不成功客戶端用username/password@alias登錄不成功
  
  解決方法
  
  ()如果是因為修改了NT的機器名則把listenerora文件中的host參數全部改為新的NT機器名重新啟動OracleTNSListener服務即可
  
  例如:
  
  LISTENER =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(Host = NT_Name)(Port = ))
  (ADDRESS=(PROTOCOL=TCP)(Host=NT_Name)(Port= ))
  )
  
  ()使用監聽器實用程序LSNRCTLexe
  
  ()檢查監聽器參數文件c:\orant\NET\admin\listeneroraWWWGONGWUCOMCN ::
  
  ()檢查監聽器日志文件c:\orant\NET\log\listenerlog
  
  ()Tnsnamesora文件配置錯誤重新配置
  
  ()檢查client端 Tnsnamesora
  
  (四)Oracle Enterprise Manager(OEM)工具中如何以SYSOPERSYSDBA方式登錄?
  
  軟件環境
  
  Windows NT+ORACLE
  
  ORACLE安裝路徑為C:\ORANT
  
  錯誤現象
  
  在以Oracle Enterprise Manager(OEM)工具登錄數據庫時不論是sys用戶system用戶還是其他用戶在Connect As欄中以sysdba或sysoper角色登錄均遭拒絕報錯Ora:invalid username/password;logon denied但以normal登錄成功
  
  出錯分析
  
  在Oracle數據庫中有三種連接方式
  
  ()normal正常方式基本連接方式級別較低
  
  ()sysopr系統方式系統連接方式高一級
  
  ()sysdba管理員方式是數據庫管理員連接方式級別最高WWWGONGWUCOMCN ::
  
  Oraclesyssystem已經只是具有特權的普通用戶而internal才是DBA所以在DBA進行管理數據時只能使用具有特權的internal連接方式才不會出錯
  
  解決方法
  
  以internal/oracle方式連接即可
  
  Oracle數據庫的啟動
  
  啟動實例
  
  啟動實例以使Oracle Server完成如下任務
  
  ◆ 讀參數文件initora文件以決定如何初始化該實例
  
  ◆ 根據參數文件中提供的SGA大小來為SGA分配存貯空間
  
  ◆ 啟動後台進程
  
  ◆ 打開後台跟蹤文件
  
  實例啟動分正常啟動和約束啟動所謂約束啟動就是當數據庫打開後只能使具有RESTRICTED SESSION系統特權的用戶與其相連接而正常啟動則允許所有用戶與其相連接
  
  實例啟動有如下三種方式
  
  ◆ 只啟動實例
  
  ◆ 啟動實例並安裝數據庫但不打開數據庫
  
  ◆ 啟動實例並安裝和打開數據庫
  
  數據庫安裝
  
  數據庫安裝就是將指定的數據庫與已啟動的實例相聯系被安裝的數據庫在打開之前保持關閉此時只有DBA能存取在安裝數據庫時實例查找參數文件中的CONTROLFiles參數所指定的控制文件並打開它從中取得數據庫的數據文件名和日志文件名然後確認這些文件是否存在如果希望多個實例並發地安裝同一個數據庫則DBA可選擇並行方式安裝該數據庫如果希望只有一個實例可安裝該數據庫則選擇專用方式安裝該數據庫如果ORACLE版本不支持並行服務器選項則只能按專用方式安裝數據庫當選擇並行方式安裝數據庫時並發安裝同一個數據庫的實例個數受預定義最大值的限制而且在參數文件中必須有命名的私用回滾段或可用的公用回滾段
  
  打開數據庫
  
  在安裝的數據庫被打開之前所有合法的用戶(除DBA)都不能對該數據庫進行連接和存取只有被打開以後才能進行連接和存取在打開數據庫的同時實例也打開在線的數據文件和在線日志文件如果數據庫是由於實例的異常而中止或電源故障而被關閉時則下次打開它時會自動執行實例恢復在數據庫被打開時實例試圖獲取一個或多個回滾段在分布事務中若當—個數據庫因電源故障等突然被關閉此時若有一個或多個分布式事務還沒提交或回滾則在該數據庫被重新打開時繼續完成實例恢復RECO後台進程將自動立即和一致地解決尚未提交或回滾的任何分布事務
  
  常用打開數據庫和實例命令方式
  
  ()startup nomount
  
  非安裝啟動這種啟動方式下可執行重建控制文件重建數據庫和啟動instance即啟動SGA和後台進程這種啟動只需要initora文件
  
  ()startup mount dbname
  
  安裝啟動這種啟動方式下可執行數據庫日志歸檔數據庫恢復和重新命名一些數據庫文件
  
  ()startup open dbname
  
  先執行nomount然後執行mount再打開包括Redolog文件在內的所有數據庫文件這種方式下可訪問數據庫中的數據
  
  ()startup等於以下三個命令
  
  startup nomount
  alter database mount
  alter database open
  
  ()startup restrict
  
  約束方式啟動這種方式能夠啟動數據庫但只允許具有一定特權的用戶訪問非特權用戶訪問時會出現以下提示
  
  ERROR
  
  ORA: Oracle 只允許具有RESTRICTED SESSION權限的用戶使用
  
  ()startup force
  
  強制啟動方式當不能關閉數據庫時可以用startup force來完成數據庫的關閉先關閉數據庫再執行正常啟動數據庫命令
  
  ()startup pfile=參數文件名
  
  帶初始化參數文件的啟動方式先讀取參數文件再按參數文件中的設置啟動數據庫startup pfile=E:\Oracle\admin\oradb\pfile\initora
  
  ()startup exclusive
  
  SQL>conect internal
  
  作為internal連接時connect命令不需要口令因為其授權是由操作系統隱式提供的Internal連接等價於sys連接它們都是擁有Oracle數據字典的用戶
  
  應用
  
  在Unix下啟動Oraclei其整個過程步驟如下
  
  ()telnet 主機IP或者是主機名
  
  user***** password*****
  
  ()lsnrctl start
  
  ()svrmgrl
  
  ()svrmgrl>connect internal
  
  ()svrmgrl>startup
  
  實例和數據庫的關閉
  
  關閉實例的步驟
  
  關閉實例後SGA從內存撤消後台進程被停止關閉實例的步驟如下
  
  ()啟動SQL*DBA
  
  ()作為INTERNAL用戶與數據庫相連接
  
  ()關閉實例
  
  ◆ 關閉數據庫
  
  ◆ 卸下數據庫
  
  ◆ 關閉實例
  
  關閉數據庫
  
  數據庫關閉時首先將SGA中的所有數據庫數據和日志項數據寫入相應的數據文件和日志文件然後關閉所有聯機數據文件和日志文件在數據庫關閉後和卸下之前控制文件仍保持打開此時如果需要打開時還可重新打開數據庫
  
  卸下數據庫
  
  卸下數據庫就是切斷實例與數據庫的聯系關閉數據庫控制文件使內存僅保留實例
  
  常用關閉數據庫和實例命令
  
  ()shutdown normal(正常關閉數據庫)
  
  在正常關閉情況下Oracle在關閉數據庫前等待所有與之相連接的用戶正常結束其對話於是在下次啟動數據庫時就不需要恢復實例
  
  ()shutdown immediate(立即方式關閉數據庫)
  
  當選擇Immediate關閉方式時即實現直接關閉在SVRMGRL中執行shutdown immediate數據庫並不立即關閉 而是在Oracle執行某些清除工作後才關閉(終止會話釋放會話資源)當使用shutdown不能關閉數據庫時shutdown immediate可以完成數據庫關閉的操作
  
  該關閉方式主要用於下列情況
  
  ①馬上停電
  
  ②Oracle正在非正規的運行數據庫或一個數據庫應用
  
  該方式關閉數據庫過程如下
  
  ①Oracle結束當前正在處理的SQL語句
  
  ②回滾未提交的事務
  
  ③Oracle不等待與之相連接的用戶退出連接就直接中斷他們使用這種關閉方式下次啟動數據庫時Oracle應自動執行實例恢復
  
  ()shutdown abort(撤消實例方式關閉數據庫)
  
  這是一種最快的關閉方式它主要用於下列情況
  
  ①一分鐘後就要停電
  
  ②Oracle正在非正規的運行數據庫或一個數據庫應用並且其它的關閉方式失效
  
  ③啟動一個數據庫實例時碰到問題
  
  該方式關閉數據庫的過程如下
  
  ①Oracle不等待調用完成直接中斷正在處理的SQL語句
  
  ②回滾未提交事物
  
  使用這種關閉方式下次啟動數據庫時Oracle應自動執行實例恢復啟動和關閉實例和數據庫的操作需要connect internal系統特權安裝和打開數據庫的操作還要有alter database系統特權直接關閉數據庫正在訪問數據庫的會話會被突然終止如果數據庫中有大量操作正在執行這時執行shutdown abort後重新啟動數據庫需要很長時間
  
  應用
  
  在Unix中關閉Oraclei其具體步驟如下
  
  svrmgrl>connect internal
  svrmgrl>shutdown
  svrmgrl>exit
  
  在關閉Oracle數據庫時需注意問題
  
  不要提前關閉SQL*NET
  
  當需要SHUTDOWN數據庫不要提前關閉SQL*NET直到確認關閉了SERVER上的所有數據庫後再關閉SQL*NET如果關閉了SQL*NET用戶將失去和數據庫的會話
  
  存檔或刪除舊的trace files和logs
  
  當啟動Oracle的一個實例時Oracle把關於該實例的診斷信息寫入指定的trace和log文件每個後台進程都增加一個TRACE文件它被存儲在指定的目錄該路徑由INITORA或CONFIGORA文件中的BACKGROUND_DUMP_DEST參數指定用戶在數據庫中遇到一個內部錯誤時也增加用戶的TRACE文件該文件的位置由INITORA或CONFIGORA文件中的USER_DUMP_DEST參數指定TRACE文件的個數和名稱形式由使用數據庫的操作系統決定
  
  在每次啟動和關閉數據庫時Oracle不會自動刪除TRACE文件如果長期不刪除這些無用文件它們將占據數據庫中大量的自由空間數據庫管理員應該很好的管理這些文件可以采取刪除或者存檔的策略來避免無用文件占用大量自由空間
  
  SQL*NET也產生LOG文件一般叫LISTENERLOGLISTENERLOG文件大小也隨著啟動的次數不斷的變大所以通過妥善管理它也能有效的利用空間查看該文件可以鍵入命令
  
  lsnrctl status
  
  在Oraclei中使用該命令其顯示結果為
  
  o % lsnrctl status
  LSNRCTL for SGI IRIX: Version Production on APR ::
  (c) Copyright Oracle Corporation All rights reserved
  Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
  STATUS of the LISTENER
  Alias LISTENER
  Version TNSLSNR for SGI IRIX: Version Production
  Start Date MAR ::
  Uptime days hr min sec
  Trace Level off
  Security OFF
  SNMP OFF
  Listener Log File /data/orai/OraHome/network/log/listenerlog
  The listener supports no services
  The command completed successfully
  
  改名ALERT LOG文件
  
  ALERT LOG文件也是用來記錄INSTANCE的診斷信息的它的存放目錄也通過BACKGROUND_DUMP_DEST參數來指定一般情況下ALERT LOG文件命名方式為ALERT_ LOGALTER LOG文件包括了一些數據庫主要事件信息例如startup和shutdown及redolog的使用表空間的改變文件的改變內部錯誤信息和數據庫備份狀態的改變等
  
  ALTER LOG在後續數據庫的使用中其增長速度非常快如果一段時間後再查看它時其文件已經變得非常大所以查看它是非常的費勁一般來講為了既能留下這些有用的信息同時不至於浪費很大的空間最好的管理辦法就是給它改名可以在任何時候更改ALTER LOG文件名建議在SHUTDOWN/STARTUP數據庫時更改名字
From:http://tw.wingwit.com/Article/program/Oracle/201311/17589.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.