欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle常用视图v$mystat v$sesstat v$sysstat v$statname v$thread v$ parameter v$session v$process

程序员文章站 2022-09-04 15:30:12
这两天看了盖国强老师的<<深入浅出>>,很佩服盖老师钻研的精神。书中常用到一个查询语句,为了获取当前会话的跟踪文件路径,sql如下: 语句中包含了视图 >v$mystat v$thread v$ parameter v$session v$process 对于v$mystat视图在网上查了一下就出现 ......

      这两天看了盖国强老师的<<深入浅出>>,很佩服盖老师钻研的精神。书中常用到一个查询语句,为了获取当前会话的跟踪文件路径,sql如下:

 1 select d.value 
 2 || '/' 
 3 || lower (rtrim (i.instance, chr (0))) 
 4 || '_ora_' 
 5 || p.spid 
 6 || '.trc' trace_file_name 
 7 from 
(select p.spid from v$mystat m, v$session s, v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p, ----获取当前会话的系统进程id (select t.instance from v$thread t, v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number (v.value))) i, ----->获取实例名 (select value from v$parameter where name = 'user_dump_dest') d ; ---->获取跟踪文件的主路径

语句中包含了视图 ---->v$mystat  v$thread  v$ parameter  v$session  v$process

对于v$mystat视图在网上查了一下就出现了,v$sesstat,v$statname,v$sysstat

一  v$mystat v$sesstat v$sysstat v$statname视图

v$mystat,v$sesstat是用来分别统计会话级别和自实例起动以来数据库各种统计信息的。两个视图结构一致,只是统计数据不一致。可以说v$mystatv$sesstat的子集。v$mystat视图中只会有当前用户的会话信息,v$sesstat会有整个实例内所有会话信息

名称                       是否为空?         类型
-----------------------   --------    -------------------------
sid                                                          number                                 sid表示会话编号,与v$session中sid相对应。
statistic#                                            number                                 statistic#  表示统计项
value                                                     number                                 value       表示统计项相关的值

v$statname,v$sysstat视图结构的差别就是v$sysstatv$statname多一个value列。

 1 sql> desc v$sysstat;
 2  name                        null?                  type
 3  ----------------------- -------- ----------------------------
 4  statistic#                                      number                    表示统计项
 5  name                                            varchar2(64)              统计名      
 6  class                                           number                    统计类数字:1 - user 2 - redo 4 - enqueue 8 - cache 16 - os 32 - real application clusters 64 - sql 128 - debug
 7  value                                           number                    统计得到的值
 8  stat_id                                         number                    统计信息的标识符 

