windows无法连接mysql数据库_Windows平台下不能建立数据库连接出错分析 (1)

Windows平台下不能建立数据库连接出错分析

本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明

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

CORE10.1.0.2.0Production

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 Size791640 bytes

Variable Size543419304 bytes

Database Buffers1317011456 bytes

Redo Buffers1048576 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

NAMETYPEVALUE

------------------------------------ ----------- ------------------------------

aq_tm_processesinteger0

db_writer_processesinteger1

gcs_server_processesinteger0

job_queue_processesinteger10

log_archive_max_processesinteger2

processesinteger1000

SQL> show sga

Total System Global Area 1862270976 bytes

Fixed Size791640 bytes

Variable Size543419304 bytes

Database Buffers1317011456 bytes

Redo Buffers1048576 bytes

SQL>

--运行连接测试脚本

--查看session的数目

sql> select server,count(*) from v$session group by server;

SERVERCOUNT(*)

--------- ----------

DEDICATED76

--查看pga统计信息

> set heading off

> set linesize 200

> column name format a50

> column unit format a10

> SELECT * FROM V$PGASTAT;

aggregate PGA target parameter2097152000 bytes

aggregate PGA auto target1864074240 bytes

global memory bound104857600 bytes

total PGA inuse24580096 bytes

total PGA allocated69429248 bytes

maximum PGA allocated78424064 bytes

total freeable PGA memory0 bytes

PGA memory freed back to OS0 bytes

total PGA used for auto workareas0 bytes

maximum PGA used for auto workareas0 bytes

total PGA used for manual workareas0 bytes

maximum PGA used for manual workareas0 bytes

over allocation count0

bytes processed3193856 bytes

extra bytes read/written0 bytes

cache hit percentage100 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 Size791640 bytes

Variable Size543419304 bytes

Database Buffers1317011456 bytes

Redo Buffers1048576 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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值