這兩天看了蓋國強老師的<<深入淺出>>,很佩服蓋老師鑽研的精神。書中常用到一個查詢語句,為了獲取當前會話的跟蹤文件路徑,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$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語句