場景:修改oracle系統參數以後,數據庫重啓,客戶端報 ORA-12514 錯誤,其實這只是表象,實際並不是Listener的問題。sql
SELECT * FROM V$RESOURCE_LIMIT數據庫
根據服務器內存的實際狀況,設置對應的參數
alter system set sga_max_size=8G scope=spfile;
alter system set sga_target=8G scope=spfile;
alter system set pga_aggregate_target=4G scope=spfile;
alter system set undo_retention=10080 scope=spfile;
alter system set db_files=1000 scope=spfile;
alter system set processes=2000 scope=spfile;
alter system set session_max_open_files=2000 scope=spfile;
alter system set open_cursors=2000 scope=spfile;
alter system set db_recovery_file_dest_size=100G scope=spfile;windows
若是修改了PGA或者SGA,則必定要有下面這兩行,保證 memory_target = SGA + PGA
alter system set memory_max_target=12G scope=spfile;
alter system set memory_target=12G scope=spfile;服務器
由於若是漏了這兩個參數的設置,數據庫啓動會失敗,而且致使客戶端在鏈接數據庫的時候報 ORA-12514,從而誤引導你去檢查 TNSListener 的設置,本人就深受其害!!!!!session
另外一個要吐槽的地方是,windows環境下的oracle服務,在系統服務裏面從新啓動數據庫,表面上服務重啓成功了,是那種很快一閃而過的啓動,並且oracle.exe進程也起來了,但就是死活訪問不了數據庫,也看不到任何錯誤信息,只看到讓你越查越迷惑的ORA-12514錯誤。oracle
建議使用sqlplus進行數據庫的重啓,這樣能夠看到不少有價值的信息。this
解決方法其實很簡單:spa
create pfile ='d:\initora11g.ora' from spfile;3d
create spfile from pfile = 'd:\initora11g.ora';blog
查看設置以後的參數
show parameter target;
另外若是報錯: ORA-00845: MEMORY_TARGET not supported on this system則說明是內存超出服務器物理內存數量,修改以後再生成spfile便可 注:spfile 是二進制文件,不能編輯 pfile 是文本文件,能夠手動編輯 所以先生成pfile,編輯修改以後再生成系統啓動時默認的spfile