也談oracle參數和參數文件

咱們錯誤修改了oracle系統參數,有的時候會致使數據庫沒法啓動,參數保存在spfile中,咱們沒法經過直接編輯這個文件來恢復咱們的誤操做,由於 這個文件是個二進制文件,切勿直接更改!可是在之前的版本中有個pfile文件,那個文件是個文本文件,能夠直接編輯修改!恢復的思路就是經過spfile文件建立pfile文件,更改完配置之後,再經過pfile文件來建立咱們的spfile文件!
sql

  下面就是詳細的操做步驟,以及我在實驗的時候遇到的問題!
  1
、修改參數數據庫

       SQL> alter system set db_block_buffers=1000 scope=spfile;服務器

System altered.session

  2、停掉數據庫併發

       SQL> shutdown immediateoracle

Database closed.app

Database dismounted.ide

ORACLE instance shut down.工具

  3、啓動數據庫(報錯)性能

       SQL> startup

ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information

  4、經過建立pfile來恢復

       SQL> create pfile from spfile;

File created.

執行這條命令之後我沒有找到pfile文件,利用find / -name 「pfile*」 –print也沒找到

在請教了itpub的高手後經過指定路徑的辦法解決,下面是詳細的過程!

SQL> create pfile='/opt/oracle/aaaa.ora' from spfile;

File created.

而後編輯/opt/oracle/aaaa.ora文件,去掉*.db_block_buffers=1000這行!

接着經過pfile文件生成spfile文件

SQL> create spfile from pfile='/opt/oracle/aaaa.ora';

File created.

 5、啓動數據庫

       SQL> startup

ORACLE instance started.

 

至此spfile文件恢復成功!



學過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=memory|spfile|both>


判斷是否使用了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 from memory; 
create spfile=’/tmp/spfile.ora’ from memory;|pfile>


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


完成!