这两天看了盖国强老师的<<深入浅出>>,很佩服盖老师钻研的精神。书中常用到一个查询语句,为了获取当前会话的跟踪文件路径,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$mystat是v$sesstat的子集。v$mystat视图中只会有当前用户的会话信息,v$sesstat会有整个实例内所有会话信息
名称 是否为空? 类型
----------------------- -------- -------------------------
SID NUMBER SID表示会话编号,与v$session中SID相对应。
STATISTIC# NUMBER STATISTIC# 表示统计项
VALUE NUMBER VALUE 表示统计项相关的值
v$statname,v$sysstat视图结构的差别就是v$sysstat比v$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语句