1. 程式人生 > >ORA-12514 解決方法

ORA-12514 解決方法

場景:修改oracle系統引數之後,資料庫重啟,客戶端報 ORA-12514 錯誤,其實這只是表象,實際並非Listener的問題。

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;

一定要有下面這兩行,保證 memory_target = SGA + PGAalter system set memory_max_target=12G scope=spfile;alter system set memory_target=12G scope=spfile;

因為如果漏了這兩個引數的設定,資料庫啟動會失敗,並且導致客戶端在連線資料庫的時候報 ORA-12514,從而誤引導你去檢查 TNSListener 的設定,本人就深受其害!!!!!

另一個要吐槽的地方是,windows環境下的oracle服務,在系統服務裡面重新啟動資料庫,表面上服務重啟成功了,是那種很快一閃而過的啟動,而且oracle.exe程序也起來了,但就是死活訪問不了資料庫,也看不到任何錯誤資訊,只看到讓你越查越迷惑的ORA-12514錯誤。

建議使用sqlplus進行資料庫的重啟,這樣可以看到很多有價值的資訊。

解決方法其實很簡單:根據當前系統已經設定生效的spfile建立pfile檔案create pfile ='d:\initora11g.ora' from spfile;

修改生成的pfile中 memory_target = pga_aggregate_target + sga_max_size,然後根據修改之後的pfile生成 spfile

create spfile from pfile = 'd:\initora11g.ora';startup 到此問題就解決了

檢視設定之後的引數show parameter target;

另外如果報錯: ORA-00845: MEMORY_TARGET not supported on this system則說明是記憶體超出伺服器實體記憶體數量,修改之後再生成spfile即可 注:spfile 是二進位制檔案,不能編輯 pfile 是文字檔案,可以手動編輯 因此先生成pfile,編輯修改之後再生成系統啟動時預設的spfile