為了改善oracle性能,嘗試修改某些參數,結果修改sga_max_size=2G後資料庫啟動失敗(後來才知道最大值不能超過1.7G),再啟動的時候報:
ORA-27123: unable to attach to shared memory segment
Linux Error: 22: Invalid argument
這時候用sysdba登入,已經不能修改參數了。經過瘋狂Google後,用以下方法解決:
1、用另外的pflie啟動資料庫
pfile檔案去上面那個目錄找找,一般會有,沒有的話去别的機器上面拷一個回來,沒有,我就不知道該怎麼搞了,你也别看下去了。
2、生成spfile。這個時候資料庫是正常跑起來了,但是還改不了參數的,會報一下錯誤:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup
正常用startup啟動也還是不行的,是以要先生成spfile。用這個指令:
create spfile from pfile='${ORACLE_BASE}/admin/***(sid)/pfile/init***(sid).ora'
3、關掉它,再起來。這步不知道是不是一定要的,習慣性喜歡重新開機(最有效的排障手段呀)。
4、現在正常了,改改參數吧,這次可别改錯了。
alter system set sga_max_size=1500M scope=spfile;
沒問題,資料庫可以繼續跑。有問題隻能說各有各的不幸,慢慢Google吧。
據說pfile是不能直接編輯的,我編輯過沒跑起來,當然我不确定是因為我編輯過是以不行了,但是推薦還是别改它了。
搞資料庫的新手,郁悶得很,但是這次還是學到一點點東西:
1、資料庫可以在startup的時候指定一個pfile(其實我不是很明白pfile是什麼來的,不過我知道它很重要,下次一定備份一個能用的).
2、pfile可以通過spfile建一個。用下面的指令(路徑自己指定):
create pfile='/opt/oracle/init.ora' from spfile;
3、通過指定pfile啟動資料庫後,要切到spfile(不然你每次指定pfile啟動吧,不過其實spfile是什麼?)。用下面的指令:
create spfile from pfile='${ORACLE_BASE}/admin/***(sid)/pfile/init***(sid).ora'