ORA-12500: TNS:listener failed to start a dedicated server process,救救我

bachelor 2002-07-18 10:10:38
我的数据库服务器(oracle805 + NT)运行一段时间后就会出现以上错误,服务器重起后就可以了。
以下是oracle的解释。
ORA-12500: 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. If error persists, contact Worldwide Customer Support

ORA-12500: "TNS:listener failed to start a dedicated server process"
Cause: The listener was unable to start a process connecting the user to the database server.
Actions:
1、Verify that the SID_LIST section of the LISTENER.ORA file and the system identifier (SID) in the CONNECT DATA section of the TNSNAMES.ORA file are correct.
2、Verify that the user has adequate privileges to access the database.
以下是我的监听文件
# this is listener.ora
# Generated by Oracle Net8 Assistant
LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = netserver01)(PORT = 1521))
(ADDRESS = (PROTOCOL = NMP)(SERVER = NETSERVER01)(PIPE = ORAPIPE))
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = extproc)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = AFIS)
(ORACLE_HOME = E:\ORANT)
(SID_NAME = AFIS)
(PRESPAWN_MAX = 4)
(PRESPAWN_LIST =
(PRESPAWN_DESC =
(PROTOCOL = TCP)
(POOL_SIZE = 2)
(TIMEOUT = 2)
)
)
)
)
以下是我的本地文件
# this is tnsnames.ora
# Generated by Oracle Net8 Assistant
AFISDATA.WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = NETSERVER01)(PORT = 1521))
(CONNECT_DATA = (SID = AFIS))
)
都没有错,我按oracle的提示检查了一下,发现他的解释简直是什么都没有说。
---------------
注,服务器是双网卡,所以有两个ip地址。我采用的是预分配的专用进程,没有采用多线程,客户端也不多,十多个,都采用有错误断开后就重新自动连接机制。
关键是我想不通的是,数据库服务器重起后就可以了,监听器重起都不可以,原因到底是什么。

...全文
903 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
bachelor 2002-07-22
  • 打赏
  • 举报
回复
用双网卡是必须的,因为有两个网段,一个是内部网(192段),一个是广域网(10段),监听机器名还不行,广域网里隔着很多不同的网关,用机器名是监听不了的。
POOL_SIZE = 2 是预分配专用服务器进程自动配置的,它只是一个监听池,而且好象是必须的。会与它有关吗?不过我可以试试。
这个错误已经有好几天又没有出了。我正在等它重出呢。
本机connect system/manager@net_service_name也不能连接的。
client : tnsping net_service_name的我没有试,现在不出错了,我还没有环境,我得等下一次错误才能试。
我也认为这个错误最大的可能就是监听错误,不是监听的ip出的问题,而是预分配专用进程的问题,再出错的话,我就改回普通的专用进程的分配,不用预分配专用进程。
biti_rainy 2002-07-22
  • 打赏
  • 举报
回复
不同的情况具体处理了
因为我们的是三层结构
几乎不存在用户直接连接数据库的情况
所以当然没有关系了

penitent 2002-07-22
  • 打赏
  • 举报
回复
to biti_rainy(biti_rainy);
就我的观点来说,我觉得bachelor(鹰飞九月) 的配置法还是可取的,如果照你的办法来,那不是每个client都得修改host文件(当然配置dns服务器也可以)。
我觉得,client的工作还是越简单越好。
biti_rainy 2002-07-22
  • 打赏
  • 举报
回复
不是解决你的问题,针对另外一个问题的角度来谈论
我以前也遇见过外网内网的问题
在listener中host设置成一个随意的名字,假定 eee
然后在内网的client上把eee解析成内网ip
外网上把eee解析成外网ip
本机上eee当然也解析成本机地址
就这样就可以解决这个问题

unix下我就不说了
windows下是在下面文件中修改

C:\WINNT\system32\drivers\etc\hosts
biti_rainy 2002-07-22
  • 打赏
  • 举报
回复
不是针对解决你的饿问题,但是从另一个角度说一个问题

关于内部网和广鱼网的问题
不是一定需要双网卡的
在listener上使用任意一个名字
内部网的client能把该名字解析成内部ip (在hosts中设置)
在外部网上的client把该名字解析成外部ip(在hosts中设置)
这样就可以了

