无法连接更多的用户!!!

qx0609 2005-11-02 12:07:28
我的服务器为ibm s85 操作系统为aix 4.3.3 数据库为oracle 8.0.6 内存12G;
每用户最大进程为1024,oracle process=800.
当用户达到350以上时,客户端报ora-12500错误!
怀疑是内存分配的问题,有无从下手,请高手指教,分不是问题!!!
...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qx0609 2005-11-02
  • 打赏
  • 举报
回复
能说具体点吗.查什么日志?
bobfang 2005-11-02
  • 打赏
  • 举报
回复
需要查看服务器的相关日志,看看是什么原因不能启动一个dedicated server process
qx0609 2005-11-02
  • 打赏
  • 举报
回复
还有办法吗?
w_tsinghua 2005-11-02
  • 打赏
  • 举报
回复
12500, 00000, "TNS:listener failed to start a dedicated server process"
// *Cause: The process of starting up a dedicated server process failed.
// The executable could not be found or the environment may be set up
// incorrectly.
// *Action: Turn on tracing at the ADMIN level and reexecute the operation.
// Verify that the ORACLE Server executable is present and has execute
// permissions enabled. Ensure that the ORACLE environment is specified
// correctly in LISTENER.ORA. The Oracle Protocol Adapter that is being
// called may not be installed on the local hard drive. Please check that
// the correct Protocol Adapter are successfully linked.
rolandzhang 2005-11-02
  • 打赏
  • 举报
回复
oracle建议SGA最大为物理内存的一半。
v$license看看许可。把连接数改成最大
你应该是dedicate模式吧,不行改个模式试试
doulikeme 2005-11-02
  • 打赏
  • 举报
回复
TNS-00001 INTCTL: error while getting command line from the terminal

Cause: Improper standard input connection from the terminal.

Action: Normally not visible to the user. Start the INTCTL program again. If the error persists, contact Oracle Support Services.
qx0609 2005-11-02
  • 打赏
  • 举报
回复
请大家帮帮忙,我很着急!!!
daydayupliq 2005-11-02
  • 打赏
  • 举报
回复
BTW:
os 核心参数:每个用户最多起多少进程等
oracle: processes
btw:
连接进不来原因很多,需要仔细判断
数据库什么版本?是不是sga/pga/sort给的不合理等等

出现这样的现象,把报错信息、alert/trace文件贴出来先

BTW2: AIX上注意文件系统缓存的概念:
调整AIX上的文件缓存
在AIX上,可以通过vmtune命令中的MINPERM和MAXPERM参数,调整系统文件缓存来控制内存交换操作,MINPERM和MAXPERM参数的调整应遵照以下的原则:

当内存中的文件缓存页在MINPERM以下时,内存页交换算法同时交换文件缓存页和程序页(computational pages)
当内存中的文件缓存页在MAXPERM以上时,内存页交换算法只交换文件缓存页。
当内存中的文件缓存页在MINPERM和MAXPERM之间时,内存页交换算法通常只交换文件缓存页,但如果文件缓存页的交换率大于程序页时,程序页也同样被交换。
MINPERM和MAXPERM参数的缺省值
MINPERM = ((number of memory page) - 1024)*0.2
MAXPERM = ((number of memory page) - 1024)*0.8
可以用以下命令将MINPERM设为5%的内存页,而MAXPERM设为20%的内存页。

# vmtune -p 5 -P 20

缺省值分别为20%和80%。

在Oracle数据库应用的环境下,可以将MINPERM和MAXPERM分别设为5%和20%甚至更小,从而使内存更多地被用于Oracle的SGA而不是系统的文件缓存。

BTW3:
分析清楚了问题,再加以调整,不可想到那,就随便动!!
daydayupliq 2005-11-02
  • 打赏
  • 举报
回复
TNS-12500解决过程(zt)

一 环境:
1 平台: HP,2G内存 windows 2k advServer sp3 + oracle 817 独占模式

2 内存分配相关参数
..processes................=.350
..shared_pool_size.........=.314572800
..large_pool_size..........=.614400
..java_pool_size...........=.0
..db_block_buffers.........=.67372
..db_block_size............=.16384
..log_buffer...............=.163840
..log_checkpoint_interval..=.10000
..sort_area_size...........=.52428800
..sort_area_retained_size..=.52428800
..open_cursors.............=.300
..job_queue_processes......=.4
..job_queue_interval.......=.10
..max_dump_file_size.......=.10240

