ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2640|回复: 7

itpub tips关于MTS的一些原理说明及问题排除 [复制链接]

版主

没钱买奶粉的男人

精华贴数
1
技术积分
1243
社区积分
223
注册时间
2001-11-2
论坛徽章:
15
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2002-4-4 02:00:02 |显示全部楼层
近来在工作遇到一些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 <machine: cnibs, pid: 15384>
     (ADDRESS=(PROTOCOL=tcp)(HOST=10.6.17.50)(PORT=57345))
   DISPATCHER established:94 refused:0 current:3 max:254 state:ready
     D001 <machine: cnibs, pid: 15386>
     (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联接串,则
   将你的联接程序由:
   "jdbcracle:thin:@hostort:sid"
   改成:
   "jdbcracle:thin:@(DESCRIPTION="                   +
                         "(ADDRESS_LIST="              +
                             "(ADDRESS=(PROTOCOL=TCP)" +
                                      "(HOST=host)"    +
                                      "(PORT=port)"    +
                             ""                       +
                         ""                           +
                         "(CONNECT_DATA="              +
                             "(SERVICE_NAME=sid)"      +
                             "(SERVER=DEDICATED)"      +
                         ""                           +
                       ""
      

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

4)在INIT中使用LOCAL_LISTENER参数,如
LOCAL_LISTENER=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxxx))




  




版主

没钱买奶粉的男人

精华贴数
1
技术积分
1243
社区积分
223
注册时间
2001-11-2
论坛徽章:
15
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2002-4-4 18:28:24 |显示全部楼层
UP

没有人捧场,好伤心:(

写这个东东还是花了时间的啊。

使用道具 举报

注册会员

si bu hui gai de you xia

精华贴数
3
技术积分
2342
社区积分
2587
注册时间
2001-9-24
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2002-4-4 18:34:16 |显示全部楼层
都给你写光了阿

人都比较懒,不碰到问题/错误,一般不高兴学习,除非做测试

另外,Oracle 8i及以下版本确实在Linux下的MTS模式 有bug,偶我们一般自己的测试环境就是linux

使用道具 举报

版主

没钱买奶粉的男人

精华贴数
1
技术积分
1243
社区积分
223
注册时间
2001-11-2
论坛徽章:
15
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2002-4-4 18:50:02 |显示全部楼层
你怎么不早出现啊:(

我前一段时间帮朋友的网站(linux+817),设置MTS,结果出现了
我贴中的错误,由于它是ODBC+THIN的联接方式,数据库设置为MTS后,ODBC+THIN的联接方式就报错(类似于不能建立联接),但SQL/PLUS却可以上。网站停的时间不能太久,所以后来就换成了delicated


所以,我决定攻克这个难题。。。
到现在为止也不知能否解决,因为朋友再也不给我机会了。。。5555555555555555555555

使用道具 举报

注册会员

si bu hui gai de you xia

精华贴数
3
技术积分
2342
社区积分
2587
注册时间
2001-9-24
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2002-4-4 19:05:30 |显示全部楼层
thin的方式不太懂,听说JDBC里头THIN方式都不用安装Oracle客户端,不需要 服务名解析
而MTS好像必须要通过 服务名才可以连接的
所以你的朋友的应用不行吧?谁来确认一下

你的这些问题我好早就看到了,那个时候不会,现在还是不会解答

偶说的bug是另外的事情,假如你没有打过补丁的话(即使patch了,也不知道会不会解决),你会发现在bdump目录下头有pmon的trace文件,还有alert.log文件 里头都有相同的错误(很剧烈)  说 OS什么不支持;另外的bug,我还没注意到,反正多多

使用道具 举报

版主

深蓝

精华贴数
0
技术积分
1200
社区积分
82
注册时间
2002-1-28
论坛徽章:
15
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01会员2006贡献徽章
日期:2006-04-17 13:46:34
发表于 2002-4-8 13:54:21 |显示全部楼层

试试看

2000+816环境我试试看:)

使用道具 举报

超级版主

人生就是如此

精华贴数
39
技术积分
113462
社区积分
12389
注册时间
2001-12-12
论坛徽章:
80
ITPUB元老
日期:2005-02-28 12:57:00蛋疼蛋
日期:2011-05-27 08:50:45蜘蛛蛋
日期:2011-07-01 08:38:17ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2002-4-8 14:37:28 |显示全部楼层

我来捧一句

呵呵

一看你的  10.0.0.9  的ip设置
就知道那是sqlcode的机器
他辞职了归我照看了一段时间
上面的你也copy了我一句话的啊
呵呵
没有注明出处
告你侵权……

使用道具 举报

精华贴数
0
技术积分
21
社区积分
0
注册时间
2009-3-30
论坛徽章:
0
发表于 2009-11-21 22:40:17 |显示全部楼层

你们两个很有情调啊  这个学到不少

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部