因为以前我就遇见过这样的内网外网的我问题问题

(hosts在unix下我就不说了,windows下是C:\WINNT\system32\drivers\etc\hosts)
penitent 2002-07-22
  • 打赏
  • 举报
回复
呵呵,可能我说的有点绝对,有些常见的错误,还是能排除的。
但我最烦的是oracle的这么一句话
contact Worldwide Customer Support
谁有机会去找他,他以为人人都用的是有许可的呀。
所以,象oracle的这种错误,我能避开的就避开
penitent 2002-07-22
  • 打赏
  • 举报
回复
你不用试了
你只要用预分配专用进程分配
POOL_SIZE = 2是不能去掉的,只能是改变大小,这是预分配专用进程的cache池。否则的话,你连监听器启动都会出错。
我早说过,你还是不用这种方式算了,有很多错误,连oracle自己的维护人员都有可能解决不了,也有很多是oracle的bug(如00600错误)
我们只能是这样,如果有错误的可能,只要改变一种方式,能避免这种错误,也是一种成功,不要在一棵树上吊死。
以上只是我个人的观点,大家可以不必赞同。
bachelor 2002-07-22
  • 打赏
  • 举报
回复
用双网卡是必须的,因为有两个网段,一个是内部网(192段),一个是广域网(10段),监听机器名还不行,广域网里隔着很多不同的网关,用机器名是监听不了的。
POOL_SIZE = 2 是预分配专用服务器进程自动配置的,它只是一个监听池,而且好象是必须的。会与它有关吗?不过我可以试试。
这个错误已经有好几天又没有出了。我正在等它重出呢。
本机connect system/manager@net_service_name也不能连接的。
client : tnsping net_service_name的我没有试,现在不出错了,我还没有环境,我得等下一次错误才能试。
我也认为这个错误最大的可能就是监听错误,不是监听的ip出的问题,而是预分配专用进程的问题,再出错的话,我就改回普通的专用进程的分配,不用预分配专用进程。
ycdch 2002-07-19
  • 打赏
  • 举报
回复
这个问题我也遇到过:
(Win2K adv. + Ora8.1.7 )
在控制面板中"服务"窗体中 修改服务:OracleServiceXXX的属性!
把“登录”中的帐号改成:“本地帐号”!

(AIX4.3.3 + Ora8.1.7)
>smitty user

Hope it helps.

ycdch 2002-07-19
  • 打赏
  • 举报
回复
这个问题我也遇到过:
(Win2K adv. + Ora8.1.7 )
在控制面板中"服务"窗体中 修改服务:OracleServiceXXX的属性!
把“登录”中的帐号改成:“本地帐号”!

(AIX4.3.3 + Ora8.1.7)
>simmty user

Hope it helps.

bachelor 2002-07-19
  • 打赏
  • 举报
回复
to xinpingf(白开心),你觉得是这样吗?
我的init文件中没有你说的那个,这是我的init文件,你看看
#
# $Header: init.ora 05-jun-97.14:56:46 hpiao Exp $
#
# Copyright (c) 1991, 1997 by Oracle Corporation
#
##############################################################################
# Example INIT.ORA file
#
# This file is provided by Oracle Corporation to help you customize
# your RDBMS installation for your site. Important system parameters
# are discussed, and example settings given.
#
# Some parameter settings are generic to any size installation.
# For parameters that require different values in different size
# installations, three scenarios have been provided: SMALL, MEDIUM
# and LARGE. Any parameter that needs to be tuned according to
# installation size will have three settings, each one commented
# according to installation size.
#
# Use the following table to approximate the SGA size needed for the
# three scenarious provided in this file:
#
# -------Installation/Database Size------
# SMALL MEDIUM LARGE
# Block 2K 4500K 6800K 17000K
# Size 4K 5500K 8800K 21000K
#
# To set up a database that multiple instances will be using, place
# all instance-specific parameters in one file, and then have all
# of these files point to a master file using the IFILE command.
# This way, when you change a public
# parameter, it will automatically change on all instances. This is
# necessary, since all instances must run with the same value for many
# parameters. For example, if you choose to use private rollback segments,
# these must be specified in different files, but since all gc_*
# parameters must be the same on all instances, they should be in one file.
#
# INSTRUCTIONS: Edit this file and the other INIT files it calls for
# your site, either by using the values provided here or by providing
# your own. Then place an IFILE= line into each instance-specific
# INIT file that points at this file.
###############################################################################

