环境:AIX 4.3+CICS 4.2+ORACLE 8.1.5,CICS通过XA和ORACLE建立连接问题:ORACLE session大概10分钟后才能释放,而CICSAS进程则无此问题,BUT WHY?
prada_gu 回复于:2003-12-17 09:18:38
能不能说说CICS是什么东西,没听说过
tzg 回复于:2003-12-17 11:46:07
中间件
angel_xa 回复于:2003-12-17 12:27:36
引用:原帖由 "prada_gu"]能不能说说CICS是什么东西,没听说过 发表:
IBM公司的一个产品,交易中间件
fzm 回复于:2003-12-17 14:40:50
对,CICS就是AIX的交易中间件。
prada_gu 回复于:2003-12-17 15:35:46
晕,IBM的中间件不就是webspare吗,倒没听说过CICS,真是闭塞呀
chaoping 回复于:2003-12-17 20:28:48
1. Oracle 版本不好。既然8i,为什么不用817。
2。Oraclesession 10分钟才释放是什么意思?详细一点?有无什么Log?怎么识别的,
tzg 回复于:2003-12-17 21:04:05
1、ORACLE版本是原先安装的,现在没有办法更改了。
2、我们的CICS配置是这样的:一个CICS SERVER端的PROC程序,语音系统(呼叫中心)通过CICS CLIENT端调用 SERVER端PROC程序的函数实现各种功能。
现在的问题是:基于这种应用的情况下,用户拨打呼叫中心电话进来后通过CICS和ORACLE建立会话,得出需 要的结果。但是当用户挂断电话后,ORACLE的SESSION依然存在,大概10分钟后才能释放。这样当有大量的用 户同时拨打呼叫中心的时候,ORACLE将达到上千个SESSION,服务器资源耗尽。
#如何才能让ORACLE实时地释放SESSION?
#如何控制CICS应用服务的运行时间?
lljj 回复于:2003-12-18 08:46:03
cics启动后,有一个cicsas进程就连入数据库一个,没什么奇怪的阿!
不过是不是你的maxserver设得太大了!在cics的rd里可以改!
如果你的业务没这么大,那有可能是数据库里的某个表被锁了!
然后cics不停的响应新的业务,就堵塞了
deepblue 回复于:2003-12-18 09:16:48
写了半天全没有了,出现了一个invalid_session。
这个论坛真要命。
那就简单说吧,这个恰恰是中间件的优势。
有一个as就有一个session(oracle7.1.3之前是两个),as的最大数目由RD中Maxserver决定,保留数目由Minserver确定。
就是说交易结束as并不直接宕下来,ServerIdleLimit确定as保留的时间,直到保留数目到Minserve为止。
注意,oracle的初始化参数distributed_transactions应大于Maxserver,道理想必明白,就不多说了。
这个跟lljj说的Maxserver的大小没有关系。
lljj 回复于:2003-12-18 09:19:23
哦!楼上的兄弟!oracle是这样的吗?
呵呵我只会sybase我以为差不多呢!原来oracle还有这个功能。
deepblue 回复于:2003-12-18 09:23:54
中间件的其中一个优势就是进程池和连接池。
这个是对的,从数据库角度讲,session和cursor的缓存恰恰可以提高整体的效率。
另外,你说有上千个session是实际的情况,还是你的猜想?
如果这是这种情况,请查一下,你的server程序中是否有CICS RETURN?是否每个交易都没有结束?
如果是这种情况,lljj所说的Maxserver才有一定道理。
请明确,我持怀疑态度。
deepblue 回复于:2003-12-18 09:29:05
引用:原帖由 "lljj" 发表: 哦!楼上的兄弟!oracle是这样的吗?
呵呵我只会sybase我以为差不多呢!原来oracle还有这个功能。
个人感觉上面的问题应该在CICS层面理解就很清楚了。
tzg 回复于:2003-12-18 11:03:12
谢谢各位!
ServerIdleLimit是设置空闲的as保留时间,我修改过这个参数值。但对于当前活动的as,这个参数值没有作用。
我们这里的应用一个as可以产生20个以上的SESSION,也就是说一个as有N个交易。as的minserver为1,maxserver为20。
ORACLE的distributed_transactions参数为445,远大于20没问题。
现在要解决的就是如何设置才能让一个as控制一个交易,而不是N个。也就是说一个as最多产生一个SESSION,而不是N个
tzg 回复于:2003-12-18 11:08:51
因为现在发现,一个as控制着至少25个以上的ORACLE SESSION。但手工把as给KILL掉有,ORACLE SESSION也都随之释放!
deepblue 回复于:2003-12-18 13:00:23
你能肯定一个as有25个以上的session吗?
用showProcInfo看一下都有那些线程,都是做什么的?
感觉只有dpl本地程序的时候,才用到线程。
请将结果贴出来。
最好将RD和XAD的定义也贴出来看一下。
deepblue 回复于:2003-12-18 13:01:49
引用:原帖由 "tzg" 发表: 谢谢各位!
ServerIdleLimit是设置空闲的as保留时间,我修改过这个参数值。但对于当前活动的as,这个参数值没有作用。
那是肯定的。可能大家理解有偏差。
tzg 回复于:2003-12-18 13:10:52
引用:原帖由 "deepblue" 发表: 你能肯定一个as有25个以上的session吗?
用showProcInfo看一下都有那些线程,都是做什么的?
感觉只有dpl本地程序的时候,才用到线程。
请将结果贴出来。
最好将RD和XAD的定义也贴出来看一下。
是的,刚刚查看一个as已经达到了30个ORACLE SESSION
tzg 回复于:2003-12-18 13:12:33
XAD:
Oracle:
GroupName=""
ActivateOnStartup=yes
ResourceDescription="XA Product Definition"
AmendCounter=13
Permanent=no
SwitchLoadFile="oracle1pc"
XAOpen="Oracle_XA+Acc=P/system@sfhc/s8jiuty"
XAClose=""
XASerialize=all_operations
deepblue 回复于:2003-12-18 13:14:06
你的xa打开trace了吗?
就是说你的dbgfl=?
看从trace中能否发现什么。
另外把你查看的方法贴出来。
tzg 回复于:2003-12-18 13:15:28
RD:
:ml7
ResourceDescription="Region Definition"
AmendCounter=16
Modifiable=no
StartType=cold
Groups=
StartupProgList=""
ShutdownProgList1=""
ShutdownProgList2=""
DefaultUserId="CICSUSER"
FileSystemType=SFS
RDBMSInstance=""
FileRSLCheck=external
TransientDataRSLCheck=external
TemporaryStorageRSLCheck=external
JournalRSLCheck=external
ProgramRSLCheck=external
TransactionRSLCheck=external
ESMLoad=no
ESMModule=""
RuntimeProtection=none
LogicalTDQProtection=none
PhysicalTDQProtection=none
NonRecTDQProtection=none
RecTSQProtection=none
NonRecTSQProtection=none
LocalQProtectProtection=none
LocalQProtection=none
ReleaseNum="0420"
LocalSysId="ISC0"
LocalNetworkName=""
CWASize=512
MinServer=1
MaxServer=20
ClassMaxTasks=1,1,1,1,1,1,1,1,1,1
ClassMaxTaskLim=0,0,0,0,0,0,0,0,0,0
ServerIdleLimit=300
SafetyLevel=none
RPCListenerThreads=0
DateForm=ddmmyy
ClassTableSize=5,50,50,1,50,50,50,20,5,50,1,20,5,5
MaxRegionPool=2097152
MaxTaskPrivatePool=1048576
MaxTSHPool=1048576
RegionPoolThreshold=90
TaskShPoolThreshold=90
TaskSHNumBuckets=512
LoadDataNumBuckets=512
SysDump=no
PCDump=yes
ABDump=yes
DumpName="dumps"
CoreDumpName="dir1"
Trace=all
TraceModules=0
ExternalTrace=no
TraceFileA="trace.a"
TraceFileB="trace.b"
TraceFileSize=3276800
SysTraceBufferSize=163840
UserTraceDirectory="/tmp"
PublicUserTraceFile="cicspubl"
IntrospectInterval=10
IntrospectLevel=minimal
ISCDelayMinutes=10
CUBSDelayMinutes=5
CARPDelayHours=8
ProtectPurgeDelayPeriod=8
PurgeDelayPeriod=8
StatsRecord=yes
StatFile="statsfile"
SufficesSupported=yes
CheckpointInterval=1000
DefaultFileServer="/.:/cics/sfs/sfhc2"
RecTSQFile="%Rcicsrectsqfile"
RecTSQIndex="cicsrectsqidx"
RecTSQVol="sfs_%S"
RecTSQPrePages=5
RecTSQMaxRecs=1000000
NonRecTSQFile="%Rcicsnrectsqfil"
NonRecTSQIndex="cicsnrectsqidx"
NonRecTSQVol="sfs_%S"
NonRecTSQPrePages=5
NonRecTSQMaxRecs=1000000
LogicalTDQFile="%Rcicstdqlgfile"
LogicalTDQIndex="cicstdqlgidx"
LogicalTDQVol="sfs_%S"
LogicalTDQPrePages=5
LogicalTDQMaxRecs=1000000
PhysicalTDQFile="%Rcicstdqphfile"
PhysicalTDQIndex="cicstdqphidx"
PhysicalTDQVol="sfs_%S"
PhysicalTDQPrePages=5
PhysicalTDQMaxRecs=1000000
NonRecTDQFile="%Rcicstdqnofile"
NonRecTDQIndex="cicstdqnoidx"
NonRecTDQVol="sfs_%S"
NonRecTDQPrePages=5
NonRecTDQMaxRecs=1000000
LocalQProtectFile="%Rcicsplqfile"
LocalQProtectIndex="cicsplqidx"
AutoDCELogin=no
LocalQProtectVol="sfs_%S"
LocalQProtectPrePages=5
LocalQProtectMaxRecs=1000000
LocalQFile="%Rcicsnlqfile"
LocalQIndex="cicsnlqidx"
LocalQVol="sfs_%S"
LocalQPrePages=5
LocalQMaxRecs=1000000
TSQAgeLimit=20
ProgramCacheSize=0
LocalLUName=""
ServerSideTran=no
AuthenticationService=CICS
NameService=NONE
AllowDebugging=no
ECIPasswordCacheSeconds=28800
HTMLBrowser=""
AutoinstallMode=default
MaxConsoleSize=0
MaxTaskCPU=0
MaxTaskCPUAction=warning
TransDumpTrace=no
deepblue 回复于:2003-12-18 13:23:55
select a.program,b.spid from v$session a,v$process b where a.paddr=b.addr
确认spid的进程号是同一个as的进程号吗?
deepblue 回复于:2003-12-18 13:25:14
感觉不出定义有何不对。
但需要详查一下。
deepblue 回复于:2003-12-18 13:30:13
将下面的结果贴上来:
1、select a.program,b.spid from v$session a,v$process b where a.paddr=b.addr
确认spid的进程号是同一个as的进程号吗?
2、ps -ef|grep as
3、showProcInfo as_process_no>;/tmp/threadinfo.txt
deepblue 回复于:2003-12-18 13:32:41
另外发生这种情况时,交易是否已经正常返回。
实在觉得有问题可以用CEDF跟踪一下。
也可以通过CEMT和CSTD查看一下交易的情况。
deepblue 回复于:2003-12-18 13:34:02
要把情况说清楚,实在不行,俺可以找一找IBM。
tzg 回复于:2003-12-18 13:39:14
引用:原帖由 "deepblue" 发表: select a.program,b.spid from v$session a,v$process b where a.paddr=b.addr
确认spid的进程号是同一个as的进程号吗?
不是的,因为一个as对应N个SESSION,所以不可能as的进程号和SESSION的spid进程号一样啊!
tzg 回复于:2003-12-18 13:43:01
引用:原帖由 "deepblue" 发表: 另外发生这种情况时,交易是否已经正常返回。
实在觉得有问题可以用CEDF跟踪一下。
也可以通过CEMT和CSTD查看一下交易的情况。
交易已经正常返回!
CEMT和CSTD不是很会用,能否指导一下。
另外我们没有定义交易,用的是系统默认的!
tzg 回复于:2003-12-18 13:52:05
引用:原帖由 "deepblue" 发表: 将下面的结果贴上来:
1、select a.program,b.spid from v$session a,v$process b where a.paddr=b.addr
确认spid的进程号是同一个as的进程号吗?
2、ps -ef|grep as
3、showProcInfo as_process_no>;/tmp/t..........
1、
PROGRAM SPID
cicsas@sfhc2 (TNS V1-V3) 29508
cicsas@sfhc2 (TNS V1-V3) 46264
cicsas@sfhc2 (TNS V1-V3) 16638
cicsas@sfhc2 (TNS V1-V3) 46820
cicsas@sfhc2 (TNS V1-V3) 27498
cicsas@sfhc2 (TNS V1-V3) 42870
cicsas@sfhc2 (TNS V1-V3) 35162
cicsas@sfhc2 (TNS V1-V3) 29838
cicsas@sfhc2 (TNS V1-V3) 40548
cicsas@sfhc2 (TNS V1-V3) 47490
cicsas@sfhc2 (TNS V1-V3) 15834
cicsas@sfhc2 (TNS V1-V3) 42122
cicsas@sfhc2 (TNS V1-V3) 46572
cicsas@sfhc2 (TNS V1-V3) 30832
2、
cics 25782 41664 0 13:40:47 - 0:02 cicsas cicssfhc 1441813 104 a0000000 b0000000
deepblue 回复于:2003-12-18 13:52:52
引用:原帖由 "tzg" 发表:
不是的,因为一个as对应N个SESSION,所以不可能as的进程号和SESSION的spid进程号一样啊!
刚才没有写清楚,spid是cicsas的子进程--与oracle打交道的shadow进程的进程号。
执行出来的结果是子进程号,父进程号就很好找了。
将前两步执行一下,贴出来。
是不是一个as对应多个SESSSION,这个语句一执行就知道了。
deepblue 回复于:2003-12-18 13:55:13
看spid的父进程是不是25782即可。
deepblue 回复于:2003-12-18 13:56:48
CEMT和CSTD的用法看一下随机文档。
交易可以不用定义,不用定义是默认是CPMI交易。
tzg 回复于:2003-12-18 13:58:07
3、
$t1 wait 0xe60217bc blocked 137095 k no sys _pthread_ksleep
$t2 wait 0xe6018fbc blocked 102269 k no sys _pthread_ksleep
$t3 wait 0x32db04b4 running 153031 k no sys _ptrgl
>;$t4 run blocked 122201 k no sys _pthread_ksleep
$t5 wait 0xe60268bc blocked 157719 k no sys _pthread_ksleep
$t6 wait 0xe60190bc blocked 102579 k no sys _pthread_ksleep
$t7 wait 0xe6026abc blocked 158411 k no sys _pthread_ksleep
$t8 wait running 140943 k no sys lthread_loop
$t9 wait 0xe60206bc blocked 132639 k no sys _pthread_ksleep
$t10 wait 0xe60272bc blocked 160331 k no sys _pthread_ksleep
$t11 wait 0xe6025abc blocked 154139 k no sys _pthread_ksleep
$t12 wait 0xe600dabc blocked 55909 k no sys _pthread_ksleep
$t13 wait 0xe60215bc blocked 136471 k no sys _pthread_ksleep
$t14 wait 0xe60123bc blocked 74597 k no sys _pthread_ksleep
=== Thread 1 ===
evt._pthread_ksleep(0x2023c9e0, 0x0, 0xffffffff, 0x0, 0xffffffff) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102004
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_timedwait(??, ??, ??) at 0xd0102f80
dce_pthread_cond_timedwait(??, ??, ??) at 0xd06bcac8
bde_CondTimedWait(??, ??, ??) at 0xd15bde80
SupPR_DoCondTimedWait(??, ??, ??, ??, ??) at 0xd1c3ecd4
SupPR_CondTimedWait(??, ??, ??) at 0xd1c3e93c
ConTS_GetASWork(??, ??, ??, ??, ??, ??, ??, ??) at 0xd1eb2184
main(??, ??) at 0x10000db0
=== Thread 2 ===
evt._pthread_ksleep(0x2ff220f0, 0x0, 0x0, 0x0, 0x2023c9e0) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102004
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_timedwait(??, ??, ??) at 0xd0102f80
dce_ptdexc_cond_timedwait(??, ??, ??) at 0xd06bec54
timer_loop() at 0xd08e5714
pthread._pthread_body(??) at 0xd00fc230
=== Thread 3 ===
ptrgl._ptrgl() at 0xd159dbc4
BaseStartFunc(??) at 0xd159ab84
BaseStartFunc(??) at 0xd159ab84
pthread._pthread_body(??) at 0xd00fc230
=== Thread 4 ===
evt._pthread_ksleep(??, ??, ??, ??, ??) at 0xd0105d34
signal.sigwait(??, ??) at 0xd0109230
dce_sigwait(??) at 0xd06bf79c
libdcelibc_r.sigwait(??) at 0xd0168738
bde_WaitForSignal(??, ??, ??) at 0xd15a27b4
TasTA_SRT(??) at 0xd1e77ae4
BaseStartFunc(??) at 0xd159ab84
pthread._pthread_body(??) at 0xd00fc230
=== Thread 5 ===
evt._pthread_ksleep(0x2023c9e0, 0x0, 0xffffffff, 0x0, 0xffffffff) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_pthread_cond_wait(??, ??) at 0xd06bca54
MessageHandlingThread(??) at 0xd170bc90
BaseStartFunc(??) at 0xd159ab84
pthread._pthread_body(??) at 0xd00fc230
=== Thread 6 ===
evt._pthread_ksleep(0x202845d0, 0x0, 0x0, 0x0, 0x2023c9e0) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102004
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_timedwait(??, ??, ??) at 0xd0102f80
dce_pthread_cond_timedwait(??, ??, ??) at 0xd06bcac8
bde_ThreadSleep(??) at 0xd159cf9c
CacheThread(??) at 0xd1b3ab84
BaseStartFunc(??) at 0xd159ab84
pthread._pthread_body(??) at 0xd00fc230
=== Thread 7 ===
evt._pthread_ksleep(0x202a16d0, 0x0, 0x0, 0x0, 0x202845d0) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_ptdexc_cond_wait(??, ??) at 0xd06bebdc
rpc_server_listen(??, ??) at 0xd08d6c44
trdce_ServerListen(??, ??) at 0xd16e1c78
ClientListen(??) at 0xd1726010
BaseStartFunc(??) at 0xd159ab84
pthread._pthread_body(??) at 0xd00fc230
=== Thread 8 ===
lthread_loop() at 0xd09c9dfc
lthread(??) at 0xd09ca270
lthread(??) at 0xd09ca270
pthread._pthread_body(??) at 0xd00fc230
=== Thread 9 ===
evt._pthread_ksleep(0x203b57e0, 0x0, 0x0, 0x0, 0x20396330) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_ptdexc_cond_wait(??, ??) at 0xd06bebdc
cthread_call_executor(??) at 0xd08e7dac
pthread._pthread_body(??) at 0xd00fc230
=== Thread 10 ===
evt._pthread_ksleep(0x203d4ae0, 0x0, 0x0, 0x0, 0x203b57e0) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_ptdexc_cond_wait(??, ??) at 0xd06bebdc
cthread_call_executor(??) at 0xd08e7dac
pthread._pthread_body(??) at 0xd00fc230
=== Thread 11 ===
evt._pthread_ksleep(0x203f2b20, 0x0, 0x0, 0x0, 0x203d4ae0) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_ptdexc_cond_wait(??, ??) at 0xd06bebdc
cthread_call_executor(??) at 0xd08e7dac
pthread._pthread_body(??) at 0xd00fc230
=== Thread 12 ===
evt._pthread_ksleep(0x20412f00, 0x0, 0x0, 0x0, 0x203f2b20) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_ptdexc_cond_wait(??, ??) at 0xd06bebdc
cthread_call_executor(??) at 0xd08e7dac
pthread._pthread_body(??) at 0xd00fc230
=== Thread 13 ===
evt._pthread_ksleep(0x20432110, 0x0, 0x0, 0x0, 0x20412f00) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_ptdexc_cond_wait(??, ??) at 0xd06bebdc
cthread_call_executor(??) at 0xd08e7dac
pthread._pthread_body(??) at 0xd00fc230
=== Thread 14 ===
evt._pthread_ksleep(0x20451320, 0x0, 0x0, 0x0, 0x20432110) at 0xd0105c98
evt._pthread_event_wait(??) at 0xd0106190
evt._pthread_event_wait(??) at 0xd0106190
cond._cond_wait_local(??, ??, ??) at 0xd0102130
cond._cond_wait(??, ??, ??) at 0xd01025ac
cond.pthread_cond_wait(??, ??) at 0xd010321c
dce_ptdexc_cond_wait(??, ??) at 0xd06bebdc
cthread_call_executor(??) at 0xd08e7dac
pthread._pthread_body(??) at 0xd00fc230
tzg 回复于:2003-12-18 14:04:54
引用:原帖由 "deepblue"]看spid的父进程是不是25782即可。 发表:
是说ORACLE SESSION的SPID吗?如何查呢?
deepblue 回复于:2003-12-18 17:29:10
举个例子吧:
SQL>; select a.program,b.spid from v$session a,v$process b where a.paddr=b.addr
2 /
PROGRAM SPID
------------------------------------------------ ---------
oracle@Csps (PMON) 27340
oracle@Csps (DBW0) 26610
oracle@Csps (LGWR) 22098
oracle@Csps (CKPT) 45736
oracle@Csps (SMON) 44566
oracle@Csps (RECO) 31574
cicsas@Csps (TNS V1-V3) 48378
cicsas@Csps (TNS V1-V3) 35738
cicsas@Csps (TNS V1-V3) 46484
cso_MoniServerV3@Csps (TNS V1-V3) 51528
csps30.exe 46192
PROGRAM SPID
------------------------------------------------ ---------
sqlplus@Csps (TNS V1-V3) 47812
12 rows selected.
看一下cicsas有关的进程号有三个,找一个吧,如46484
$ ps -ef|grep 46484
cics 46484 44976 0 Dec 17 - 0:00 oracleora817 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root 47816 62648 1 16:12:16 pts/9 0:00 grep 46484
$ ps -ef|grep cicsas
cics 25956 60128 0 00:00:00 - 0:02 cicsas CICSCSPS 1966108 108 a0000
000 b0000000
root 41212 62648 1 16:10:54 pts/9 0:00 grep cicsas
cics 44976 55840 0 Dec 17 - 0:00 cicsas DEEPBLUE 4194330 102 a0000
000 b0000000
可以看一下44976恰恰是cicsas的进程号。
cics 51808 55840 0 Dec 17 - 0:15 cicsas DEEPBLUE 4194330 101 a0000
000 b0000000
其他两个也可以通过这种方式验证。这样才能确定是一个as有多个session,否则你用什么一句说呢?
我能想到的,一个as中有多次link 其他PD的情况,才有可能有多个应用的线程。
但session应该是基于进程,而不是线程的。所以,你说的情况,我还是想不清楚。
我怀疑一个as对应多个session.
deepblue 回复于:2003-12-18 17:32:39
引用:原帖由 "deepblue" 发表: 可以看一下44976恰恰是cicsas的进程号。
cics 51808 55840 0 Dec 17 - 0:15 cicsas DEEPBLUE 4194330 101 a0000
000 b0000000
不好意思,我是从屏幕上粘过来的,其中,“cics 51808 55840 0 Dec 17 - 0:15 cicsas DEEPBLUE 4194330 101 a0000
000 b0000000”
应该在“可以看一下44976恰恰是cicsas的进程号。”前面。
tzg 回复于:2003-12-18 19:20:23
我查看了一下,我的所有ORACLE的SPID的父进程都是1
oracle 124154 1 0 18:58:51 - 0:00 oraclesfhc (LOCAL=NO)
oracle 124368 1 0 18:58:21 - 0:00 oraclesfhc (LOCAL=NO)
然后ps -ef|grep cicsas
cics 20552 41664 9 18:48:01 - 0:14 cicsas cicssfhc 1441813 106 a00
00000 b0000000
根本就对不上号
另外as就是对应多个session啊。只要把as进程KILL掉,ORACLE SESSION就相应地释放了!
tzg 回复于:2003-12-18 19:30:39
更夸张的是在高峰期,一个as竟然对应了104个ORACLE SESSION。但我把这个as KILL掉后,SESSION就全都释放了。
太难懂了!
因为我们是在一个程序中分为多个函数以实现不同的功能,实际上和一个as link多个PD差不多,不知道会不会是这个受影响的。
另外我又该如何控制一个as所对应的SESSION(交易)呢?
tzg 回复于:2003-12-18 19:33:46
还有想问一下,如果手工KILL掉as的话,会不会有什么负面的影响(对CICS其他方面而言),以为CICS文档中建议是不手工KILL as
yanbing 回复于:2003-12-19 02:29:13
cics我不是很懂,可惜帮不上忙!
谢谢deepblue和各位兄弟的热情,如果可以的话,请指教!
有各位的热心帮助才是CU最大的财富!!!!!
deepblue 回复于:2003-12-19 04:39:54
根据你说的情况,你的oracle是否用的MTS,而不是dedicated server?
如果是MTS方式,情形才和所说的类似,请确认。
另外,一般建议不要采用MTS方式。
tzg 回复于:2003-12-19 07:56:01
引用:原帖由 "deepblue" 发表: 根据你说的情况,你的oracle是否用的MTS,而不是dedicated server?
如果是MTS方式,情形才和所说的类似,请确认。
另外,一般建议不要采用MTS方式。
oracle用的是dedicated server
deepblue 回复于:2003-12-19 08:45:18
[quote="tzg"]我查看了一下,我的所有ORACLE的SPID的父进程都是1
oracle 124154 1 0 18:58:51 - 0:00 oraclesfhc (LOCAL=NO)
oracle 124368 1 0 18:58:21 - 0:00 oraclesfhc (LOCAL=NO)
然后p..........
我觉得很难理解。
只有oracle本身的server进程的父进程的进程号为1。其他shadow进程的父进程应该是proc程序进程的进程号。v$process中的spid就是shadow进程的进程号。
既然是dedicated server,因此,根据我说的例子肯定可以验证的。
不知道我说清楚了没有。
另外,如果方便,你能否把你的程序也贴出来看一下,不过我感觉你说的情况真的不可理解。
deepblue 回复于:2003-12-19 08:46:49
引用:原帖由 "tzg" 发表: 更夸张的是在高峰期,一个as竟然对应了104个ORACLE SESSION。但我把这个as KILL掉后,SESSION就全都释放了。
太难懂了!
因为我们是在一个程序中分为多个函数以实现不同的功能,实际上和一个as link多个PD差不多,..........
一个程序中的多个函数如何跟一个as link多个PD差不多?
tzg 回复于:2003-12-19 09:28:06
我们的程序太大了,不好贴。
实际上我们的主程序是在CICS SERVER端直接用PROC和数据库相连接的。
我所说的一个程序中的多个函数是这样的,举个例子
我的CICS SERVER端的PROC主程序是这样的
int a……
int b……
……
定义了多个函数。
然后在CICS CLIENT端生成DLL文件,再由语音平台的程序通过调用DLL,通过CICS传递数据来完成交易
例如我呼入一个电话,要实现某项功能。可能就调用到了a,b这两个函数。
这样的话不是和一个as link多个PD差不多吗?
大概的意思就是这样。
谢谢!!!
deepblue 回复于:2003-12-19 10:41:07
你用1pc还是no_xa?
我看你的switchloadfile用的是1pc的,我只是想确认一下。
tzg 回复于:2003-12-19 10:43:35
1pc
tzg 回复于:2003-12-19 10:49:07
另外我看了以下PROGRAM定义,user exit number定义的是0代表什么意思?
如果是一个交易调用一个PROGRAM对应一个as的话,那它交易完成后也应该有一个返回值,这样的话CICS才知道交易已经完成而terminate掉as,不知道这一步是如何实现的?
另外,因为我现在设的minserver为,也就是说当前活动的as应该是为1。但目前的情况不是这样的。由于业务的增加,又产生了2个as,而原先active的as在serveridletime值之后(5min)后却没有terminate,不知道这又是何故,我监控了一下,最长时间的as持续了大概有40分钟以上!
deepblue 回复于:2003-12-19 11:01:21
引用:原帖由 "tzg" 发表: 我们的程序太大了,不好贴。
实际上我们的主程序是在CICS SERVER端直接用PROC和数据库相连接的。
我所说的一个程序中的多个函数是这样的,举个例子
我的CICS SERVER端的PROC主程序是这样的
int a……
int b……..........
那对于前端而言,1个函数就ECI_CALL1次吗?
但一次CALL结束后才能进行下一词CALL呀。
你一直没有提供直接的证据征证明一个as对应多个session,除了用Kill as的方法。我建议你用我提供的例子,查看一下。
我觉得这个帖子确实也够长的了。:)
因此有几个建议:
1、将oracle815升为oracle8174。
2、仔细检查程序逻辑。
3、按照我曾经提供的例子认真查一下,虽然不能解决问题,或许可以提供一下素材。
一个进程如何能对应多个数据库的session?个人感觉象这么讨论下去可能很难找到原因。
也请其他高手指点。
tzg 回复于:2003-12-19 11:20:39
一个交易,1个函数就是ECI_CALL 1次。
但是在其中一个交易的过程中可能会有另外一个交易也有可能同时CALL这个函数啊!
我所说的一个as对应多个SESSION意思就是一个as对应多个交易,因而多个交易对应了多个session
前面我已经用你的例子查看了啊,就是前面贴出来的结果!
谢谢!
tzg 回复于:2003-12-19 11:23:07
deepblue老大可否给我一份银行或者其他具体应用的例子(配置、安装)等以供参考?谢谢!!!
tzg 回复于:2003-12-19 11:42:50
mail为:tongzuogang@hnhzfw.com
再次感谢deepblue
angel_xa 回复于:2003-12-19 14:01:07
通过CICS连接到ORACLE的进程的父进程号不可能是1的,并且一个AS进程是只对应ORACLE的一个SESSION的,就是说当提交了一个交易的时候,由CICS分配一个AS进行处理,然后通过一个SESSION连接到数据库进行处理,如果该交易正确执行后,那么刚才的那个SESSION会释放,但是AS不一定会掉的(这点前面已经说过了),然后该AS又可以去处理其他交易了。所以是不可能有一个AS进程对应几个SESSION的情况的(在DEDICATED模式下)。
前面说的,KILL AS进程是有风险的,有时会导致REGION宕掉。
angel_xa 回复于:2003-12-19 14:08:46
另外,虽然一个AS在处理完一个交易后处理另外的交易,但是其与ORACLE的连接的SESSION NUMBER --sid号是不变的(在该AS进程不掉的情况下,只有在重新产生AS进程才会对应不同的SESSION号的),但是可以查出其中执行的SQL语句已经不同了。一个AS是只对应一个SESSION的。我的系统里就是这样的。
tzg 回复于:2003-12-19 14:13:32
不是说通过CICS连接到ORACLE,而是CICS负责数据的传递。连接ORACLE是CICS SERVER端的PROC函数直接和ORACLE连接的。
正常情况下交易结束后是AS会释放SESSION,但现在确实是没有释放。
但是AS仍然可以处理别的交易!
tzg 回复于:2003-12-19 14:20:09
引用:原帖由 "angel_xa"]另外,虽然一个AS在处理完一个交易后处理另外的交易,但是其与ORACLE的连接的SESSION NUMBER --sid号是不变的(在该AS进程不掉的情况下,只有在重新产生AS进程才会对应不同的SESSION号的),但是可以查出其中执行的S.......... 发表:
看来大家都还没有明白我的意思。
我所讲的AS对应多个SESSION只是指一个AS处理多个交易
我们的应用AS本身是有一个SESSION和数据库相连接(这个肯定是唯一的),但是我们处理事务却是通过CICS SERVER端的程序来实现的,也就是说CICS SERVER端的程序本身又用PROC和数据库直接连接产生SESSION来处理用户的请求!
angel_xa 回复于:2003-12-19 14:24:15
一个AS不可能同时处理多个交易的,只能在一个交易完成后再处理后面分配的交易。在关于与ORACLE的连接上可能是我标书不准确,我不是搞开发的,是负责系统维护的,在我现在的系统中就是一个AS对应一个SESSION的。
angel_xa 回复于:2003-12-19 14:31:03
在cicsterm中可以查到当前系统中执行的交易,每个交易对应一个进程号,通过该进程号就可以在ORACLE中查到对应的sid 等信息,以及其执行的SQL语句,虽然可能会执行很多SQL语句,但是这都是处理这一个交易的过程,是程序里写的。这也只能叫一个交易。在这个交易执行完成后,该AS进程(如果不掉的话)会重新执行另外的交易,此时对应的交易码已经不一样了(除非碰巧又是处理和刚才相同的交易)。
tzg 回复于:2003-12-19 14:33:27
是的,但这些交易可能不是同时进行的啊。就是一个交易完成后立刻就进行下一个交易啊,但是却没有释放上一个交易产生的SESSION。
AS本身是对应一个SESSION,我所说的是交易中由CICS SERVER端的程序产生的SESSION由AS控制,当AS terminate掉后CICS SERVER端程序产生的SESSION也就相应地释放了!
tzg 回复于:2003-12-19 14:38:18
引用:原帖由 "angel_xa"]在cicsterm中可以查到当前系统中执行的交易,每个交易对应一个进程号,通过该进程号就可以在ORACLE中查到对应的sid 等信息,以及其执行的SQL语句,虽然可能会执行很多SQL语句,但是这都是处理这一个交易的过程,是程.......... 发表:
我们的交易大多都是一样,都是查询某项信息。
另外cicsterm该如何使用,我用cicsterm命令后出现如下提示:
CCL7054I Server 'CICSSFHC' is currently unavailable
CCL7026I Press Clear to continue. The emulator will terminate
angel_xa 回复于:2003-12-19 14:38:53
AS terminate后 session是要释放的,我的系统就是这样,如果没有释放那就是存在问题。
tzg 回复于:2003-12-19 14:45:38
引用:原帖由 "angel_xa"]AS terminate后 session是要释放的,我的系统就是这样,如果没有释放那就是存在问题。 发表:
as terminate后SESSION是会释放。但现在的问题是我的AS并没有实时地terminate,因为处理一个交易结束后它又马上处理另外一个交易,这样就导致了SESSION一直往上增加!
tzg 回复于:2003-12-19 14:51:43
请教angel_xa老大,cicsterm该怎么用?
angel_xa 回复于:2003-12-19 14:52:36
那你的AS进程到底terminate没有,如果是AS进程terminate了,那么session肯定是释放的。重新产生的AS进程才会对应一个新的SESSION。
你前面出现的父进程为1的那些ORACLE进程是不正常的,有点类似于僵死进程了,实际是没有进程事务处理的,可以KILL的。
angel_xa 回复于:2003-12-19 14:53:36
只有ORACLE本身的那几个后台进程的父进程才该是1的。
tzg 回复于:2003-12-19 15:04:11
AS进程terminate的时间不等,如果是空闲的就在SERVERIDLE时间(5MIN)后就TERMINATE了。但ACTIVE的可能就长了,10分钟、20分钟甚至于50分钟后才TERMINATE
AS terminate后SESSION肯定是释放的了!
很奇怪啊,我的ORALCE数据库所有的ORACLE的父进程都是1,包括我刚刚用SQLPLUS连接上去的SESSION,不知道是什么原因?
angel_xa 回复于:2003-12-19 15:44:47
引用:原帖由 "tzg"]请教angel_xa老大,cicsterm该怎么用? 发表:
这个讲起来比较费劲,其中涉及到一些子命令,在现场比较好说一些:
先设置TERM=dtterm
用root执行cicsterm后,选择你使用的REGOIN名后回车进入,
然后就是一些子命令了,如CSTD,CEMT等等,这个你最好查一下相关文档吧,
这样说不太好说明白,在现场比较好说一些。
你的ORACLE的进程父进程都是1呀,这个应该不正常的,你ORACLE是哪个版本,是DEDICATE模式吗?
angel_xa 回复于:2003-12-19 15:49:48
引用:原帖由 "tzg" 发表: AS进程terminate的时间不等,如果是空闲的就在SERVERIDLE时间(5MIN)后就TERMINATE了。但ACTIVE的可能就长了,10分钟、20分钟甚至于50分钟后才TERMINATE
AS terminate后SESSION肯定是释放的了!
很奇怪啊,我的OR..........
AS进程的数量是由定义的MAXSERVER和MINSERVER决定的,如果当前交易很多,那就可能打到MAX数量,这时AS进程一般是不会TERMINATE的,到了系统交易不多的时候,有些AS进程就会TERMINATE,但是至少会有MIN数量的AS进程的,这和系统的繁忙程度有关。
tzg 回复于:2003-12-19 16:44:18
引用:原帖由 "angel_xa" 发表:
这个讲起来比较费劲,其中涉及到一些子命令,在现场比较好说一些:
先设置TERM=dtterm
用root执行cicsterm后,选择你使用的REGOIN名后回车进入,
然后就是一些子命令了,如CSTD,CEMT等等,这个你最好查一下相?.........
oracle版本是8.1.5,是delicated server模式!
设置了还是一样!
CCL7054I Server 'CICSSFHC' is currently unavailable
CCL7026I Press Clear to continue. The emulator will terminate
1B? CCL7054I CICSSFHC
可能还得在CICS做一些设置!
deepblue 回复于:2003-12-20 17:59:43
as结束后,oracle的session并不释放,这就是中间件的优势。session的缓存,避免了重复的connect和disconnect。只有as down下来的时候,session才释放。
但一个as应该只对应一个session,oracle7.1.3之前的xa是两个session.
另外,我觉得你一直没有把问题描述清楚。
能否把我给的命令执行以下,把整个屏幕粘贴出来。否则大家都说的驴头不对马嘴。
我觉得根据你说的情况,根本不会这种情况。
噢,想起来了,只有一种情况oracle的shadow进程的父进程(应该是proc程序的进程)可能找不到,就是说父进程异常终止,但shadow进程没有exit,这个时候shadow进程需要PMON进程来进行清理。这个也是PMON的一个职能。
如果说是这种情况,请检查你的proc程序。
建议你升级到oracle8174。
deepblue 回复于:2003-12-20 18:05:40
引用:原帖由 "deepblue"]as结束后,oracle的session并不释放,这就是中间件的优势。session的缓存,避免了重复的connect和disconnect。只有as down下来的时候,session才释放。 发表:
sorry,手误,应该说交易结束后,只要as存在,session并不释放。就是说session和交易没有关系,只和as有关。session的缓存,是中间件的优势。
deepblue 回复于:2003-12-21 12:42:47
引用:原帖由 "deepblue" 发表: 噢,想起来了,只有一种情况oracle的shadow进程的父进程(应该是proc程序的进程)可能找不到,就是说父进程异常终止,但shadow进程没有exit,这个时候shadow进程需要PMON进程来进行清理。这个也是PMON的一个职能。
想了一下,在这种情况下,你的CICS肯定会出现很多DUMP的。
尝试把你的distributed_transactions和你的MaxServer设的一样大,看有什么错误提示。
另外,建议在你的XAOPEN的串中增加log目录和调试信息级别项,举个例子:
XAOpen="Oracle_XA+Acc=P/aaa/aaa+SesTm=10+LogDir=/tmp/ora817xalog+DbgFl=15"
这样在你的/tmp/ora817xalog目录下就有XA的日志,可以看一下。
反正总想不通你说的情况。
其实CICS和ORALCE也没有什么神秘的,只要你知道工作的原理,肯定能用实际的操作找到确定的问题。
无法登陆你的环境,否则也不至于这么费劲,呵呵。
tzg 回复于:2003-12-22 09:38:50
引用:原帖由 "deepblue" 发表:
sorry,手误,应该说交易结束后,只要as存在,session并不释放。就是说session和交易没有关系,只和as有关。session的缓存,是中间件的优势。
我所说的SESSION不是AS所对应的SESSION,而是CICS SERVER端的PROC程序和数据库连接所产生的SESSION。
另外我看了AS所对应的SESSION的父进程也是1,真实奇怪了!
tzg 回复于:2003-12-22 09:44:10
[quote="deepblue"]
无法登陆你的环境,否则也不至于这么费劲,呵呵。
quote]
deepblue老大,能否搞知您的联系方式?
deepblue 回复于:2003-12-22 17:45:14
引用:原帖由 "tzg" 发表:
我所说的SESSION不是AS所对应的SESSION,而是CICS SERVER端的PROC程序和数据库连接所产生的SESSION。
另外我看了AS所对应的SESSION的父进程也是1,真实奇怪了!
如果你用的是XA,则proc程序中是没有connect动作的,是as和数据库链接,就是说,proc和数据库的连接就是as和数据库的连接。
angel_xa 回复于:2003-12-22 21:36:06
我的理解和deepblue是相同的。
tzg 回复于:2003-12-23 08:18:01
引用:原帖由 "deepblue" 发表:
如果你用的是XA,则proc程序中是没有connect动作的,是as和数据库链接,就是说,proc和数据库的连接就是as和数据库的连接。
按这样说的话,那应该就是有多少个CICS的ORACLE SESSION就应该有多少个AS。
但事实并不是这样的。当ORACLE SESSION达到100来个的时候都才只有一个AS,这又该如何解释呢?
tzg 回复于:2003-12-23 08:18:36
原来PROC程序中是有CONNECT的,后来把它改掉后问题依旧!
tzg 回复于:2003-12-23 08:34:34
不知道你们的应用里有没有写USER EXIT的程序?
你们那是如何判断一个交易已经完成了的呢?
deepblue 回复于:2003-12-23 09:21:15
写CICS程序和普通的程序是不同的,比如:用XA的话是不能用connect的,user exit一定不能用exit,而应该用CICS RETURN。
你怎么证明那些SESSION全部是对应于一个AS。我给你提供了方法,但却一直没有拿出证据。
请确认几件事情:
1 XAD的类型不是NO_XA.
2 ORACLE的NET8是DEDICATED SERVER
3 CICS的程序的规范性。CICS程序与普通程序的写法是有很多区别的,请你仔细阅读一下有关的书籍或者手册。
如果满足上述条件,用我提供的方法肯定能找出问题所在的大方向。
另外我让你修改DISTRIBUTED_TRANSACTIONS,然后跟踪XALOG,你是否跟踪?
其实解决问题只能通过这种具体的方法去捕捉,否则指望某个所谓的“高手”来一下子指出问题所在,恐怕比较难。
其实,你要是想大家一起解决这个问题,请按照这个帖子中提到的思路,自己操作以下,把所有的步骤进行屏幕拷贝贴出来,包括执行的命令,屏幕显示的结果(就像我曾经给你贴过的类似),这样也有一个沟通的基础,否则你说你的,我做我的,你说肯定是这样,我说不可能。这样解决问题就比较困难。
以上建议,供参考。你也可以继续按照自己的做法,只要能解决问题就行。
deepblue 回复于:2003-12-23 09:37:10
就像你曾经贴出来的,我们来分析一下。
1、
PROGRAM SPID
cicsas@sfhc2 (TNS V1-V3) 29508
cicsas@sfhc2 (TNS V1-V3) 46264
cicsas@sfhc2 (TNS V1-V3) 16638
cicsas@sfhc2 (TNS V1-V3) 46820
cicsas@sfhc2 (TNS V1-V3) 27498
cicsas@sfhc2 (TNS V1-V3) 42870
cicsas@sfhc2 (TNS V1-V3) 35162
cicsas@sfhc2 (TNS V1-V3) 29838
cicsas@sfhc2 (TNS V1-V3) 40548
cicsas@sfhc2 (TNS V1-V3) 47490
cicsas@sfhc2 (TNS V1-V3) 15834
cicsas@sfhc2 (TNS V1-V3) 42122
cicsas@sfhc2 (TNS V1-V3) 46572
cicsas@sfhc2 (TNS V1-V3) 30832
2、
cics 25782 41664 0 13:40:47 - 0:02 cicsas cicssfhc 1441813 104 a0000000 b0000000
第一条中显示的是ORACLE的SHADOW进程的进程号,如29508等,这些进程的父进程号是否是25782。如果你经过一一核对发现,所有的SHADOW进程的父进程号就是现在存在的你第二条中列出的25782,那就说明这些SESSION的对应的前台进程就是这个CICS AS。
你是否核对?
如果全部对应这个CICS AS,正像你所说,请把你的数据处理的程序框架贴出来。看看为什么这个怪,我认为这种情况应该是不存在的。
或许你会发现这些SESSION对应的SHADOW进程的父进程压根已经不存在了,这个就是我曾经跟你说过的情况,那说明你的程序有问题,或数据库或CICS有BUG。你是否将这些软件的补丁都打上了?我们曾经遇到过,程序补丁未打,造成CICS DUMP的情况。
如果,还觉得有问题,就按照我说的方法察看CICS XA的LOG。
这样一步步的可能思路会清晰一些,而且也逻辑性。就是我们解决不了,找IBM或ORACLE,我们也一个清晰的描述。
我认为解决具体的问题虽然重要,但解决问题的思路和方法应该更重要。
希望我的这些粗浅的想法对你解决这个问题有些帮助。
希望你在解决这个问题后,写一个问题处理报告。我们现在就是这样的。这样对知识也是一种积累和沉淀。
tzg 回复于:2003-12-23 09:51:41
确认:
1、XAD的类型不是NO_XA
2、ORACLE的NET8是DEDICATED SERVER
3、CICS程序规范是程序员所编写,没问题
tzg 回复于:2003-12-23 09:52:11
步骤:
1、select a.program,b.spid from v$session a,v$process b where a.paddr=b.addr and osuser='cics'
PROGRAM SPID
cicsas@sfhc2 (TNS V1-V3) 127066
cicsas@sfhc2 (TNS V1-V3) 32160
cicsas@sfhc2 (TNS V1-V3) 19540
cicsas@sfhc2 (TNS V1-V3) 112270
cicsas@sfhc2 (TNS V1-V3) 64434
cicsas@sfhc2 (TNS V1-V3) 28024
cicsas@sfhc2 (TNS V1-V3) 100458
cicsas@sfhc2 (TNS V1-V3) 42798
cicsas@sfhc2 (TNS V1-V3) 122914
2、ps -ef|grep cicsas
cics 56448 47166 0 09:30:21 - 0:00 cicsas cicssfhc 50987025 104 a0000000 b0000000
3、ps -ef|grep 127066
oracle 127066 1 0 09:36:10 - 0:01 oraclesfhc (LOCAL=NO)
ps -ef|grep 32160
oracle 32160 1 0 09:36:13 - 0:00 oraclesfhc (LOCAL=NO)
ps -ef|grep 19540
oracle 19540 1 0 09:36:15 - 0:00 oraclesfhc (LOCAL=NO)
其余的几个ORACLE SESSION都一样:所有的父进程都是1
tzg 回复于:2003-12-23 10:34:27
CICS的版本是4.2,补丁号为9即为4.2.0.9
ORACLE的版本号为8.1.5.0.0
改了XAD的描述为:
XAOpen="Oracle_XA+Acc=P/sfhc@sfhc/insysf1we9+SesTm=10+LogDir=/tmp/xa+DbgFl=15"
但没有改ORACLE的参数DISTRIBUTED_TRANSACTIONS(系统使用中)
可是没有产生XA LOG,真是奇怪!
deepblue 回复于:2003-12-23 12:07:19
你改完XAD后是否冷启?否则是不起作用的。
另外,现在我才注意到你的shadow进程的父进程为1,是因为你是通过sqlnet来间接数据库的。
能否把你的init.ora和sqlnet.ora tnsnames.ora listener.ora等贴出来。
我觉得和数据库设置有关。
tzg 回复于:2003-12-23 13:30:42
init.ora
compatible = "8.1.0"
db_name = sfhc
instance_name = sfhc
service_names = sfhc
control_files = ("/soft/oracle/oradata/OraCtl1.ctl","/soft/oracle/oradata/OraCtl2.ctl","/soft/oracle/oradata/OraCtl3.ctl")
db_files = 1000
db_block_size = 8192
db_file_multiblock_read_count =8 #2003/7/16 modify by tjg
db_block_buffers = 204800
shared_pool_size = 524288000
shared_pool_reserved_size = 125829120
processes = 1500
sessions =1000
log_buffer = 1048576
rollback_segments=(r01,r02,r03,r04)
background_dump_dest = /soft/oracle/admin/sfhc/bdump
core_dump_dest = /soft/oracle/admin/sfhc/cdump
user_dump_dest = /soft/oracle/admin/sfhc/udump
remote_login_passwordfile = exclusive
os_authent_prefix = ""
pre_page_sga = yes
optimizer_features_enable = 8.1.5
optimizer_mode = choose
optimizer_percent_parallel = 50
optimizer_index_caching = 30
disk_asynch_io = true
tape_asynch_io = true
large_pool_size = 52428800 #2003/12/08 add by tzg
resource_limit = true
gc_releasable_locks = 89600 #db_block_buffers
enqueue_resources = 6000
open_cursors = 300
session_cached_cursors = 30
sort_area_size = 4194304
sort_area_retained_size = 1048576
sort_multiblock_read_count = 8
hash_join_enabled = true
hash_area_size = 16777216
hash_multiblock_io_count = 8
bitmap_merge_area_size = 4194304
create_bitmap_area_size = 12582912
star_transformation_enabled = true
query_rewrite_enabled = true
_push_join_predicate = true
log_checkpoint_interval = 9999999
log_checkpoint_timeout = 0
log_checkpoints_to_alert = true
log_archive_start = true
log_archive_dest_1 = "location=/oracle_arch reopen=10"
log_archive_format = %t_%s.dbf
nls_language = "simplified chinese"
nls_territory = "china"
nls_date_format = "YYYY-MM-DD"
job_queue_processes=1
job_queue_interval=60
tzg 回复于:2003-12-23 13:32:27
listener.ora
# LISTENER.ORA Configuration File:/soft/oracle/product/8.1.5/network/admin/listener.ora
# Generated by Oracle Net8 Assistant
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = sfhc)
(ORACLE_HOME = /soft/oracle/product/8.1.5)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.210)(PORT = 1521))
)
)
)
tzg 回复于:2003-12-23 13:33:18
tnsnames.ora
sfhc=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.210)(PORT = 1521))
)
(CONNECT_DATA =
(SID = sfhc)
)
)
was =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.9)(PORT = 1521))
)
(CONNECT_DATA =
(SID = was )
)
)
sfhc1=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.212)(PORT = 1521))
)
(CONNECT_DATA =
(SID = sfhc)
)
)
sfhc2=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.213)(PORT = 1521))
)
(CONNECT_DATA =
(SID = sfhc)
)
)
rman=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 128.1.1.182)(PORT = 1521))
)
(CONNECT_DATA =
(SID = rman)
)
)
tzg 回复于:2003-12-23 13:35:17
无sqlnet.ora
修改XAD后冷启动了CICS
deepblue 回复于:2003-12-24 17:45:49
看了一下你提供的脚本也没有什么。
正像上面的分析,通过SQL*NET的listener来连接数据产生的shadow进程的父进程确实是1。因此,也比较难于确定真正对应的as。
我一直不明白,一个as怎么会有多个session。我的理解从理论上应该是不会的。
因此,可以找一下为什么是这样的。为什么会产生那么多的session.有没有其他的region也连到同一个数据库?
可以对数据库加trace。如 用10046事件,打开trace.或者用dbms_system.set_trace_in_session(sid,serial#,true/false),然后看数据库的trace文件。
具体的方法你可以在google上搜索一下,估计能搜出一大堆。如果不清楚,我可以告诉你具体的方法。
另外,可否不要通过listener方式来连接数据库?改为连接本地库试一下,我以前说的方法就可以一目了然地看出来是怎么回事。
|