資料庫間歇性失敗 OERR ORA 12519

2021-09-27 11:42:57 字數 2601 閱讀 9132

ora-12519: tns: 沒有找到適用的服務處理

== 客戶端連線間歇性失敗,報錯ora-12519 ==

oracle客戶端與伺服器之間正常連線,但是會偶爾連線失敗,在重新連線之後又能連上,也不是網路問題,總結為:連線間歇性失敗。開始的時候考慮到oracle或者客戶端由沒有休眠這種說法,查閱了相關的資料,發現乙個問題。

慶幸程式將oracle資料庫原始的錯誤輸出』ora-12519:』

資料庫連線池初始值設定少了,不夠用,導致數鏈結在請求的時候不夠用,但是鏈結又是正常的,所有第乙個步驟就是將鏈結池的引數引數放大。使用常用的sql工具即可,我自己使用的sqlplus。

我自己的是在程式等待連線池分配連線時就已經超過了程式內部設定的等待時間,所以需要擴充套件連線池的大小,實際與資料庫伺服器執行效率關係不大。(跟程式本身有關)

可以先確認是不是真的是連線數不夠用,可以使用一下語句,查詢資料庫自啟動以來的最大併發數量:

--查詢資料庫自啟動以來的最大併發數量

select

*from v$license;

-- 對比show parameter processes 中查詢到的processes引數

查詢自己資料庫當前的鏈結池發小;

-- 檢視資料庫系統引數

show parameter processes

-- 下圖中的processes引數即為當前資料庫的最大連線數

從上圖中可以看出,我本地伺服器的資料庫連線池的大小為150,我需要將其擴大一些。

修改資料庫連線池的大小;

-- 將資料庫連線池的電銷秀愛為300

alter system set processes=

300 scope=spfile;

修改字後還需要使用show parameter processes 語句檢視一下是否修改,因為processes引數位靜態引數,需要在重啟資料庫之後才會生效。

oracle spfile就是動態引數檔案,裡面設定了oracle 的各種引數。所謂的動態,

就是說你可以在不關閉資料庫的情況下,更改資料庫引數,記錄在spfile裡面。更改引數的時候,有4種scope選項,scope就是範圍。

引數型別

scope=spfile

僅僅更改spfile裡面的記載,不更改記憶體,也就是不立即生效,而是等下次資料庫啟動生效。

scope=memory

僅僅更改記憶體,不改spfile。也就是下次啟動就失效了。有一些引數只允許用這種方法更改。

scope=both

記憶體和spfile都更改,不指定scope引數,等同於scope=both。

重啟資料庫

-- 正常模式關閉資料庫

shutdown normal

sql>

shutdown abort

oracle 例程已經關閉。

sql> startup nomount

oracle 例程已經啟動。

等待正常關閉之後再正常開啟資料庫。

資料庫連線池的工作原理:

連線池基本的思想是在系統初始化的時候,將資料庫連線作為物件儲存在記憶體中,當使用者需要訪問資料庫時,並非建立乙個新的連線,而是從連線池中取出乙個已建立的空閒連線物件。使用完畢後,使用者也並非將連線關閉,而是將連線放回連線池中,以供下乙個請求訪問使用。而連線的建立、斷開都由連線池自身來管理。同時,還可以通過設定連線池的引數來控制連線池中的初始連線數、連線的上下限數以及每個連線的最大使用次數、最大空閒時間等等。也可以通過其自身的管理機制來監視資料庫連線的數量、使用情況等。

資料庫連線池的最適合的大小:

實際情況檢視該文,該文描述了連線池大小的實際測試情況。但是與本文不衝突,「最優的資料庫連線池大小」旨在解決高併發時多程序之間共享時間片與連線等待之間做乙個效率取捨。

連線數 = ((核心數 * 2) + 有效磁碟數)

按照這個公式,如果說你的伺服器 cpu 是 4核 i7 的,連線池大小應該為 ((4 * 2) + 1) = 9。

按這個公式,你的4核i7資料庫伺服器的連線池大小應該為((4 * 2) + 1) = 9。取個整就算是是10吧。是不是覺得太小了?跑個效能測試試一下,我們保證它能輕鬆搞定3000使用者以6000tps的速率併發執行簡單查詢的場景。如果連線池大小超過10,你會看到響應時長開始增加,tps開始下降。

《db & 連線池的設定 》

《連線池的最優設定》

本質上一種是解決高併發的時的小路問題,乙個是解決連線池現有連線數不夠用的問題,不衝突。我自己的文章是在程式等待連線池分配連線時就已經超過了程式內部設定的等待時間,所以需要擴充套件連線池的大小,實際與執行效率關係不大。(跟程式本身有關)

oracle資料庫啟動和關閉的幾種方式區別:oracle資料庫啟動和關閉的幾種方式區別

資料庫建立失敗

目錄 環境症狀 問題原因 解決方案 環境系統平台 linux x86 64 red hat enterprise linux 7 版本 4.1.1 症狀使用者在建立資料庫時,建立失敗報錯 error source database template1 is being accessed by oth...

centos mysql 資料庫連線失敗

最近在用阿里雲,通過本地始終沒有辦法連線到雲裡樁的centos上面的mysql 3306埠,網上的方法很全但是也沒有解決問題,特把解決的方法總結如下,方便後面使用 一 關閉防火牆 service iptables stop 看看3306埠是不是能telnet telnet 位址 3306 二 如果不...

MySQL建立資料庫失敗

如果使用root賬號登入到資料庫create database時提錯錯誤 mysql 1006 can t create database errno 13 或mysql 1006 can t create database errno 28 一般是mysql使用者沒有目錄許可權的問題。先用linu...