零、系統信息
select * from v$systeminfo;
一、數據字典相關
這個數據字典表可以查詢數據庫中所有的對象,通過where中的type列和subtype$可以做過濾,比如通過以下sql可以查詢所有用戶自創建的表:
select * from SYS.SYSOBJECTS where subtype$ = 'UTAB';
(SELECT * FROM ALL_TABLES;當然也可以通過這個視圖查詢,類似視圖還有all_users/all_views/all_objects等等;)
(這兩個不用+v$)
這兩個一樣,主要排查數據字典緩沖區的信息
SELECT * FROM V$DB_CACHE SELECT * FROM V$DICT_CACHE 這兩個一樣,主要是排查數據字典的所存的系統對象的信息: select * from V$DICT_CACHE_ITEM where type = 'TABLE'; SELECT * FROM V$DB_OBJECT_CACHE WHERE TYPE = 'TABLE';
二、數據庫參數相關
select * from v$dm_INI;
三、許可證及版本相關
select * from V$license; select * from v$version; #數據庫服務器版本 select id_code;
四、日志相關
很多時候,主備機的lsn因為網絡問題會導致不一致,導致的現象就是數據庫在執行任何sql時都會不定時的卡頓個幾秒或十幾秒然后又好了,原因是故障處理備機lsn要追趕主機lsn。在此時需要檢查一下兩台服務器日志的lsn,可以通過如下方式:
select * from V$RLOG;
五、會話相關
觀察目前服務器有多少個會話連接,是否已經超過ini參數中max_sessions的限制
select * from v$sessions
六、事務和檢查點相關
觀察事務阻塞和死鎖;
阻塞:相同數據的並發操作是主因,比如一個事務在操作這個數據時,需要等待另外一個先操作這個數據的事務commit后,才可以成功操作數據不然就一直等待。
select * from v$trx; select * from V$TRXWAIT select * from v$lock; select * from V$DEADLOCK_HISTORY
select * from V$CKPT #當前檢查點信息 select * from V$CKPT_HISTORY #歷史檢查點的信息
七、數據庫進程與線程
select * from v$process; #查看當前進程信息 select * from v$threads;#查看當前線程信息
檢查點lsn和redo日志文件lsn有什么 區別:
檢查點的lsn的到了5種情況下才會產生,然后活動事務對數據任何修改(包括rollback,commit語句)都會產生file lsn。
檢查點和commit的區別:
- 將事務任何更改的記錄寫入日志文件(即通知 日志FLUSH 線程進行日志刷盤)並最終在合適的時機(如檢查點、緩沖區滿)寫入到數據文件;
- 釋放事務上的所有鎖,將事務標記為完成;
- 返回提交成功消息給請求者。
所以COMMIT操作就不一定保證事務對DB的修改寫到磁盤即臟數據頁刷盤,但可以保證commit可以保證日志刷盤。
2、檢查點時刻系統將緩沖區中的日志和臟數據頁都刷盤
在系統恢復時,那些已經執行了COMMIT操作但修改仍留在內存緩沖區的事務需要做恢復工作,可以直接重做redo日志來恢復。具體原理如下:由於在事務執行時,會在日志中記下事務的開始標記、結束標志以及事務對DB的每一個修改,所以在系統恢復時,直接在熱動日志中,通過檢查故障點lsn(即系統恢復時啟動的當前檢查點)與最近一個檢查點lsn(即上一個檢查點)之間,哪些事務執行了COMMIT操作(這些事務應重做),哪些事務還未結束(這些事務應撤銷)。