oracle delocate,itpub tips关于MTS的一些原理说明及问题排除

这篇博客详细讨论了Oracle多线程服务器(MTS)的相关动态视图、初始化参数及其配置。作者提供了如何判断数据库是否配置为MTS方式以及通过专用服务器方式连接数据库的方法。在解决一个由于MTS_DISPATCHERS参数设置错误导致的"ORA-12545"错误问题时,提出了分析客户端连接方式、问题原因及多种解决方案,包括修改客户端HOST文件、使用DEDICATED服务器方式等。
摘要由CSDN通过智能技术生成

近来在工作遇到一些MTS问题,而且搜索网上发现提出此问题的朋友也不在少数。

所以根据网上现有的资料,所做的试验,metalink上的一些说明,我写了这个TIP,不足之处,望大家指证:

************************************************************

几个与MTS有关的动态视图

************************************************************

SELECT * FROM V$CIRCUIT;

SELECT * FROM V$DISPATCHER;

SELECT * FROM V$DISPATCHER_RATE;

SELECT * FROM V$QUEUE;

SELECT * FROM V$MTS;

SELECT * FROM V$SHARED_SERVER;

************************************************************

几个与MTS有关的Init参数

************************************************************

mts_dispatchers:指定dispathers的初始个数,监听地址,监听协议(需要显式设定)

mts_servers :   指定共享服务进程的实始个数,Oracle会在实际的使用过程中,动态调整个数(需要显式设定)

mts_max_dispatchers:最大的dispathers个数(有默认值)

mts_max_servers :最大的Servers个数(有默认值)

mts_service:dispathers监听的服务,等同于ORACLE SID(有默认值)

其中(1服务进程对应10个联接;1调度进程对应1000个联接)

典形设定:

MTS_DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.9))(DISPATCHERS=1)"

mts_servers = 50

************************************************************************

如何判断数据库是否配制为MTS方式,或client是以shared server方式联接DB

************************************************************************

1,查询上面几个动态视图

2,查询v$session,如果某个session在active状态下,其server字段一定要为shared

3, 在UNIX下查看当前ORACLE进程:$ps -fu oracle , 显示应包括:

后台进程-------ora_smon_SID,ora_dbwr_SID,ora_arcN_SID,ora_lgwr_SID,ora_ckpt_SID,ora_pmon_SID,ora_reco_SID

调度进程-------ora_dNNN_SID(个数根据mts_dispatcher参数决定)

共享服务进程---ora_Snnn_SID(个数根据mts_servers参数决定)

监听进程-------/export/home/u01/app/oracle/product/8.1.5/bin/tnslsnr LISTENER -inherit

部分通过delicated server方式联接上的进程(可选)oracleSID (DESCRIPTION=(LOCAL=no)(ADDRESS=(PROTOCOL=BEQ)))

4,查看lsnrctl状态,lsnrctl>service

PLSExtProc            has 1 service handler(s)

DEDICATED SERVER established:0 refused:0

LOCAL SERVER

SID           has 3 service handler(s)

DEDICATED SERVER established:2 refused:0

LOCAL SERVER

DISPATCHER established:76 refused:0 current:4 max:254 state:ready

D000

(ADDRESS=(PROTOCOL=tcp)(HOST=10.6.17.50)(PORT=57345))

DISPATCHER established:94 refused:0 current:3 max:254 state:ready

D001

(ADDRESS=(PROTOCOL=tcp)(HOST=10.6.17.50)(PORT=57346))

********************************************************************

在数据库配置为MTS,我如何通过delicated server方式联接上数据库

********************************************************************

在TNSNAME连接串中加上

(SERVER = DEDICATED)

如:

kkk.CNIBS.COM =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = 10.6.17.50))

)

(CONNECT_DATA =

(SERVICE_NAME = kkk)

(SERVER = DEDICATED)

)

)

或在SQLNET.ora中加上:

user_dedicated_server=ON

****************************************************************************************************

问题一,因MTS_dispatcher参数设置错误,而引发的"ORA-12545 連接失敗是因為目標主機或物件不存在 "错误"

****************************************************************************************************

问题描述:

我的服務器安裝的是 red hat linux 6.2 + oracle8.1.6 ,

客戶端是 win2000 + PB6.5

