隐式游标,可总发现这些游标没关???? 不可能的
游标没关闭的情况-----------------------------------------------------------------------------------------create view GV$OPEN_CURSOR as select inst_id,kgllkuse, kgllksnm, user_name, kglhdpar,
kglnahsh, kglnaobj from x$kgllk where kglhdnsp = 0 and kglhdpar != kgllkhdl;
-- v$sql 中 cursor 的 address = kgllkhdl = kglhdpar
-- 所以 v$sql_cursor 中记录的只是 子游标的情况 v$sql,v$sql_plan 等视图也一样,记录子游标
在 v$sql 的底层表X$KGLOB 和 v$sql_cursor 的底层表 x$kgllk X$KGLOB.KGLHDADR = x$kgllk.KGLLKHDL 有父和子游标
X$KGLOB.KGLHDPAR = x$kgllk.KGLHDPAR 父游标
X$KQLFXPL 是执行计划 v$sql_plan 的底层视图
X$KQLFXPL.KQLFXPL_HADD = x$kgllk.KGLLKHDL
X$KQLFXPL.KQLFXPL_PHAD = x$kgllk.KGLLKHDL.父游标的address
create view V$OPEN_CURSOR as select SADDR , SID , USER_NAME , ADDRESS , HASH_VALUE , SQL_TEXT
from GV$OPEN_CURSOR where inst_id = USERENV('Instance');
select KGLLKFLG,KGLNAOBJ,user_name from X$KGLLK where user_name='LGONE';
KGLLKFLG KGLNAOBJ USER_NAME
---------- ------------------------------------------------------------ -------------
2 SELECT * from t1 LGONEKGLLKFLG 是一个lock 它为 8 是 cursor 没有释放 但它指向的 语句不一定就是 cursor 可能是 plsql块
块中包含的 cursor 没释放而已
insert 语句同样产生的是一个 8 的 lock(在for循环中,sql脚本中的试验) 但这lock马上释放的没有关闭的cursor 在 v$open_cursor 中也可以看到的select count(KGLLKFLG) from X$KGLLK where user_name='LGONE' and KGLLKFLG=8;
19 -- 这里是19 因为在 init 中设置的是 20 因为语句本身就要占一个 cursor 所以是 19select * from V$ACCESS where owner='LGONE'; 这语句可以看出现在没释放的cursor 的一些情况
它的底层表还是有 X$KGLLKX$KGLCURSOR
游标没关闭的情况-----------------------------------------------------------------------------------------create view GV$OPEN_CURSOR as select inst_id,kgllkuse, kgllksnm, user_name, kglhdpar,
kglnahsh, kglnaobj from x$kgllk where kglhdnsp = 0 and kglhdpar != kgllkhdl;
-- v$sql 中 cursor 的 address = kgllkhdl = kglhdpar
-- 所以 v$sql_cursor 中记录的只是 子游标的情况 v$sql,v$sql_plan 等视图也一样,记录子游标
在 v$sql 的底层表X$KGLOB 和 v$sql_cursor 的底层表 x$kgllk X$KGLOB.KGLHDADR = x$kgllk.KGLLKHDL 有父和子游标
X$KGLOB.KGLHDPAR = x$kgllk.KGLHDPAR 父游标
X$KQLFXPL 是执行计划 v$sql_plan 的底层视图
X$KQLFXPL.KQLFXPL_HADD = x$kgllk.KGLLKHDL
X$KQLFXPL.KQLFXPL_PHAD = x$kgllk.KGLLKHDL.父游标的address
create view V$OPEN_CURSOR as select SADDR , SID , USER_NAME , ADDRESS , HASH_VALUE , SQL_TEXT
from GV$OPEN_CURSOR where inst_id = USERENV('Instance');
select KGLLKFLG,KGLNAOBJ,user_name from X$KGLLK where user_name='LGONE';
KGLLKFLG KGLNAOBJ USER_NAME
---------- ------------------------------------------------------------ -------------
2 SELECT * from t1 LGONEKGLLKFLG 是一个lock 它为 8 是 cursor 没有释放 但它指向的 语句不一定就是 cursor 可能是 plsql块
块中包含的 cursor 没释放而已
insert 语句同样产生的是一个 8 的 lock(在for循环中,sql脚本中的试验) 但这lock马上释放的没有关闭的cursor 在 v$open_cursor 中也可以看到的select count(KGLLKFLG) from X$KGLLK where user_name='LGONE' and KGLLKFLG=8;
19 -- 这里是19 因为在 init 中设置的是 20 因为语句本身就要占一个 cursor 所以是 19select * from V$ACCESS where owner='LGONE'; 这语句可以看出现在没释放的cursor 的一些情况
它的底层表还是有 X$KGLLKX$KGLCURSOR
解决方案 »
- 请问大家一个SQL语句里面字符串计算的问题
- ◆oracle9i 存储过程返回数据集的写法?◆
- exp和imp及字符集问题,望各位大侠帮我
- oracle中查询时间等于当前时间后两天该怎么写语句
- 关于Oracle一个函数
- ORACLE数据库连接出现ora-12541:TNS:无连接
- oracle 8 select TO_NUMBER('ff','XXXXXX') from dual 不能使用,是版本太低?
- 求存储过程,刚学,不懂得写
- 急!!! 请问:DB_E_BADORDINAL(0x80040E55) 是什么错,怎么解决?!!!
- 求助:数据库一个字段存储多个值,想取其中的最大一个,该如何处理
- 求助!!!
- SQL语句中自定义函数应用问题
显示游标需要人工关闭