實例和數據庫的啟動與關閉是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
命令關閉數據庫
(
)找到init
ora文件
它一般位於
C:\Oracle\admin\oradb\pfile
目錄下
然後修改init
ora文件
使無法使用的控制文件不在control_files參數中定義
如
C:\Oracle\oradata\oradb\control
ctl
可在init
ora中將其刪除掉
或者更換成其它可啟動的控制文件
中國公務網
:
:
修改前
control_files=(
C:\Oracle\oradata\oradb\control
ctl
C:\Oracle\oradata\oradb\control
ctl
C:\Oracle\oradata\oradb\control
ctl
)
修改後
control_files=(
C:\Oracle\oradata\oradbcontrol
ctl
C:\Oracle\oradata\oradb\control
ctl
)
(
)重新啟動數據庫實例
即可解決問題
注意
在控制文件中最少要有兩個控制文件
(二)聯機熱備份失敗後如何打開數據庫? 系統環境
操作系統
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的機器名
則把listener
ora文件中的host參數全部改為新的NT機器名
重新啟動OracleTNSListener
服務即可
例如:
LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = NT_Name)(Port =
))
(ADDRESS=(PROTOCOL=TCP)(Host=NT_Name)(Port=
))
)
(
)使用監聽器實用程序
LSNRCTL
exe
(
)檢查監聽器參數文件
c:\orant\NET
\admin\listener
ora
WWW
GONGWU
COM
CN
:
:
(
)檢查監聽器日志文件
c:\orant\NET
\log\listener
log
(
)Tnsnames
ora文件配置錯誤
重新配置
(
)檢查client端 Tnsnames
ora
(四)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管理員方式
是數據庫管理員連接方式
級別最高
WWW
GONGWU
COM
CN
:
:
Oracle
中
sys
system已經只是具有特權的普通用戶
而internal才是DBA
所以在DBA進行管理數據時
只能使用具有特權的
internal
連接方式才不會出錯
解決方法
以internal/oracle方式連接即可
Oracle數據庫的啟動
啟動實例
啟動實例
以使Oracle Server完成如下任務
◆ 讀參數文件init
ora文件
以決定如何初始化該實例
◆ 根據參數文件中提供的SGA大小
來為SGA分配存貯空間
◆ 啟動後台進程
◆ 打開後台跟蹤文件
實例啟動分正常啟動和約束啟動
所謂約束啟動
就是當數據庫打開後
只能使具有RESTRICTED SESSION系統特權的用戶與其相連接
而正常啟動則允許所有用戶與其相連接
實例啟動有如下三種方式
◆ 只啟動實例
◆ 啟動實例並安裝數據庫
但不打開數據庫
◆ 啟動實例
並安裝和打開數據庫
數據庫安裝
數據庫安裝就是將指定的數據庫與已啟動的實例相聯系
被安裝的數據庫在打開之前保持關閉
此時只有DBA能存取
在安裝數據庫時
實例查找參數文件中的CONTROL
Files參數所指定的控制文件
並打開它
從中取得數據庫的數據文件名和日志文件名
然後確認這些文件是否存在
如果希望多個實例並發地安裝同一個數據庫
則DBA可選擇並行方式安裝該數據庫
如果希望只有一個實例可安裝該數據庫
則選擇專用方式安裝該數據庫
如果ORACLE版本不支持並行服務器選項
則只能按專用方式安裝數據庫
當選擇並行方式安裝數據庫時
並發安裝同一個數據庫的實例個數受預定義最大值的限制
而且在參數文件中必須有命名的私用回滾段或可用的公用回滾段
打開數據庫
在安裝的數據庫被打開之前
所有合法的用戶(除DBA)都不能對該數據庫進行連接和存取
只有被打開以後才能進行連接和存取
在打開數據庫的同時
實例也打開在線的數據文件和在線日志文件
如果數據庫是由於實例的異常而中止或電源故障而被關閉時
則下次打開它時會自動執行實例恢復
在數據庫被打開時
實例試圖獲取一個或多個回滾段
在分布事務中
若當—個數據庫因電源故障等突然被關閉
此時若有一個或多個分布式事務還沒提交或回滾
則在該數據庫被重新打開時
繼續完成實例恢復
RECO後台進程將自動
立即和一致地解決尚未提交或回滾的任何分布事務
常用打開數據庫和實例命令方式
(
)startup nomount
非安裝啟動
這種啟動方式下可執行
重建控制文件
重建數據庫和啟動instance
即啟動SGA和後台進程
這種啟動只需要init
ora文件
(
)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\init
ora
(
)startup exclusive
SQL>conect internal
作為internal連接時
connect命令不需要口令
因為其授權是由操作系統隱式提供的
Internal連接等價於sys連接
它們都是擁有Oracle數據字典的用戶
應用
在Unix下啟動Oracle
i
其整個過程步驟如下
(
)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中關閉Oracle
i
其具體步驟如下
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文件
它被存儲在指定的目錄
該路徑由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
在Oracle
i中使用該命令
其顯示結果為
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/ora
i/OraHome/network/log/listener
log
The listener supports no services
The 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數據庫時更改名字
From:http://tw.wingwit.com/Article/program/Oracle/201311/17589.html