各位高手们帮帮忙,很急!1、讲解一下session_cached_cursors的概念,作用,用法,以及是不是设置的越大越好?
2、我用U1BP(沒有DBA权限)的账号进数据库,执行三条SELECT语句,我如何查看U1BP用户打开的游标数(如果不能的话,那么DBA是否可以查看以及怎么查看)?
3、如何获为游标执行的 SQL?
4、select distinct sid from v$mystat;语句中SID什么意思,什么样的对象有该SID,v$mystat视图的作用是不是每个用户都可以这样查询(如U1BP能不能执行该SQL,)?
5、最后就是上面相查询后,查询结果的一些栏位能不能详细解释?
(以上问题能有测试步骤或记录最好!)
2、我用U1BP(沒有DBA权限)的账号进数据库,执行三条SELECT语句,我如何查看U1BP用户打开的游标数(如果不能的话,那么DBA是否可以查看以及怎么查看)?
3、如何获为游标执行的 SQL?
4、select distinct sid from v$mystat;语句中SID什么意思,什么样的对象有该SID,v$mystat视图的作用是不是每个用户都可以这样查询(如U1BP能不能执行该SQL,)?
5、最后就是上面相查询后,查询结果的一些栏位能不能详细解释?
(以上问题能有测试步骤或记录最好!)
解决方案 »
- 游标与update问题~在线等
- 谁能帮忙写一个oracle 下的查询所有表的字段信息的句子, 分不够再开贴
- 向各位大虾求电子版的pro*c相关书籍
- 一个关于作业job执行时间问题:
- ORACLE客户端导入/导出数据的问题!
- 请教一个两表关联判断的SQL语句
- 权限 分配
- 如果procedure中执行的是一条SQL语句,如何得到返回的数据集?
- oracle9i中的一些工具都被放到哪去了阿??
- 请教下面的pl/sql块有什么错,我是从816教材上抄下来的,运行时总出现“SP2-0552: 未说明结合变量"J"”的这样的错误,难道不能打开动态cu
- 求助,分区表之上建立视图,查询时不走索引的问题
- oracle存中文标点符号造成乱码的问题
SESSION_CACHED_CURSORS specifies the number of session cursors to cache
上面是官方文档上的解释
SESSION_CACHED_CURSORS这个参数用于指定缓存的会话游标数量。不是设置的越大越好 要根据实际需要与实际环境来权衡 选择最优的值2
我打开了两个SQL*PLUS窗口
一个用SYS登陆
一个用HH登陆先看看SYS窗口的内容
SQL> select count(*) from v$open_cursor where user_name='HH';
--查询当前HH会话打开的游标数量 COUNT(*)
----------
14SQL> select sql_text from v$open_cursor where user_name='HH';SQL_TEXT
------------------------------------------------------------
select pos#,intcol#,col#,spare1,bo#,spare2 from icol$ where
select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,i.fla
select obj#,type#,ctime,mtime,stime,status,dataobj#,flags,oi
select name,intcol#,segcol#,type#,length,nvl(precision#,0),d
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,
select t.ts#,t.file#,t.block#,nvl(t.bobj#,0),nvl(t.tab#,0),t
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt,
SELECT DECODE('A','A','1','2') FROM DUAL
insert into sys.aud$( sessionid,entryid,statement,ntimestamp
SELECT USER FROM DUAL
BEGIN DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL); END;SQL_TEXT
------------------------------------------------------------
SELECT CHAR_VALUE FROM SYSTEM.PRODUCT_PRIVS WHERE (UPPER('
update sys.aud$ set ses$actions=merge$actions(ses$actions,:3
SELECT ATTRIBUTE,SCOPE,NUMERIC_VALUE,CHAR_VALUE,DATE_VALUE F14 rows selected.SQL> select sql_text from v$open_cursor where user_name='HH';SQL_TEXT
------------------------------------------------------------
select pos#,intcol#,col#,spare1,bo#,spare2 from icol$ where
select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,i.fla
select obj#,type#,ctime,mtime,stime,status,dataobj#,flags,oi
select name,intcol#,segcol#,type#,length,nvl(precision#,0),d
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,
select t.ts#,t.file#,t.block#,nvl(t.bobj#,0),nvl(t.tab#,0),t
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt,
SELECT DECODE('A','A','1','2') FROM DUAL
insert into sys.aud$( sessionid,entryid,statement,ntimestamp
SELECT USER FROM DUAL
BEGIN DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL); END;SQL_TEXT
------------------------------------------------------------
select * from scott.dept --这条就是增加的记录
SELECT CHAR_VALUE FROM SYSTEM.PRODUCT_PRIVS WHERE (UPPER('
update sys.aud$ set ses$actions=merge$actions(ses$actions,:3
SELECT ATTRIBUTE,SCOPE,NUMERIC_VALUE,CHAR_VALUE,DATE_VALUE F15 rows selected.SQL>HH窗口中进行的操作如下
SQL> conn hh/hh
Connected.
SQL> select * from scott.dept; DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON可以看到 当HH用户对SCOTT.DEPT表进行查询了以后 上面SYS窗口里再次进行查询时多出了一条内容 而从sql_text字段的内容也可以看到 就是查询表SCOTT.DEPT的语句(上面红色标出了已经)3
就像上面那样 选择V$OPEN_CURSOR中的sql_text字段4
SID在官方文档上的解释为ID of the current session
就是说对当前会话的唯一标示值
v$mystat
This view contains statistics on the current session.
这个视图是包含的是一些当前会话的统计信息 5
V$MYSTATThis view contains statistics on the current session.Column Datatype Description
SID NUMBER ID of the current session
STATISTIC# NUMBER Number of the statistic
VALUE NUMBER Value of the statistic
SID就是当前会话的标示符
STATISTIC#是统计指标编号
VALUE就是相应的统计指标的值注:第二题和第三题我以前从来没研究过 今天看到你这个问题就去文档里搜了些和cursor相关的视图 自己的想法而已 不能确保一定正确 如果有错误的话欢迎大家指正
session_cached_cursors这个参数是控制session cursor cache的大小的。session_cached_cursors定义了session cursor cache中存储的cursor的个数。这个值越大,则会消耗的内存越多。
另外检查这个参数是否设置的合理,可以从两个statistic来检查。SQL> select name,value from v$sysstat where name like ''%cursor%'';NAME VALUE
---------------------------------------------------------------- ----------
opened cursors cumulative 16439
opened cursors current 55
session cursor cache hits 8944
session cursor cache count 101
cursor authentications 353SQL> select name,value from v$sysstat where name like ''%parse%'';NAME VALUE
---------------------------------------------------------------- ----------
parse time cpu 0
parse time elapsed 0
parse count (total) 17211
parse count (hard) 1128
parse count (failures) 2session cursor cache hits 和parse count(total) 就是总的parse次数中,在session cursor cache中找到的次数,所占比例越高,性能越好。如果比例比较低,并且有剩余内存的话,可以考虑加大该参数。Oracle 9i及以前,该参数缺省是0,10G上缺省是20。
select count(*) from v$open_cursor where sid in (select sid from v$session where osuser='oracle' and machine='ls' );
/***BXT3用户的连接数以及游标数量 ****/
select o.sid, osuser, machine, count(*) num_curs
from v$open_cursor o, v$session s
where user_name = 'BXT3' and o.sid=s.sid and machine='ls'
group by o.sid, osuser, machine
order by num_curs desc; 3、如何获为游标执行的 SQL?
select sql_text from v$open_cursor
v$open_cursor是oracle提供的一张查看每个session打开过的cursor的视图,它的表结构如下
SQL> desc v$open_cursor
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
SADDR RAW(4)
SID NUMBER
USER_NAME VARCHAR2(30)
ADDRESS RAW(4)
HASH_VALUE NUMBER
SQL_TEXT VARCHAR2(60)当我们执行一条sql语句的时候,我们将会在shared pool产生一个library cache object,cursor就是其中针对于sql语句的一种library cache object.另外我们会在pga有一个cursor的拷贝,同时在客户端会有一个statement handle,这些都被称为cursor,在v$open_cursor里面我们可以看到当前打开的cursor和pga内cached cursor.
是v$sesstat的一个子集,返回当前session的统计项。当通过触发器审计session资源使用,可以使用v$mystat来捕获资源使用,这将比直接扫描v$sesstat的列要节省资源的多。 -v$sessstat按照OracleOnlineBook中的描述, v$sesstat 存储 session 从login到logout的详细 资源使用统计 。类似于v$sysstat,该视图存储下列类别的统计: * 事件 发生次数 的 统计,如用户提交数。
* 数据产生,存取或者操作的total列(如:redo size)
* 执行操作所花费的时间累积,例如session CPU占用(如果TIMED_STATISTICS值为true)
这个你不用操心
你看下上面我做的实验操作
SQL> select sql_text from v$open_cursor where user_name='HH'; SQL_TEXT
------------------------------------------------------------
select pos#,intcol#,col#,spare1,bo#,spare2 from icol$ where
select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,i.fla
select obj#,type#,ctime,mtime,stime,status,dataobj#,flags,oi
select name,intcol#,segcol#,type#,length,nvl(precision#,0),d
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,
select t.ts#,t.file#,t.block#,nvl(t.bobj#,0),nvl(t.tab#,0),t
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt,
SELECT DECODE('A','A','1','2') FROM DUAL
insert into sys.aud$( sessionid,entryid,statement,ntimestamp
SELECT USER FROM DUAL
BEGIN DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL); END; SQL_TEXT
------------------------------------------------------------
select * from scott.dept --这条就是增加的记录
SELECT CHAR_VALUE FROM SYSTEM.PRODUCT_PRIVS WHERE (UPPER('
update sys.aud$ set ses$actions=merge$actions(ses$actions,:3
SELECT ATTRIBUTE,SCOPE,NUMERIC_VALUE,CHAR_VALUE,DATE_VALUE F 15 rows selected. 上面除了select * from scott.dept是我自己执行的SQL语句
其他14条都不是我手动执行的