3 最大并发用户数:100个左右

二 故障现象:
....当用户数达到一定的数量时(30多)客户端连接服务器时报TNS-12500错误,此时已连接到服务器的用户能正常访问数据库。
....首先查看警告日志文件,未见到明显错误信息。
....查看listner.log文件,发现如下信息(很多个类似的错误记录,摘两个上来)
.........................
02-JUL-2003 10:30:09 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*******)(USER=*****))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*******)(PORT=1136)) * establish * ORCL * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
.TNS-12540: TNS:internal limit restriction exceeded
..TNS-12560: TNSrotocol adapter error
...TNS-00510: Internal limit restriction exceeded
....32-bit Windows Error: 8: Exec format error
02-JUL-2003 10:30:10 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*****)(USER=***))) * (ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=1203)) * establish * ORCL * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
.TNS-12540: TNS:internal limit restriction exceeded
..TNS-12560: TNSrotocol adapter error
...TNS-00510: Internal limit restriction exceeded
....32-bit Windows Error: 8: Exec format error
.....................

此时,原来已连接上服务器的用户还能正常使用。查看此时session达到50多个。
....重启oracle服务后,能连接新的用户数,但当并发用户数达到15个以上时,再次报同样的错误

三 原因分析:
....系统资源耗竭,意味着系统分配给oracle的内存用尽了。虽然我们有2G的物理内存,但正常情况下系统只能给oracle分配1.3G的内存,这1.3G的内存中,包括了SGA、PGA等oracle需要使用的全部内存。在独占模式下,每一个用户将单独分配50M(Sort_area_size)左右的内存。在本例中,UGA分配了约2G,按每一个用户分配50M内存计算,连接数达到15个时,总分配内存已达到2G,将不能再增加新的连接数。如果要解决这个问题,在不做大的调整的前提下,要么减小SGA大小,要么减小为每一个会话分配的内存大小,以能连接更多的用户。

四 解决过程:
....查阅了oracle文档,文档里提出来了几个解决的办法:
1 重置init.ora参数文件,调小以下四个参数的值:
....sort_area_size
....hash_area_size
....bitmap_merge_area_size
....create_bitmap_area_seze
....open_cursone

2 减小oracle Job队列数量(job_queue_processes)和并发队列数(parallel_max_servers)
3 重置并减小会话/线程使用的堆栈大小
4 将oracle改为mts模式


....结合本实例的具体情况,决定调整的主要目标为减小用户的PGA大小。
....构成PGA的主要内容有sort_area_size, hash_area_size, open_cursor, 以及oracle 堆栈和TNS 堆栈。在本实例中,排序区为64K,hash区为128K(缺少值),打开的游标数与应用有关,不能随便减小了,然而oracle堆栈和TNS堆栈都是1M,却有较大的减小的余地。因此,调整的目标定为减小这两个堆栈的大小。
....使用orastack 命令来减小这两个堆栈的大小:
D:\oracle\ora81\bin>orastack oracle.exe 500000
Couldn't open file with CreateFile()
GetLastError() == 32

....停止oracle服务和TNS服务,再运行以上命令
D:\oracle\ora81\bin>orastack oracle.exe 500000

Dump of file oracle.exe

Current Reserved Memory per Thread = 1048576
Current Committed Memory per Thread = 4096

New Reserved Memory per Thread = 500000

D:\oracle\ora81\bin>orastack tnslsnr.exe 500000

Dump of file tnslsnr.exe

Current Reserved Memory per Thread = 1048576
Current Committed Memory per Thread = 4096

New Reserved Memory per Thread = 500000

重新启动oracle服务和TNS服务,打开数据库,用户连接到服务器,经测试,用户数到50以上时数据库仍然运行正常,解决了本实例存在的问题。

五 小结
....事实上,正如oracle文档所指出的那样,要增加用户连接数的途径很多,除了减小用户堆栈之外,还可以减小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用内存。在本安全应用中,宜将两者(减小用户堆栈与增加oracle可用内存)结合起来使用,以提高数据库性能。但是,这种方式下,同样不可能无限制地增加用户连接数。要想使用户连接数达到更大,则应使用MTS方式。
qx0609 2005-11-02
  • 打赏
  • 举报
回复
急!!!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