學過Oracle的人都知道,Oracle參數對數據庫初始化來說非常重要。 因為Oracle初始化參數能夠對數據庫約束和資源限制,下面就有關Oracle參數及參數文件設置進行講述。
初始化參數分為3類:
推導參數
操作系統依賴參數
可變參數
1.推導Oracle參數(derived parameters)
- select name,value from v$parameter where name in (‘processes’,’sessions’);
processes參數代表Oracle並發連接數,合理設置processes參數是十分重要的,超過最大進程數,dba也無法登錄數據庫。
通常在創建數據庫時,建議將該參數值修改為500,我機器默認是150
- alter system set processes=500 scope=spfile;
重啟後看修改過的值
- select name,value from v$parameter where name=’processes’;
- select * from v$sgastat where name=’processes’;
2.操作系統依賴參數
某些參數的有效值或者取值范圍受限於操作系統,比如db_cache_size參數,設置Oracle使用的buffer cache內存大小,該參數
的最大值就要受限於物理內存,這一類參數通常被稱為操作系統依賴參數。
3.可變Oracle參數
可變參數包含絕大多數潛在影響系統性能的可調整參數,某些可變參數設置的是限制條件,如open_cursors,有的是設置容量,如
db_cache_size等
初始化參數的獲取
show parameter sga
使用sql_trace跟蹤當前會話
- alter session set sql_trace=true;
- show parameter sga;
- alter session set sql_trace=false;
4.Oracle參數文件
初始化參數文件(initialization parameter files) PFILE,文本文件,可手工修改
服務器參數文件(server parameter files) SPFILE,二進制文件,不能手工修改
- cd /var/Oracle11g/app/dbs
- file init.ora
- file spfilehugwww.ora
SPFILE文件,對於參數的修改都可以在命令行完成,在sqlplus中通過alter system 修改參數
- select sid,name,value from v$spparameter where value is not null;
- show spparameter;
- show spparameter memory_target;
在通過pfile中調用spfile,使用後設置的參數復蓋spfile中的參數設置,是解決spfile中參數設置錯誤的一種方法
5.修改參數
可以通過alter system或者導入導出來更改spfile的內容
scope新選項,有3個可選值:
memory 只改變當前實例,重啟數據庫後失效
spfile 只改變spfile的設置,不改變當前實例,重啟數據庫後生效
both 同時改變實例及spfile,當前更改立即生效,重啟後仍然有效
在rac環境,可以指定sid=<實例名>
用法:
- 1).scope=memory
- show parameter db_cache_ad
- alter system set db_cache_advice=off scope=memory;
- show parameter db_cache_ad
重啟數據庫後更改失效
2)
- .scope=spfile
- alter system set db_cache_advice=off scope=spfile;
- show parameter db_cache_ad
當前實例不受影響,重啟後生效
3).
- scope=both
- alter system set db_cache_advice=off scope=both;
- alter system set db_cache_advice=off;
- show parameter db_cache_ad
不帶scope參數和scope=both是一樣的,如果修改的是靜態參數,那麼需要指定spfile參數,不能指定both參數,否則會報錯
如:
- alter system set sql_trace=false scope=both;
- alter system set sql_trace=false scope=spfile;
6.在關閉數據庫狀態修改spfile
如果錯誤修改了參數導致數據庫無法啟動,則可以通過創建pfile文件,修改其中的參數,再由pfile創建spfile的方式解決,最後由
spfile正常啟動數據庫,通過這種方式,可以快速修正spfile中的錯誤參數定義
故障演示,修改db_block_buffers=1000導致數據庫不能啟動
- startup;
- alter system set db_block_buffers=1000 scope=spfile;
- shutdown immediate;
- startup;
解決方法:
- create pfile from spfile;
- !vi /var/Oracle11g/app/dbs/inithugwww.ora
- 將包含db_block_buffers=1000的那行刪除
- create spfile from pfile;
- startup;
7.其他
重置spfile中設置的參數
alter system reset parameter
判斷是否使用了spfile
如果查詢返回空值,那麼說明在使用pfile
方法1:
select name,value from v$parameter where name=’spfile’;
方法2:
show parameter spfile
指定pfile文件啟動實例
startup pfile=$Oracle_HOME/dbs/inityang.ora
8.spfile的備份與恢復
oracle把spfile也放到rman的備份恢復策略當中,如果配置了控制文件自動備份,Oracle會在數據庫發生重大變化時自動進行
控制文件及spfile文件的備份。
1)設置控制文件自動備份
- rman target /
- configure controlfile autobackup on;
查詢:
sql>select * from v$rman_configuration;
2)更改自動備份的位置
rman>configure controlfile autobackup format for device type disk to ‘/var/Oracle11g/obak/control%F’
3)檢查自動備份
sql>select * from v$backup_spfile;
rman target /
list backup of spfile;
4)記錄數據庫變化
create tablespace yang datafile ‘/var/Oracle11g/app/base/oradata/hugwww/yang01.dbf’ size 5M;
5)測試
rman target /
restore spfile to ‘/tmp/spfileyang.ora’ from autobackup;
restore controlfile to ‘/tmp/control01.ctl’ from autobackup;
ls -ltr /tmp/*
如果數據庫無法mount,是不能使用以上方法恢復自動備份的控制文件或者參數文件,可手工臨時編輯一個pfile文件啟動
實例,即可進行spfile恢復
注意:自動備份功能缺省是關閉的,強烈推薦大家用上面的方法打開這個功能。
9.Oracle11g參數文件恢復
從Oracle11g開始,恢復實例參數引入了一個新的命令
create
create spfile=’/tmp/spfile.ora’ from memory;
10.如何設置events事件
events事件是oracle重要的診斷工具及問題解決辦法,很多時候需要通過events設置來屏蔽或更改Oracle的行為
- alter system set event=’10841 trace name context forver’ scope=spfile;
- startup force;
- show parameter event
取消event參數設置
- show parameter event
- alter system reset event scope=spfile sid=’*';
- startup force;
- show parameter event
從Oracle10g開始,修改數據庫的歸檔模式不需要設置log_archive_start參數,通過以下方法設置:
- sqlplus "/as sysdba"
- archive log list;
- alter database archivelog;
- alter database open;
- archive log list;
注意:鑒於告警日志文件的重要作用,當數據庫出現故障時,通過我們最先的處理步驟是檢查日志文件,以便發現相關錯誤信息,快
速找到問題所在,這是dba必須明確的一個知識點
位置:
show parameter background_dump_dest;
顯示錯誤號的意思,用如下命令
$oerr ora 30012
完成!