# replace "oracle" with your database name
db_name = afis

db_files = 1000 # INITIAL
# db_files = 80 # SMALL
# db_files = 400 # MEDIUM
# db_files = 1000 # LARGE

control_files = ("e:\orant\database\ctl1afis.ora", "e:\orant\database\ctl2afis.ora","e:\orant\database\ctl3afis.ora")

db_file_multiblock_read_count = 32 # INITIAL
# db_file_multiblock_read_count = 8 # SMALL
# db_file_multiblock_read_count = 16 # MEDIUM
# db_file_multiblock_read_count = 32 # LARGE

db_block_buffers = 32000 # INITIAL
# db_block_buffers = 100 # SMALL
# db_block_buffers = 550 # MEDIUM
# db_block_buffers = 3200 # LARGE

large_pool_size= 10485760
hash_area_size = 20971520
shared_pool_size = 104857600 # INITIAL
# shared_pool_size = 3500000 # SMALL
# shared_pool_size = 5000000 # MEDIUM
# shared_pool_size = 9000000 # LARGE

log_checkpoint_interval = 8192
log_checkpoint_timeout = 1800

processes = 300 # INITIAL
# processes = 50 # SMALL
# processes = 100 # MEDIUM
# processes = 200 # LARGE
dml_locks = 300

parallel_min_servers = 2
parallel_max_servers = 8 # SMALL
# parallel_max_servers = 4 x (number of CPUs) # MEDIUM
# parallel_max_servers = 4 x (number of CPUs) # LARGE

log_buffer = 3276800 # INITIAL
# log_buffer = 8192 # SMALL
# log_buffer = 32768 # MEDIUM
# log_buffer = 163840 # LARGE

sequence_cache_entries = 100 # INITIAL
# sequence_cache_entries = 10 # SMALL
# sequence_cache_entries = 30 # MEDIUM
# sequence_cache_entries = 100 # LARGE

sequence_cache_hash_buckets = 89 # INITIAL
# sequence_cache_hash_buckets = 10 # SMALL
# sequence_cache_hash_buckets = 23 # MEDIUM
# sequence_cache_hash_buckets = 89 # LARGE

# audit_trail = true # if you want auditing
# timed_statistics = true # if you want timed statistics
max_dump_file_size = 10240 # limit trace file size to 5 Meg each

# Uncommenting the line below will cause automatic archiving if archiving has
# been enabled using ALTER DATABASE ARCHIVELOG.
Log_Archive_Start=true
Log_Archive_dest=e:\Archive
Log_Archive_Format=Afis%S%T.ARC

# If using private rollback segments, place lines of the following
# form in each of your instance-specific init.ora files:
RollBack_segments=(RBS01,RBS02,RBS03,RBS04,RBS05,RBS06,RBS07,RBS08,RBS09,RBS10,RBS11,RBS12,RBS13,RBS14,RBS15,RBS16,RBS17,RBS18,RBS19,RBS20,RBS21,RBS22,RBS23,RBS24)

# If using public rollback segments, define how many
# rollback segments each instance will pick up, using the formula
# # of rollback segments = transactions / transactions_per_rollback_segment
# In this example each instance will grab 40/10 = 4:
# transactions = 40
transactions_per_rollback_segment = 16

# Global Naming -- enforce that a dblink has same name as the db it connects to
global_names = FALSE

# Edit and uncomment the following line to provide the suffix that will be
# appended to the db_name parameter (separated with a dot) and stored as the
# global database name when a database is created. If your site uses
# Internet Domain names for e-mail, then the part of your e-mail address after
# the '@' is a good candidate for this parameter value.

# db_domain = us.acme.com # global database name is db_name.db_domain

# Uncomment the following line if you wish to enable the Oracle Trace product
# to trace server activity. This enables scheduling of server collections
# from the Oracle Enterprise Manager Console.
# Also, if the oracle_trace_collection_name parameter is non-null,
# every session will write to the named collection, as well as enabling you
# to schedule future collections from the console.