我想將ORACLE配置為MTS(多線程服務器)﹐所以我在INITSID.ORA 中加入底下幾行要開啟MTS

mts_dispatchers = "(protocol=TCP) (DISP=1) (mul=OFF) (pool=OFF)"

mts_servers = 1

mts_max_servers = 20

重新啟動 ORACLE 以及TNS 後( 啟動都正常)

在LINUX 主機內 RUN SQLPLUS 都無誤

但是以PB 連或用TOOL TNS連線都會出現 ORA-12545 連接失敗是因為目標主機或物件不存在 。

但TNS 剛啟動時只有一條連線﹐此時PB能使用 . 經過約10秒後再啟動另一條線就會有錯誤 ora-12545 。

不知是我在 initsid.ora 中配置有誤還是另有其他設置﹐請各位大俠幫幫小弟看看是怎么回事 。 謝謝!!

问题解决办法:

1,分析client如何联接server的:

Delicated server联接方式:

客户端根据tnsname中的(主机名/IP地址,端口,服务名),把联接请求发送到LISTENER,如果数据库末配置成mts,或配置成mts但(SERVER = DEDICATED) 联接,则LISTENER分配/创建一个Deliacted server,将客户绑定在此Deliacted server上与db server进行通讯。

注意:Delicated server联接方式,只需一次connection

shared server联接方式:

客户端根据tnsname中的联接串,把联接请求发送到LISTENER,如果数据库配置成mts,则LISNTER根据一定规则选择合适的dispatcher,将dispatcher的信息(主机名,端口)组成一个包返发给客户端,让客户端关闭与LISNTER的联接,根据包的内容联接到对应的Dispather上去。

注意:shared server联接方式,需要二次connection;返回的包中,,一定会是dispatcher所在机器的主机名而不是IP地址

2,分析问题一

问题是由于init参数mts_dispatcher中的服务器标识为hostname,而此客户端无法解析此hostname

1)在LISTENER刚启动的时候,数据库还末向LISTENER注册其SERVICE,相当于这时数据库末运行在MTS上(因为找到对应服务的dispatcher),所以你的联接相当于Delicated server联接方式。当你的tnsname中服务器地址为IP地址时,联接成功。

2)等一段时间过后,数据库向LISTENER注册其SERVICE,如果客户端发出联接请求,LISNTER会以shared server方式处理联接。这样,返回一个一个包给客户端,并断开LISNTER与客户端的联接。客户端根据这个包中的Dispather的地址去接联目标dispatcher。由于你的INIT中的MTS_DISPATCHERS参数没有加上IP地址,所以,DISPATCHERS地址中包含是你的主机全名,如:(ADDRESS=(PROTOCOL=tcp)(HOST=rtcsol1.us.oracle.com)(PORT=59034))

而你的客户端由于没有配置DNS(即无法解析rtcsol1.us.oracle.com),所以会报出ORA-12545 错误。

3,如何解决,有几下几种:

1)在你的客户端的HOST文件中注册服务器的IP地址与带域名的机器名全称,使客户端能够ping 通rtcsol1.us.oracle.com

2)改shared server联接方式为Delicated server方式,在TNSNAME联接串中加上 (SERVER = DEDICATED)

收于JDBC THIN方式不使用TNSNAME联接串,则

将你的联接程序由:

"jdbc

5b24fae4cde99750994428c024162093.gifracle:thin:@host

4f06a01a81d5603cca001c0e92e5ebda.gifort:sid"

改成:

"jdbc

5b24fae4cde99750994428c024162093.gifracle:thin:@(DESCRIPTION="                   +

"(ADDRESS_LIST="              +

"(ADDRESS=(PROTOCOL=TCP)" +

"(HOST=host)"    +

"(PORT=port)"    +

&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif"                       +

&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif"                           +

"(CONNECT_DATA="              +

"(SERVICE_NAME=sid)"      +

"(SERVER=DEDICATED)"      +

&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif"                           +

&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif"

3)将MTS_DISPATCHERS参数中加上HOST=IP地址。使Listener返回的DISPATCHERS地址包中不再使用计算名而改用IP地址。

4)在INIT中使用LOCAL_LISTENER参数,如

LOCAL_LISTENER=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxxx))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值