ORA-00824: cannot set sga_target due to existing 問題解決
今天下班到家,接到一同事電話,說是用Oracle9i的用戶端串連Oracle10g後,修改某些參數後,導致Oracle10無法正常啟動,小機重啟了好幾次都不行。
遠端連線之後,用Oracle使用者在sqlplus下面startup時,系統提示如下:
ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information
看來是sga_target這個參數設定的有問題。在網上查了查sga_target參數的資訊(具體可見我的另外一篇轉載的文章:ORACLE10--SGA_MAX_SIZE與SGA_TARGET),瞭解到它是oracle10裡新的記憶體參數,用於動態調整SGA記憶體的各組成部分。它的內容同樣是儲存在spfile中。
在此之前,在另一片文章ORACLE9i——最佳化SGA最大值超過1.7G後導致執行個體無法啟動 中,通過pfile和spfile之間的關係解決了因調整SGA_MAX_SIZE無法啟動執行個體的問題,那麼利用這種關係同樣可以解決今天sga_target的問題。
而且,經過實踐我發現,上次使用的方法太過於繁瑣,今天通過實踐找到一個簡便方法。
但是思路都是一樣的:想辦法把sga_target的值修改到正常閥值內,然後再啟動資料庫執行個體
按照這種思路:
1、我們完全可以先用pfile的配置參數啟動資料庫執行個體
2、通過pfile重建spfile檔案(create spfile from pfile)
3、關閉資料庫執行個體
4、正常啟動資料庫執行個體
具體的操作如下:
[oracle@RedHat pfile]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Oct 20 00:20:19 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup pfile='/home/oracle/admin/zgz/pfile/init.ora.82220096537'
--“通過pfile檔案啟動oracle執行個體”
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 88082024 bytes
Database Buffers 188743680 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
SQL> create spfile from pfile='/home/oracle/admin/zgz/pfile/init.ora.82220096537';--“通過pfile重建spfile檔案”
File created.
SQL> shutdown immediate --"關閉資料庫執行個體"
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup --"通過spfile檔案正常啟動oracle執行個體"
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 88082024 bytes
Database Buffers 188743680 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
SQL>
瞧!和上次的方法比起來是不是很簡便,完全在命令列下就可以完成。
學習就是這樣,同樣一個問題,要不斷掌握更簡便的方法,才是進步!
但是在具體的解決過程中,當我用shutdown immediate來關閉資料庫時,系統突然報以下錯誤:ORA-03113: end-of-file on communication channel
以前沒有遇到過,在網上搜了搜,造成這個錯誤的原因有很多,大部分是網路連接不好造成的,結果我關掉現在的SSH視窗,重建立立一個SSH串連,問題解決。