- 浏览: 213342 次
- 性别:
- 来自: 深圳
最新评论
-
daijope:
...
mysql创建数据库后出现Access denied for user 'root'@'%' to database ‘xxxx’ -
szgaea:
本人博客记录在工作中遇到的一些问题的解决方案,都是现场解决后的 ...
如何为已安装php扩展安装mbstring -
56553655:
可以执行,我没看清楚
如何为已安装php扩展安装mbstring -
56553655:
老兄,你照这个命令再试一下是否成功
如何为已安装php扩展安装mbstring -
JeffreyHsu:
有用!!!
ie通过window.open下载excel,结果是直接打开excel乱码
关于Oracle的MTS
一、简介
MTS(Multi-Threaded Server)是ORACLE SERVER的一个可选的配置选择,是相对DEDICATE方式而言,它最大的优点是在以不用增加物理资源(内存)的前提下支持更多的并发的连接。换句话说,如果你只有2G的物理内存,而你又想支持2000个连接,在获取最好性能的前提下,你就应该选择MTS了。
本文先说一说MTS的工作方式,然后与DEDICATE方式的做一下比较,接下来说一下MTS具体配置实现,最后说一些优化MTS配置选项的问题。
二、MTS的工作方式
1、Joseph C.Johnson以餐馆给出一个MTS的形象的比喻
假设ORACLE是一家餐馆,当你走进一家餐馆时你感觉最舒服的服务方式就是有一个专门的waiter来为你服务,而不管餐馆中来了多少人,她只对你请求应答,这是DEDICTE的处理方式,也就是说每一个ORACLE客户端的连接都有一个专门的服务进程来为它服务。而大部的餐馆的服方式都不是一对一的,当你走进的时侯,你就被指定了一个waiter,她也可能为其它桌服着务,这对于餐馆来说是最有利的,因为他们可以服务更多的客人而不需要增加他们的员工。这样对你来说也可能是不错的,如果餐馆不是太忙,她服务的客人的请求都很简短且容易完成,你的感觉也好像自己拥有一个专门的waiter,waiter把你的ORDER转给厨师,然后把做好的菜拿给你,这就是MTS的处理方式,这些共享的waiters我们叫她们为Dispatchers,厨师我们则叫他们为Shared Server Processes。
2、简说一下MTS的工作方式
1)客户端向Dispatcher发一个服务请求
2)Dispatch把这个请求放到SGA区的请求对队列中
3)由一个或几个服务进程来处理这个请求
4)服务进程把进行的结果放到Dispatch的SGA区的的响应队列中
5)Dispatcher从响应队列拾起结果
6)完成客户端的请求并把结果回送给客户端
三、MTS与DEDICATE方式方面做一下比较,为方便比较绘制如下的简表
四、 MTS的配置实现
1、 Oracle8i MTS环境常用到的几个参数
序号 参数 说明
2、 Oracle9i MTS环境常用到的几个参数
序号
参数
说明
需要说明的是large_pool_size这个初始化参数,在MTS环境中为获取更好的性能建议设置这个参数,这样UGA都从large_pool这样一个固定的区域中进行分配,而不用从Shared Pool中动态进行分配,这样也可以减少ORA-04031错误的发生。
五、 优化MTS配置选项及你可能问的几个问题
1、 large_pool_size这个参数我该设为多大呢?
当large_pool_size的大小能够满足所有的共享服务进程所需的内存就可以了,当然如果内存够用的话可以适当的加大一点,如下的语句便可以得出自实例启动来MTS连接所用的内存的最大数量,可以看出来是200多M。
2、 如何判断我dispatcher的数量是不是够用呢?
使用如下的语句,当dispatcher的繁忙比率超过50%的时侯,你就要考虑增加Dispatcher的数量了,用Alter system动态却可完成。
3、 如何判断共享服务进程是不是够用呢?
使用如下的语句来确定每次请求的平均等待时间,监测Average Wait time per reques这个值,当这个值持续增长时你该考虑增加shared servers了。
4、 如何在MTS配置的Server请求Dedicate的连接着?
你在tnsnames.ora中做服务名配置时加入SRVR=DEDICATED这个选项就可以了,示例如下:
六、 结文
在你的Oracle的服务器出现高的内存利用率和出现频繁换页时,使用MTS是一个不错的选择。总体上说来,MTS较适合OLTP这种类型的应用,对于那些数据仓库、DDS这些类型的应用它则是不适合的。
继续说一说Oracle的MTS
1、在Oracle Server调整为MTS方式后,一些客户端出现了连不上Oracle Server的状况,大部分报的错为TNS-12509,如何解决?
回答:
在实际过程中是存在着这方面的情况,我总结了一下,大部是由Oracle8 的client引起的,就是那些配服务名还得挂着个.world的那种客户端,其实解决起来很简单,只需要把tnsname.ora这个文件中你的那个服务名配置的"sid="改成"service_name=",这就Ok了。
2、我使用了成都迈普公司的"隧道网关"这种产品,以前在dedicated方式是好好的,可是改成MTS后,为什么Client死活连不是Oracle的Server呢?
回答:
其实我们公司也用了这种产品,在MTS应用之初也遇到了这个问题。出现这个问题的原因为迈普的这种产品只为监测静态的端返回,它认为Oracle的监听端口即为返回端口,实际在MTS中不是这样的,多进行几次连接,用netstat -n在客户端观看一下就会明白,MTS返回的端口是动态的,所以迈普的这个产品就不好用了。解燃眉之急的办法可以这样:在MTS客户端配置"服务名"时,请求个Dedicate的连接,即使用SERVER = DEDICATED选项,这就把问题解决了。
3、如何跟踪一下MTS的dispatcher和shared server进程?
回答:
这需用到诊断事件了,dispatcher的诊断事件号为10248,shared server的为10249,如下以shared server为例简单说一下,假定s015的操作系统的进程号为13161.
4、如何在MTS中设置IPC
回答:
地址列表中可以使用其它的协议,加入应的地址。这个例子完全是一个IPC的例子
5、如何查看一下某个shared_server正在忙什么?
回答:
其实这与Dedicated方式的查看方法是一样的,还以s015为例,它的spid为13161,使用如下的sql便可查出:
6、我在unix看到一个shared server的进程占用了大量的CPU资源,通过select addr from v$process where spid=<os process pid>查到进程的address,而select * from v$session where paddr=<paddr>确没的结果,所以我无法得知我的这个shared server在忙什么,我该怎么办呢?
回答:
如果status的返回是EOF,说明实际这个shared server已经掉死了,你可以把它在操作系统上清除掉了:
eg:
oracle$kill -9 <shared server's pid>
你不用担心kill掉会有什么大的影响,其它几分钟之后,pmon会为你把这个shared server进程给重新启动的。
7、如何在非down库的情况下恢复到Dedicate的连接方式,及启用更多的dispatcher?
回答:
7.1关掉:
7.2启用更多的dispatcher
一、简介
MTS(Multi-Threaded Server)是ORACLE SERVER的一个可选的配置选择,是相对DEDICATE方式而言,它最大的优点是在以不用增加物理资源(内存)的前提下支持更多的并发的连接。换句话说,如果你只有2G的物理内存,而你又想支持2000个连接,在获取最好性能的前提下,你就应该选择MTS了。
本文先说一说MTS的工作方式,然后与DEDICATE方式的做一下比较,接下来说一下MTS具体配置实现,最后说一些优化MTS配置选项的问题。
二、MTS的工作方式
1、Joseph C.Johnson以餐馆给出一个MTS的形象的比喻
假设ORACLE是一家餐馆,当你走进一家餐馆时你感觉最舒服的服务方式就是有一个专门的waiter来为你服务,而不管餐馆中来了多少人,她只对你请求应答,这是DEDICTE的处理方式,也就是说每一个ORACLE客户端的连接都有一个专门的服务进程来为它服务。而大部的餐馆的服方式都不是一对一的,当你走进的时侯,你就被指定了一个waiter,她也可能为其它桌服着务,这对于餐馆来说是最有利的,因为他们可以服务更多的客人而不需要增加他们的员工。这样对你来说也可能是不错的,如果餐馆不是太忙,她服务的客人的请求都很简短且容易完成,你的感觉也好像自己拥有一个专门的waiter,waiter把你的ORDER转给厨师,然后把做好的菜拿给你,这就是MTS的处理方式,这些共享的waiters我们叫她们为Dispatchers,厨师我们则叫他们为Shared Server Processes。
2、简说一下MTS的工作方式
1)客户端向Dispatcher发一个服务请求
2)Dispatch把这个请求放到SGA区的请求对队列中
3)由一个或几个服务进程来处理这个请求
4)服务进程把进行的结果放到Dispatch的SGA区的的响应队列中
5)Dispatcher从响应队列拾起结果
6)完成客户端的请求并把结果回送给客户端
三、MTS与DEDICATE方式方面做一下比较,为方便比较绘制如下的简表
- 序号 比较项 MTS 方式 DEDICATE 方式
- 1 服务进程 多个连接共享一个服务进程 一个连接有一个专门的服务进程
- 2 每个客户端的连接使用的内存量 3-4M 150-200K
- 3 适合的应用环境 适合连接数很多且请求很短少的 OLTP 环境 如果 Oracle 服务器的资源够用,这种方式是优选
- 4 CPU 负载 会造成一些 CPU 的负载,如果你的 CPU 有瓶颈,则不要用这种方式
四、 MTS的配置实现
1、 Oracle8i MTS环境常用到的几个参数
序号 参数 说明
- 1
- mts_dispatchers
- 用于配置当 Instance 启动的时侯启用的 Dispatcher 的数量、及Dispatcher 所响应的协议,它是一个动态的参数,可以用 Alter system 进行动态修定,它没有默认值。
- 2
- mts_max_dispatchers
- 用于指定同时运行的 Dispatcher 进程的最大数量,对于大部分的应用,每 250 个连接启用一个 Dispatcher 可以获得较好的性能。默认值是 5 或所配置的 Dispatcher 的数量
- 3
- mts_servers
- 用于指定当 Instance 启动时你想启用的服务进程的数量,它是一个动态参数,可以用 Alter systme 动态修定。
- 4
- mts_max_servers
- 用于指定同时进行的共享的库的服务进程的数量,如果你的系统经常出现死锁,应该适当的增加这个值。
- 5
- mts_service
- 设为 SID
- 6
- mts_listener_address
- TNS 监听的地址
2、 Oracle9i MTS环境常用到的几个参数
序号
参数
说明
- 1
- Dispatchers
- 等同于8i中的mts_dispatchers参数
- 2
- max_dispatchers
- 等同于8i中的mts_max_dispatchers参数
- 3
- shared_servers
- 等同于8i中的mts_server参数
- 4
- max_shared_servers
- 等同于8i中的mts_max_servers参数
- 3、 以我一个实际环境(Oracle8.1.7.4)举个例子,9i类似,我在Init<SID>这个初始化参数文件中加入了如下的MTS的参数,完成了MTS的配置。
- #mts set by qiuyb
- mts_dispatchers="(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.223.125))(DISPATCHERS=10)"
- mts_max_dispatchers=20
- mts_servers=10
- mts_max_servers=50
- mts_service=BILLING
- mts_listener_address="(address=(protocol=tcp)(host=192.168.223.125)(port=1521))" large_pool_size=400M
- #end of qiuyb's set
需要说明的是large_pool_size这个初始化参数,在MTS环境中为获取更好的性能建议设置这个参数,这样UGA都从large_pool这样一个固定的区域中进行分配,而不用从Shared Pool中动态进行分配,这样也可以减少ORA-04031错误的发生。
五、 优化MTS配置选项及你可能问的几个问题
1、 large_pool_size这个参数我该设为多大呢?
当large_pool_size的大小能够满足所有的共享服务进程所需的内存就可以了,当然如果内存够用的话可以适当的加大一点,如下的语句便可以得出自实例启动来MTS连接所用的内存的最大数量,可以看出来是200多M。
SELECT sum(value) "Max MTS Memory Allocated" FROM v$sesstat ss, v$statname st WHERE name = 'session uga memory max' AND ss.statistic#=st.statistic# Max MTS Memory Allocated ------------------------ 214457296
2、 如何判断我dispatcher的数量是不是够用呢?
使用如下的语句,当dispatcher的繁忙比率超过50%的时侯,你就要考虑增加Dispatcher的数量了,用Alter system动态却可完成。
SELECT name, (busy / (busy + idle))*100 "Dispatcher % busy Rate" FROM V$DISPATCHER
3、 如何判断共享服务进程是不是够用呢?
使用如下的语句来确定每次请求的平均等待时间,监测Average Wait time per reques这个值,当这个值持续增长时你该考虑增加shared servers了。
SELECT decode(totalq,0,'No Requests') "Wait Time", Wait/totalq ||'hundredths of seconds' "Average Wait time per request" FROM V$QUEUE WHERE type = 'COMMON'
4、 如何在MTS配置的Server请求Dedicate的连接着?
你在tnsnames.ora中做服务名配置时加入SRVR=DEDICATED这个选项就可以了,示例如下:
billing = (DESCRIPTION = ( ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ks3)(PORT = 1521)) ) ( CONNECT_DATA = (SERVICE_NAME = billing) (SRVR = DEDICATED) ) )
六、 结文
在你的Oracle的服务器出现高的内存利用率和出现频繁换页时,使用MTS是一个不错的选择。总体上说来,MTS较适合OLTP这种类型的应用,对于那些数据仓库、DDS这些类型的应用它则是不适合的。
继续说一说Oracle的MTS
1、在Oracle Server调整为MTS方式后,一些客户端出现了连不上Oracle Server的状况,大部分报的错为TNS-12509,如何解决?
回答:
在实际过程中是存在着这方面的情况,我总结了一下,大部是由Oracle8 的client引起的,就是那些配服务名还得挂着个.world的那种客户端,其实解决起来很简单,只需要把tnsname.ora这个文件中你的那个服务名配置的"sid="改成"service_name=",这就Ok了。
2、我使用了成都迈普公司的"隧道网关"这种产品,以前在dedicated方式是好好的,可是改成MTS后,为什么Client死活连不是Oracle的Server呢?
回答:
其实我们公司也用了这种产品,在MTS应用之初也遇到了这个问题。出现这个问题的原因为迈普的这种产品只为监测静态的端返回,它认为Oracle的监听端口即为返回端口,实际在MTS中不是这样的,多进行几次连接,用netstat -n在客户端观看一下就会明白,MTS返回的端口是动态的,所以迈普的这个产品就不好用了。解燃眉之急的办法可以这样:在MTS客户端配置"服务名"时,请求个Dedicate的连接,即使用SERVER = DEDICATED选项,这就把问题解决了。
3、如何跟踪一下MTS的dispatcher和shared server进程?
回答:
这需用到诊断事件了,dispatcher的诊断事件号为10248,shared server的为10249,如下以shared server为例简单说一下,假定s015的操作系统的进程号为13161.
sql>conn sys/pass as sysdba sql>oradebug setospid 13161 sql>oradebug TRACEFILE_NAME --看一下跟踪文件的名称 sql>oradebug EVENT 10249 trace name context forever, level 10 也可以在init<SID>.ora中加入如下两行完成trace: event="10248 trace name context forever, level X" -- dispatchers event="10249 trace name context forever, level X" -- shared servers
4、如何在MTS中设置IPC
回答:
LISTENER.ORA: ============= LISTENER= (ADDRESS_LIST= (ADDRESS= (PROTOCOL=IPC) (KEY=<sid name>) ) (ADDRESS= (PROTOCOL=IPC) (KEY=<alias in tnsnames.ora for the sid>) ) ) CONNECT_TIMEOUT_LISTENER=10 STARTUP_WAIT_TIME_LISTENER=0 SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=<sid name>) (ORACLE_HOME=<home directory path for Oracle>) ) )
地址列表中可以使用其它的协议,加入应的地址。这个例子完全是一个IPC的例子
TNSNAMES.ORA: ============= <alias>= (DESCRIPTION= (ADDRESS= (PROTOCOL=IPC) (KEY=<sid name>) ) (CONNECT_DATA= (SID=<sid name>) ) )
INIT.ORA entries for MTS: ========================= MTS_DISPATCHERS="IPC,2" MTS_SERVERS=1 MTS_MAX_DISPATCHERS=6 MTS_MAX_SERVERS=3 MTS_SERVICE=<sid name> MTS_LISTENER_ADDRESS="(ADDRESS=(PROTOCOL=IPC)(KEY=<sid name>))"
5、如何查看一下某个shared_server正在忙什么?
回答:
其实这与Dedicated方式的查看方法是一样的,还以s015为例,它的spid为13161,使用如下的sql便可查出:
SELECT a.username, a.machine, a.program, a.sid, a.serial#, a.status, c.piece, c.sql_text FROM v$session a, v$process b, v$sqltext c WHERE b.spid=13161 AND b.addr=a.paddr AND a.sql_address=c.address(+) ORDER BY c.piece
6、我在unix看到一个shared server的进程占用了大量的CPU资源,通过select addr from v$process where spid=<os process pid>查到进程的address,而select * from v$session where paddr=<paddr>确没的结果,所以我无法得知我的这个shared server在忙什么,我该怎么办呢?
回答:
SELECT status FROM v$circuit WHERE CIRCUIT IN ( SELECT circuit FROM v$shared_server WHERE paddr=<your paddr> )
如果status的返回是EOF,说明实际这个shared server已经掉死了,你可以把它在操作系统上清除掉了:
eg:
oracle$kill -9 <shared server's pid>
你不用担心kill掉会有什么大的影响,其它几分钟之后,pmon会为你把这个shared server进程给重新启动的。
7、如何在非down库的情况下恢复到Dedicate的连接方式,及启用更多的dispatcher?
回答:
7.1关掉:
sql>ALTER SYSTEM SET MTS_DISPATCHERS='TCP,0';
7.2启用更多的dispatcher
sql>ALTER SYSTEM SET MTS_DISPATCHERS='TCP,40';
发表评论
-
PrettyTime是一个开源的时间格式化类库
2015-03-02 16:24 666PrettyTime是一个开源的时间格式化类库。它能够将时间格 ... -
移动网关代码
2012-03-27 11:55 2177移动发送短信的状态报告 ISMG向SP送交状态报告中的STA ... -
rmi spring resin启动出错
2012-02-19 01:32 1950[00:30:36,734] [ContextLoader,2 ... -
[转]ngnix完整配置
2012-02-18 12:29 2035#用户 用户组 user www www; ... -
常用数据库命令
2012-02-02 15:19 1011show engine innodb status\G; s ... -
myisam类型的表自动修复的方法
2011-12-21 17:23 1268myisam类型的表极容易损坏,下面介绍一种自动修复myisa ... -
mysql备份表的几种方式
2011-12-08 09:55 4361#!/bin/bash # 记录时间 T=$(date + ... -
oracle管理员密码忘了
2011-11-21 17:03 1136Oracle WEB管理平台访问地址: http://loca ... -
oracle锁一些知识
2011-10-28 00:43 4666表级锁共具有五种模式,如下所示。 行级排他锁(Row Exc ... -
常用linux命令
2011-10-21 16:52 843查看进程使用句柄数 lsof -n |awk '{pri ... -
mysql创建数据库后出现Access denied for user 'root'@'%' to database ‘xxxx’
2011-09-14 10:55 36335create database test1; 创 ... -
oracle自动备份
2011-09-06 16:30 1013#!/bin/bash source /home/ora ... -
oracle管理的一些常用令
2011-09-06 16:29 1073sqlplus /nolog conn / as sysdb ... -
Linux 系统下oracle服务自启动简单配置
2011-08-03 11:52 1351Linux 系统下oracle服务自启动简单配置 1、实例启 ... -
linux安装oracle实录
2011-08-02 00:24 1237安装企业版的Oracle 10g 1、检查是否需要的包都存在 ... -
关于struts2的验证问题
2011-07-18 21:35 803自我感觉struts2的验证比struts1的验证做得还 ... -
struts2 开发过程中遇到的一些问题及解决办法
2011-07-15 23:25 11491、在进行form validate时,若form中有下拉框的 ... -
Resin使用struts2标签错误解决com.caucho.jsp.JspParseException: javax/xml/ws/WebServiceRef
2011-07-08 15:16 2541MyEclipse+Resin使用struts2标签错误解 ... -
[转载记录]系统的UIM卡介绍
2011-06-21 16:48 1088系统的UIM卡介绍 目前CDMA终端在全球绝大多 ... -
PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed:
2011-06-10 17:25 6770php通过去访问外部网站时,出现以下提示: PH ...
相关推荐
在卸载完成后,重新安装的时候,提示OracleMTSRecoveryService 路径找不到 在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleMTSRecoveryService 修改对应的路径解决
此版本不支持 Pro*C/C++和.NET程序所需的Oracle Provider for OLE DB,如需支持上述功能,请访问并下载ODAC(Oracle Data Access Components,其包含 ODP.NET, Oracle Services for MTS, Oracle Providers for ASP...
软件功能: 1.查询Oracle实例名、状态、版本等 2.Oracle连接数 ...24.MTS 25.碎片程度高的表 26.使用CPU多的用户 27.KILL用户会话 使用说明详细见:http://blog.chinaunix.net/uid-765492-id-3380917.html
15由于使用了MTS方式,导致数据库操作特别慢(包括备份) 16由于存在一个大事务操作,导致数据库性能特别差或产生频繁日志切换 17由于没有COMMIT,导致数据库表被锁住 18索引创建不合理,导致数据库查询特别慢 19 ...
相比1.1版本更新内容: 增加了对11G更好的支持 增加了对大量服务器监控配置 增加了监控内容 1.0功能: 1.查询Oracle实例名、状态、版本等 ...24.MTS 25.碎片程度高的表 26.使用CPU多的用户 27.KILL用户会话
Unzip ODAC (xcopy version) zip file to expand the contents. The following directories will be created: a) instantclient_11_2 - Oracle Instant Client ...g) OraMTS - Oracle Services for MTS
为了提高性能,我们针对Oracle数据库本身提供了的方法或方案进行过不少的尝试,主要包括: 共享服务器模式(MTS);集群技术(Clustering)RAC;分区; 并行处理(主要是并行查询)。 Oracle提供的这些特性确实是用来进行...
除了以上提及的特性之外,还支持Oracle 8和Oracle 8i特性,如LOB定位、对象和参考、XML TYPE、时间戳、滚动查询、密码到期、外部程序开发以及MTS Oracle服务等。 主要功能: 按范例查询模式 ——TOracleDataSet组件...
1.2.3 MTS(multi-threaded server) 8 1.2.4 调整临时表空间 9 1.2.5 调整回滚表空间 9 1.2.6 调整日志(日志组,日志成员) 10 1.2.7 调整用户表空间 10 1.2.8 创建用户 11 1.2.9 创建数据对象(表,索引,系列,...
主要内容:收集性能数据、优化SQL语句和应用程序、调整共享池(Shared Pool)的性能、调整缓冲区高速缓存(Buffer Cache)的性能、调整重做有关的性能、共享(多线程)服务器(MTS)、调整磁盘I/O的性能、调整闩(latch)和...
oracle的网络配置的文件,MTS,等。 自己搜集的,可以参考下。
数据库连接类型选择 Oracle数据库有专用服务器连接类型和多线程服务器MTS连接类型。对于批处理服 务,需要专用服务器连接方式,而对于OLTP服务则MTS的连接方式比较合适。由于采 用MTS后,可以通过配置网络服务实现...
Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...
找ORACLE字符集 <br>select * from sys.props$ where name='NLS_CHARACTERSET'; <br>15. 监控 MTS <br>select busy/(busy+idle) "shared servers busy" from v$dispatcher; <br>此值大于0.5时,...
主要内容:收集性能数据、优化SQL语句和应用程序、调整共享池(Shared Pool)的性能、调整缓冲区高速缓存(Buffer Cache)的性能、调整重做有关的性能、共享(多线程)服务器(MTS)、调整磁盘I/O的性能、调整闩(latch)和...
Dsn=orcl;uid=scott;dbq=ORCL;dba=W;apa=T;exc=F;fen=T;qto=T;frc=10;fdl=10;lob=T;rst=T;btd=F;bnf=F;bam=IfAllSuccessful;num=NLS;dpm=F;mts=T;mdi=F;csr=F;fwc=F;fbs=64000;tlo=O
这样可使 .NET 应用程序运行跨多个资源结合不同操作(例如将定单插入SQL Server 数据库、将消息写入 Microsoft 消息队列(MSMQ)队列,以及从 Oracle 数据库检索数据)的事务。 要实现COM+事务处理的类则必须继承...
How to choose the most appropriate ...How to take full advantage of relational database servers, such as SQL Server and Oracle How to meld relational databases with object-oriented programming Who