select * from
(select statistic#,name,class, stat_id from v$sysstat
minus
select statistic#,name, class,stat_id from v$statname) ;

> no rows selected

   查某条dml语句所产生的redo信息。可以这样写:
   select value from v$mystat t,v$statname t1 where t.statistic# = t1.statistic# and t1.name = 'redo size'

 

   二 v$thread  v$ parameter  v$session  v$process视图

   

 sql> desc  v$process
1 name null? type 2 --------------------- -------- ---------------------------- 3 addr raw(8) ---->进程状态对象的地址 4 pid number ---->oracle进程标识符 5 spid varchar2(24) ---->系统进程id 6 pname varchar2(5) ---->进程名 7 username varchar2(15) ---->系统用户名 8 serial# number ---->进程序列号 9 terminal varchar2(30) ---->操作系统终端标识符 10 program varchar2(48) ---->正在进行的程序 11 traceid varchar2(255) ---->跟踪文件标识符 12 tracefile varchar2(513) ---->跟踪文件路劲 13 background varchar2(1) ---->对于系统后台进程为1;对于前台进程或非系统后台进程为空 14 latchwait varchar2(16) ---->进程正在等待的闩锁的地址;如果没有,则为空 15 latchspin varchar2(16) ----> 16 pga_used_mem number ---->进程当前使用的pga内存 17 pga_alloc_mem number ---->进程当前分配的pga内存(包括服务器进程尚未释放到操作系统的可用pga内存) 18 pga_freeable_mem number ---->分配的可释放的pga内存 19 pga_max_mem number ---->进程分配的最大pga内存 20
 1 sql> desc v$thread;
 2  name                             null?    type
 3  ------------------------------- -------- ----------------------------
 4  thread#                                            number           ---->线程编号
 5  status                                             varchar2(6)      ---->线程状态
 6  enabled                                            varchar2(8)      ---->已启用状态:已禁用,(已启用)专用,或(已启用)公用
 7  groups                                             number           ---->分配给此线程的日志组数          
 8  instance                                           varchar2(80)     ---->实例名
 9  open_time                                          date             ---->上次打开线程的日期
10  current_group#                                     number           ---->当前日志组
11  sequence#                                          number           ---->当前日志序列号
12  checkpoint_change#                                 number           ---->最后一个检查点的scn
13  checkpoint_time                                    date             ---->最后一个检查点时间
14  enable_change#                                     number           ---->启用线程的scn
15  enable_time                                        date             ---->启用scn的时间
16  disable_change#                                    number           ---->禁用线程的scn
17  disable_time                                       date             ---->禁用线程的scn
18  last_redo_sequence#                                number           ---->上次由lgwr写入的重做序列号
19  last_redo_block                                    number           ---->上次由lgwr写入的重做块
20  last_redo_change#                                  number           ---->线程的上次重做的scn
21  last_redo_time                                     date             ---->线程的上次重做的时间
 1 sql> desc v$parameter;
 2  name                                      null?    type
 3  ----------------------------------------- -------- ----------------------------
 4  num                                                number           ---->编号
 5  name                                               varchar2(80)     ---->参数名称
 6  type                                               number           ---->参数类型1 - boolean 2 - string 3 - integer 4 - parameter file 5 - reserved 6 - big integer 
 7  value                                              varchar2(4000)   ---->参数的值
 8  display_value                                      varchar2(4000)   ---->用户友好格式的参数值。例如,如果值列显示大整数参数的值262144,则显示值列将显示值256k。
 9  isdefault                                          varchar2(9)      ---->是否为默认值
10  isses_modifiable                                   varchar2(5)      ---->指示参数是否可以用alter session(true)更改(false)
11  issys_modifiable                                   varchar2(9)      ---->指示参数是否可以使用alter system进行更改,以及更改何时生效:immediate,deferred,false
12  isinstance_modifiable                              varchar2(5)      ---->对于可以用alter system更改的参数,指示每个实例的参数值是否可以不同(true)
13  ismodified                                         varchar2(10)     ---->指示在实例启动后是否修改了参数:
14  isadjusted                                         varchar2(5)      ---->指示oracle是否将输入值调整为更合适的值
15  isdeprecated                                       varchar2(5)      ---->指示参数是否已被弃用(true)或否(false)
16  isbasic                                            varchar2(5)      ---->指示参数是否为基本参数(true)或非基本参数(false)
17  description                                        varchar2(255)    ---->参数说明
18  update_comment                                     varchar2(255)    ---->与最新更新关联的注释
19  hash                                               number           ---->参数名的哈希值
 由于v$session视图列过多,我只截取了部分
 1 sql> desc v$session; 2 name null? type 3 --------------------------------------- -------- ---------------------------- 4 saddr raw(8) ---->session地址 5 sid number ---->sessionid 6 serial# number ---->会话序列号。用于唯一标识会话的对象。确保在会话结束且另一个会话以相同的会话id开始时,会话级命令应用于正确的会话对象。 7 audsid number ---->审核会话id 8 paddr raw(8) ---->拥有会话的进程的地址 9 user# number ---->oracle用户标识符 10 username varchar2(30) ---->oracle用户名 11 command number ---->正在执行命令(已分析最后一条语句)。此命令列中的值0表示命令未记录在v$session中。 12 ownerid number ----> 13 taddr varchar2(16) ---->事物状态的地址 14 lockwait varchar2(16) ---->会话正在等待的锁的地址;如果没有,则为空 15 status varchar2(8) ---->会话状态:active-当前正在执行sql的会话;inactive-会话处于非活动状态,没有配置的限制或尚未超过配置的限制;killed-标记为要杀死的会话;cache-会话临时缓存以供oracle*xa使用;sniped-超出某些配置限制的非活动会话(例如,为资源管理器使用者组指定的资源限制或用户配置文件中指定的空闲时间)。此类会话将不允许再次处于活动状态。 16 server varchar2(9) ---->server type:dedicated shared pseudo pooled none 17 schema# number ---->schema用户标识符 18 schemaname varchar2(30) ---->schema用户名 19 osuser varchar2(30) ---->操作系统客户端用户名 20 process varchar2(24) ---->操作系统客户端进程id 21 machine varchar2(64) ---->操作系统计算机名 22 port number ---->客户端端口号 23 terminal varchar2(30) ---->操作系统终端名称 24 program varchar2(48) ---->操作系统程序名 25 type varchar2(10) ---->session type 26 sql_address raw(8) ---->与sql_hash_值一起使用,以标识当前正在执行的sql语句