# Sql_trace = true
# oracle_trace_enable = TRUE
# Timed_statistics = true

# define directories to store trace and alert files
background_dump_dest = e:\orant\rdbms80\trace
user_dump_dest = e:\orant\rdbms80\trace

db_block_size = 8192
compatible = 8.0.5.0.0
sort_area_size = 655360
remote_login_passwordfile = shared

text_enable = TRUE

# The following parameters are needed for the Advanced Replication Option

job_queue_processes = 10
job_queue_interval = 10
#job_queue_keep_connections = false

distributed_lock_timeout = 60
distributed_transactions = 200

open_links = 4

biti_rainy 2002-07-19
  • 打赏
  • 举报
回复
listener中去掉 POOL_SIZE = 2 等等对于你来说没有实际意义的设置

我还没有明白为什么要用双网卡
不同网段使用同一个数据库,没有理由要两个ip,listenr中host就一个ip就可以了

在本机上走 listener能登陆么?
connect system/manager@net_service_name
如果本机也能登陆,那就是listener的配置和网卡有地方出问题
导致client无法访问

client : tnsping net_service_name , 正常么?



最后,使用一块网卡,重新配置listener,试一下
bachelor 2002-07-19
  • 打赏
  • 举报
回复
to biti_rainy(biti_rainy) :
看样子我还是交代的不够详细。
我的数据库是在hp 6000上,NT操作系统,1G内存,RAID5的磁盘阵列
在本机通过connect system/manager能登录
但在客户端就不可以,客户端以前的连接照旧能用,只是不能在开新的连接。
select * from v$session的记录不超过50。远远没有达到init文件中的
processes值
还有,我的机器是双网卡,以上的监听在拷贝的时候有点失误,有一部分是这样。
LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.40.5.117)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.61.181)(PORT = 1521))
(ADDRESS = (PROTOCOL = NMP)(SERVER = NETSERVER)(PIPE = ORAPIPE))
)
我检查了一下以上资料,其他的都是正确的。
因为我的机器要在两个网段中使用。
-----------------------------------------
我奇怪的是,我重起监听器都不可以,非要重起数据库或机器
要么,我只好配置成多线程,或是不用预分配的专用服务器。
如果要重起数据库很麻烦的,我想找出原因所在,我不可能天天看着数据库的。




biti_rainy 2002-07-19
  • 打赏
  • 举报
回复
根据你的init文件
你的SGA大约使用了400M的内存

sort_area_size大约是640k(这是每个session所用的)

请检测这样几个问题:
1:你的机器的内存是多少? 1G?
2: 当出现这种问题的时候 connect system/manager 这样还能登陆上数据库么?如果这样也不能登陆则说明不是 listener的问题,如果这样能登陆但connect system/manager@net_service_name 不能登陆,才说明是网络或者listener的问题
3:system用户:select count(*) from v$session;看有多少会话在数据库中,是不是有很多?到底多少?
综合各种因素再确信问题所在



bachelor 2002-07-18
  • 打赏
  • 举报
回复
805服务器是默认就是dedicated服务器。
而且,早先没有这个问题,这是最近出的,一般运行几天后才出现这个问题
jlandzpa 2002-07-18
  • 打赏
  • 举报
回复
服务器是dedicated?
好象要在tnsnams.ora设置一个dedicated 参数,查查文档吧.
bachelor 2002-07-18
  • 打赏
  • 举报
回复
我想不是这样的
我的processes = 500,而且,哪那么多客户端
qiuyang_wang 2002-07-18
  • 打赏
  • 举报
回复
修改processes参数值就可以了.
blue__star 2002-07-18
  • 打赏
  • 举报
回复
init.ora 的 processes = 200
调大些
xinpingf 2002-07-18
  • 打赏
  • 举报
回复
修改init.ora

里面有一行 ……dispachers="(protocol=tcp……之类的东西

注释掉,然后重新启动数据库
再不行,就将tnslistener服务停掉重启动(记住,不是stop/start,而是重起服务)
加载更多回复(2)

17,377

社区成员

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

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