Windows平臺下不能建立資料庫連線出錯分析 (1)
Windows平臺下不能建立資料庫連線出錯分析
本文可以任意轉載,轉載時請務必以超連結形式標明文章原始出處和作者資訊及本宣告
http://blog.itpub.net/post/11/5157
1. 簡介
本文簡要介紹了windows平臺下客戶端連線出錯(比如發生TNS-12500錯誤等)的一些可能原因以及相關的解決辦法。
. 實驗
平臺:
Windows 2003 Enterprise Edition 32bit
4G記憶體
資料庫版本:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod
PL/SQL Release 10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for 32-bit Windows: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 – Production
A. processes引數
D:>sqlplus / as sysdba
SQL*Plus: Release 10.1.0.2.0 - Production on 星期一 11月 15 13:19:54 2004
Copyright (c) 1982, 2004, Oracle. All rights reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
-- 如果processes設定太低會由於不能啟動後臺程式而使資料庫啟動失敗
SQL> alter system set processes=10 scope=spfile;
系統已更改。
SQL> shutdown abort
ORACLE 例程已經關閉。
SQL> startup
ORA-00444: background process "CJQ0" failed while starting
ORA-00020: maximum number of processes () exceeded
SQL> shutdown abort
ORACLE 例程已經關閉。
-- 設定為20重新生成spfile,重啟資料庫
SQL> create spfile from pfile='c:init.ora';
檔案已建立。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 1862270976 bytes
Fixed Size 791640 bytes
Variable Size 543419304 bytes
Database Buffers 1317011456 bytes
Redo Buffers 1048576 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL>
-- 執行資料庫連線測試指令碼(後臺建立200個連線)
-- 指令碼見:
-- 前臺連線出錯
-- 伺服器本地
D:>sqlplus test/test
SQL*Plus: Release 10.1.0.2.0 - Production on 星期一 11月 15 14:31:14 2004
Copyright (c) 1982, 2004, Oracle. All rights reserved.
ERROR:
ORA-00020: 超出最大程式數 (%s)
請輸入使用者名稱:
-- 遠端客戶端出錯資訊
sql> conn test/test@test10gnew
ERROR:
ORA-12516: TNS: 監聽程式無法找到匹配協議棧的可用控制程式碼
-- 客戶端與伺服器端出錯資訊截然不同,小心給錯誤資訊誤導
B. TNS-12540與windows平臺下Oracle的記憶體管理
注:假定不對Oracle使用記憶體進行擴充套件/客戶端使用專用伺服器模式連線
眾所周知, 對於32位的os,每個程式可以訪問的最大記憶體空間是2的32次方,即4G.每個程式的記憶體由user space和kernal space兩個元件組成.user space可以使用的記憶體空間最大為2g。對於oracle,可使用的記憶體空間大概是1.7G左右。要注意的是:專用會話(以專用資料庫連線建立的會話)的記憶體在sga之外的記憶體空間分配,但仍然在oracle.exe程式之內。如果sga分配過大的話,雖然連線數遠遠還沒有達到初始化引數processes指定的數值,但客戶端仍然不能連線到資料庫。看如下實驗:
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
processes integer 1000
SQL> show sga
Total System Global Area 1862270976 bytes
Fixed Size 791640 bytes
Variable Size 543419304 bytes
Database Buffers 1317011456 bytes
Redo Buffers 1048576 bytes
SQL>
-- 執行連線測試指令碼
-- 檢視session的數目
sql> select server,count(*) from v$session group by server;
SERVER COUNT(*)
--------- ----------
DEDICATED 76
-- 檢視pga統計資訊
> set heading off
> set linesize 200
> column name format a50
> column unit format a10
> SELECT * FROM V$PGASTAT;
aggregate PGA target parameter 2097152000 bytes
aggregate PGA auto target 1864074240 bytes
global memory bound 104857600 bytes
total PGA inuse 24580096 bytes
total PGA allocated 69429248 bytes
maximum PGA allocated 78424064 bytes
total freeable PGA memory 0 bytes
PGA memory freed back to OS 0 bytes
total PGA used for auto workareas 0 bytes
maximum PGA used for auto workareas 0 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 0 bytes
over allocation count 0
bytes processed 3193856 bytes
extra bytes read/written 0 bytes
cache hit percentage 100 percent
已選擇16行。
-- 伺服器端連線出錯
SQL> conn test/test
ERROR:
ORA-12560: TNS: 協議介面卡錯誤
-- 客戶端連線出錯
sql> conn test/test@test10gnew
ERROR:
ORA-12500: TNS: 監聽程式無法啟動專用伺服器程式
警告: 您不再連線到 ORACLE。
-- 猜想當前oracle.exe所能使用的記憶體大小為1862270976(sga)+ 78424064(pga)
> select 1862270976+ 78424064 from dual;
1862270976+78424064
-------------------
1940695040
> select 1940695040/1024/1024/1024 from dual;
1940695040/1024/1024/1024
-------------------------
1.8074131
-- 大約是1.8G.
-- 為何不是2g而是1.7g左右?可能是因為餘下的0.2-0.3g記憶體由於操作過程中建立連線/斷開連線造成內部記憶體碎片而不能使用.
-- 在本例中,進一步實驗可以獲得sga_max_size的最大大小
SQL> alter system set sga_max_size=1776m scope=spfile;
系統已更改。
SQL> shutdown abort
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 1862270976 bytes
Fixed Size 791640 bytes
Variable Size 543419304 bytes
Database Buffers 1317011456 bytes
Redo Buffers 1048576 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> alter system set sga_max_size=1792m scope=spfile;
系統已更改。
SQL> shutdown abort
ORACLE 例程已經關閉。
SQL> startup
ORA-27102: out of memory
OSD-00022: 附加錯誤資訊
O/S-Error: (OS 8) 儲存空間不足,無法處理此命令。
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-21635/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- asp網站提示資料庫連線出錯網站資料庫
- 不能連線資料庫如何解決資料庫
- 資料庫連線分析(1)-從JDBC到MyBatis資料庫JDBCMyBatis
- 開啟網頁顯示資料庫連線出錯網頁資料庫
- 如何處理WordPress網站提示“建立資料庫連線時出錯”或“Error establishing a database connection”錯誤網站資料庫ErrorDatabase
- 連線oracle資料庫時,報錯:{dataSource-1} init errorOracle資料庫Error
- 怎麼建立網站連線資料庫網站資料庫
- Dedecms錯誤警告:連線資料庫失敗,出錯怎麼解決?資料庫
- SQLYOG連線資料庫時報錯1251SQL資料庫
- 網站連線資料庫配置錯誤網站資料庫
- 網站提示資料庫連線錯誤網站資料庫
- Spring框架中mysql資料庫連線池bean設定出錯Spring框架MySql資料庫Bean
- 財務資料分析不可錯過的大資料分析平臺大資料
- 阿里雲資料庫連線資料庫錯誤:如何解決?阿里資料庫
- 使用Eclipse連線SAP雲平臺上的HANA資料庫例項Eclipse資料庫
- Error infos:DedeCms錯誤警告:連線資料庫失敗,可能資料庫密碼不對或資料庫伺服器出錯!Error資料庫密碼伺服器
- Error infos: DedeCms錯誤警告:連線資料庫失敗,可能資料庫密碼不對或資料庫伺服器出錯!Error資料庫密碼伺服器
- 達夢資料庫關於[-70028]:建立SOCKET連線失敗的錯誤原因資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 資料庫本地,sqlplus和資料庫工具連線資料庫正常,但是JDBC連線資料庫出現了一直提示使用者名稱/密碼錯誤資料庫SQLJDBC密碼
- DedeCms錯誤警告:連線資料庫失敗資料庫
- PbootCMS錯誤提示:資料庫連線失敗boot資料庫
- SQLAlchemy - 資料庫的連線、建立會話與模型SQL資料庫會話模型
- 連線資料庫資料庫
- express入門04 資料庫連線 表結構建立 模型建立Express資料庫模型
- 資料庫平臺資料庫
- 用c#建立與資料庫的連線 c#連sqlserverC#資料庫SQLServer
- Dedecms錯誤警告:連線資料庫失敗,可能資料庫密碼不對或資料庫伺服器出錯怎麼解決?資料庫密碼伺服器
- springboot+atomikos+druid 資料庫連線失效分析Spring BootUI資料庫
- Ubuntu網站開啟時提示建立資料庫連線錯誤怎麼解決Ubuntu網站資料庫
- 1電商平臺零售資料分析
- 網站資料庫連線錯誤怎麼辦?網站資料庫
- DBA福利-資料庫線上實訓平臺資料庫
- Go實戰準備工作---建立資料庫連線池Go資料庫
- Windows平臺下opatch apply報錯:OUI-67073WindowsAPPUI
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 網路安全:網站伺服器建立資料庫連線時出錯的解決辦法…[通俗易懂]網站伺服器資料庫
- 資料庫不能直連怎麼造資料呢資料庫
- 執行wget命令,出錯:無法建立 SSL 連線。wget