導航:首頁 > 人文歷史 > 資料庫怎麼查看歷史查詢

資料庫怎麼查看歷史查詢

發布時間:2023-06-05 21:57:13

『壹』 如何查詢oracle資料庫的操作記錄

查詢視圖:v$sqlarea,它是oracle中專門存儲操作的視圖,可以通過它查詢歷史操作。

授權某用戶,查看動態性能視圖的許可權(如簡梁v$latch,v$lock,v$sqlarea,v$sql,v$sysstat)

grant select any dictionary to xxx;

如通過以下查詢語句就蘆咐敗可以得知那個用戶進行了刪除操作陪顫。

select t.SQL_TEXT, t.FIRST_LOAD_TIME

from v$sqlarea t

where t.SQL_TEXT like 'delete%' and t.FIRST_LOAD_TIME like 񟭍-03-30%'

order by t.FIRST_LOAD_TIME desc

『貳』 oracle查看歷史session

一、如何查詢session執行的歷史sql語句

如何知道一個session都執行過哪些SQL語句?(查看當前比較容易,歷史的呢?怎麼復原sql的執行場景——事務關系、執行序列、單SQL還是存儲過程)

【方法一】查詢v$sqltext、v$sqlarea、v$sqlstats視圖

select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc;

#對v$sqltext、v$sqlarea查看的是shared pool中的SQL,其時間索引是其解析歷史,因為共享的問題這個查詢可能並不能完整地反映出執行的歷史。

#v$sqlstats信息保留時間比v$sql、v$sqltext、v$sqlarea長,及時SQL已經換出shared pool仍然可查到

【方法二】

聯合v$active_session_history和v$sqlarea

#v$active_session_history 這個表只是個取樣數據,按秒進行,只有在那一秒采樣點處於on cpu或非idle等待的session統計在內。所以可能會不全,有些執行很短的SQL會忽略。這個視圖無法還原完整的session歷史。

#v$sqlarea中有執行過的SQL語橘弊粗句,但並無到session的關聯信息,v$session中只關聯了當前的sql,所以也不行。

查看視圖:dba_hist_sqlstats、dba_hist_sqltext(歷史數據)

二、如何使用PL/SQL Developer查看和殺掉session

oracle多用戶操作有時候會造成session阻塞,形成了鎖表等問題。

可以使用sql語句進行查詢,但用工具更為方便。本文就介紹使用PL/SQL developer工具查看或殺掉oracle的session。

工具/原料 PL/SQL Developer 版本為 8.0.0.1480 方法/步驟 打開PL/SQL Developer,輸入用戶名密碼和資料庫等信息。 在工具欄中選擇tools,在彈出的窗口選擇Sessions。

即可。 如圖所示,所有的session和起sid都列了出來,我們需要找Status為active(活動)的。

點擊一下即可,或者選擇如圖卜清的下拉菜單,選擇 Active sessions. 如圖,現在有兩個活動的session,選擇其中一個session後在下方可以查看此session的更多信息。 在SQL Text一欄中可以查看正在執行的sql語句。

在Locks一欄中,可以查看現在鎖表等信息。 若要殺掉其中一個session,那麼,對這個session一行點擊右鍵,選擇「kill」即可。

三、如何查看PL/SQL執行的歷史

除了PL/SQL的ctrl+e的查看方法外還有如下方法:【方法一】查詢v$sql、v$sqltext、v$sqlarea、v$sqlstats視圖select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc;#對v$sqltext、v$sqlarea查看的是shared pool中的SQL,其時間索引是其解析歷史,因為共享的問題這個查詢可能並不能完整地反映出執行的歷史。

#v$sqlstats反應的是實例啟動起來的sql執行統計,sql語句本身比v$sqltext/area完整,因為後者有可能失效換出緩存。【方法二】聯合v$active_session_history和v$sqlarea#v$active_session_history 這個表只是個取樣數據,按秒進行,只有在那一秒采樣點處於on cpu或非idle等待的session統計在內。

所以可能會不全,有些執行很短的SQL會忽略。這個視圖無法還原完整的session歷史。

#v$sqlarea中有執行過的SQL語句,但圓鎮並無到session的關聯信息,v$session中只關聯了當前的sql,所以也不行。從v$sqlstat可以查看到資料庫啟動起來的所有SQL信息,但是沒有時間順序關系、沒有執行用戶信息,只有執行次數與資源統計。

從dba_hist_sqlstat可以看到AWR snapshot之間的SQL統計信息,與v$sqlstats比不受實例重啟的影響,因為實例重啟之後v$sqlstats中的信息就清除了。【方法三:session trace】SQL> execute dbms_session.session_trace_enable(true,true);PL/SQL procere successfully pleted.SQL> select count(*) from dba_hist_sqltext; COUNT(*)---------- 478SQL> select * from V$sesstat where rownum=1; SID STATISTIC# VALUE---------- ---------- ---------- 134 0 1SQL> execute dbms_session.session_trace_disable;PL/SQL procere successfully pleted.$ cd $ORACLE_HOME/admin/test/ump$ ls -lrt$ tkprof test_ora_2195620.trc report.txt sys=no explain=no aggregate=yes$ more report.txt --這個文件包括了啟停trace之間所有SQL語句的執行信息,執行計劃、統計【方法四:logminer】只包含DML與DDL語句,不能查詢select語句。

另外需要開啟supplemental logging,默認是沒有開啟的。conn / as sysdba--安裝LOGMINERSQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslms.sql;SQL> @$ORACLE_HOME/rdbms/admin/prvtlm.plb;--開啟附加日誌alter database add supplemental log data;--模擬DML操作conn p_chenming/。

SQL> select * from test2;SQL> insert into test2 values(7,77);SQL> mit;conn / as sysdba--切歸檔SQL> alter system switch logfile;SQL> select name,dest_id,thread#,sequence# from v$archived_log; --最後一個即為新的歸檔--新建LOG MINERSQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/archive_10g/test/test_1_138_786808434.arc',options=>dbms_logmnr.new); --開始minerSQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);--查看結果SQL> col username format a8;SQL> col sql_redo format a50 SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where table_name='TEST2' SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where username='P_CHENMING'; --關閉MINERSQL> execute dbms_logmnr.end_logmnr;--關閉輔助日誌SQL> alter database drop supplemental log data;【總結】查看v$sqlarea只能查看粗略的歷史,因為很多SQL是共享的。查看ASH也不全,因為這是采樣數據,測試的時候基本沒有把SQL查詢出來。

查看V$SQLSTATS能看到所有執行過的sql,以及其執行統計,但是沒有時序、沒有用戶信息。查看TRACE應該是最完整的,但需要在執行SQL前開啟。

查看logminer不能查看select語句,而且默認的系統沒有開啟supplementing log,所以能查看的內容有限。或許還有審計的方法可用,我沒測試。

每種方法都有各自的缺陷,看來很難有一種完備的查看SQL執行歷史的方法。

四、如何查看PL/SQL執行的歷史

除了PL/SQL的ctrl+e的查看方法外還有如下方法:【方法一】查詢v$sql、v$sqltext、v$sqlarea、v$sqlstats視圖select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc;#對v$sqltext、v$sqlarea查看的是shared pool中的SQL,其時間索引是其解析歷史,因為共享的問題這個查詢可能並不能完整地反映出執行的歷史。

#v$sqlstats反應的是實例啟動起來的sql執行統計,sql語句本身比v$sqltext/area完整,因為後者有可能失效換出緩存。【方法二】聯合v$active_session_history和v$sqlarea#v$active_session_history 這個表只是個取樣數據,按秒進行,只有在那一秒采樣點處於on cpu或非idle等待的session統計在內。

所以可能會不全,有些執行很短的SQL會忽略。這個視圖無法還原完整的session歷史。

#v$sqlarea中有執行過的SQL語句,但並無到session的關聯信息,v$session中只關聯了當前的sql,所以也不行。從v$sqlstat可以查看到資料庫啟動起來的所有SQL信息,但是沒有時間順序關系、沒有執行用戶信息,只有執行次數與資源統計。

從dba_hist_sqlstat可以看到AWR snapshot之間的SQL統計信息,與v$sqlstats比不受實例重啟的影響,因為實例重啟之後v$sqlstats中的信息就清除了。【方法三:session trace】SQL> execute dbms_session.session_trace_enable(true,true);PL/SQL procere successfully pleted.SQL> select count(*) from dba_hist_sqltext; COUNT(*)---------- 478SQL> select * from V$sesstat where rownum=1; SID STATISTIC# VALUE---------- ---------- ---------- 134 0 1SQL> execute dbms_session.session_trace_disable;PL/SQL procere successfully pleted.$ cd $ORACLE_HOME/admin/test/ump$ ls -lrt$ tkprof test_ora_2195620.trc report.txt sys=no explain=no aggregate=yes$ more report.txt --這個文件包括了啟停trace之間所有SQL語句的執行信息,執行計劃、統計【方法四:logminer】只包含DML與DDL語句,不能查詢select語句。

另外需要開啟supplemental logging,默認是沒有開啟的。conn / as sysdba--安裝LOGMINERSQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql;SQL> @$ORACLE_HOME/rdbms/admin/dbmslms.sql;SQL> @$ORACLE_HOME/rdbms/admin/prvtlm.plb;--開啟附加日誌alter database add supplemental log data;--模擬DML操作conn p_chenming/。

SQL> select * from test2;SQL> insert into test2 values(7,77);SQL> mit;conn / as sysdba--切歸檔SQL> alter system switch logfile;SQL> select name,dest_id,thread#,sequence# from v$archived_log; --最後一個即為新的歸檔--新建LOG MINERSQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/archive_10g/test/test_1_138_786808434.arc',options=>dbms_logmnr.new); --開始minerSQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);--查看結果SQL> col username format a8;SQL> col sql_redo format a50 SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where table_name='TEST2' SQL> select username,s,timestamp,sql_redo from v$logmnr_contents where username='P_CHENMING'; --關閉MINERSQL> execute dbms_logmnr.end_logmnr;--關閉輔助日誌SQL> alter database drop supplemental log data;【總結】查看v$sqlarea只能查看粗略的歷史,因為很多SQL是共享的。查看ASH也不全,因為這是采樣數據,測試的時候基本沒有把SQL查詢出來。

查看V$SQLSTATS能看到所有執行過的sql,以及其執行統計,但是沒有時序、沒有用戶信息。查看TRACE應該是最完整的,但需要在執行SQL前開啟。

查看logminer不能查看select語句,而且默認的系統沒有開啟supplementing log,所以能查看的內容有限。或許還有審計的方法可用,我沒測試。

每種方法都有各自的缺陷,看來很難有一種完備的查看SQL執行歷史的方法。

五、如何查看oracle中存儲過程執行的歷史記錄

select t.sql_id,

t.sql_text,

s.plan_hash_value,

s.optimizer_cost,

s.executions_total,

s.elapsed_time_total,

s.disk_reads_total,

s.buffer_gets_total

from DBA_HIST_SQLSTAT s, DBA_HIST_SQLTEXT t

where s.sql_id=t.sql_id

and t.sql_text like'%存儲過程名稱%';

沒有想到其他好辦法,確實不太好查了,把存儲過程當作SQL來查找吧。

六、oracle 中查詢佔用session最多的進程

在故障發生時,嘗試用下面的語句抓取資料庫引起故障的點。

/*********************************************************************************************/在oracle中監控死鎖/*********************************************************************************************/SELECT sn.username, m.SID, sn.SERIAL#, m.TYPE, DECODE(m.lmode, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl.', 4, 'Share', 5, 'S/Row Excl.', 6, 'Exclusive', lmode, LTRIM(TO_CHAR(lmode, 鰶'))) lmode, DECODE(m.request, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row Excl.', 4, 'Share', 5, 'S/Row Excl.', 6, 'Exclusive', request, LTRIM(TO_CHAR(m.request, 鰶'))) request, m.id1, m.id2 FROM v$session sn, v$lock m WHERE (sn.SID = m.SID AND m.request != 0) --存在鎖請求,即被阻塞 OR (sn.SID = m.SID --不存在鎖請求,但是鎖定的對象被其他會話請求鎖定 AND m.request = 0 AND lmode != 4 AND (id1, id2) IN (SELECT s.id1, s.id2 FROM v$lock s WHERE request != 0 AND s.id1 = m.id1 AND s.id2 = m.id2)) ORDER BY id1, id2, m.request; /*********************************************************************************************/定位引起oracle死鎖的sql/*********************************************************************************************/select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object)) /*********************************************************************************************/下面的SQL查詢可以用於確定鎖住資料庫對象的鎖:/*********************************************************************************************/select c.owner, c.object_name, c.object_type, b.sid, b.serial#, b.status, b.osuser, b.machine from v$locked_object a , v$session b, dba_objects c where b.sid = a.session_id and a.object_id = c.object_id; /*********************************************************************************************/顯示哪些會話被鎖住/*********************************************************************************************//* showlock.sql */COLUMN o_name format a10COLUMN lock_type format a20COLUMN object_name format a15SELECT RPAD (oracle_username, 10) o_name, session_id SID, DECODE (locked_mode, 0, 'None', 1, 'Null', 2, 'Row share', 3, 'Row Execlusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive' ) lock_type, object_name, xisn, xidslot, xidsqn FROM v$locked_object, all_objectsWHERE v$locked_object.object_id = all_objects.object_id;/*********************************************************************************************/顯示所有的TM和TX鎖/*********************************************************************************************//* showalllock.sql */SELECT SID, TYPE, id1, id2, DECODE (lmode, 0, 'None', 1, 'Null', 2, 'Row share', 3, 'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive' ) lock_type, request, ctime, BLOCK FROM v$lockWHERE TYPE IN ('TX', 'TM');/*********************************************************************************************/ 在Oracle資料庫中,可以通過kill session的方式來終止一個進程,其基本語法結構為: 被kill掉的session,狀態會被標記為killed,Oracle會在該用戶下一次touch時清除該進程.我們發現當一個session被kill掉以後,該session的paddr被修改,如果有多個session被kill,那麼多個session的paddr都被更改為相同的進程地址:/*********************************************************************************************/alter system kill session 'sid,serial#' ; /*********************************************************************************************/ 在oracle中kill掉的進程有時還需要等待pmon回滾資料庫已經佔有的資源有時候我們需要使用下面的腳本找出那些已經在oracle中kill掉的進程,在操作系統中在kill一次/*********************************************************************************************/select p.addr from v$process p where pid 1 minus select s.paddr from v$session s;$ kill -9 &paddr。

『叄』 如何查看SQL SERVER的操作歷史記錄

打開log explorer file=>attach log file->選擇伺服器和登陸方式->connect->
選擇資料庫->attach->左面對話框中browse->view log->就可以看到log記錄了
想恢復的話: 右鍵log記錄 undo transation->選擇保存文件名和路徑->然後打開該文件到查詢分析器里執行 T-sql代碼就可以了。

『肆』 怎麼查詢SQL資料庫的歷史數據,並調用出來做報表

  1. SQL關鍵字 where,類型轉換Convert

  2. 歷史數據,多久後的數據,假如有表A,有2個欄位a,b

  3. a 為int 類型,b 為日期類型

  4. 轉換日期以及日期范圍SQL 如下:

  5. select * from A where b between convert(datetime,'2015-08-01 08:08:08' ) and convert(datetime,'2015-08-01 08:12:08')

  6. 以上SQL 就是查詢歷史記錄,日期為'2015-08-01 08:08:08'與 '2015-08-01 08:12:08'

    之間的數據

  7. 創建報表可以通過MicrosoftSQLServer2008R2中的創建,也可以在Microsoftvisualstudio中通過使用ReportView控制項來創建報表。本實例採用MicrosoftSQLServer2008R2中的創建報表。

  8. 創建報表伺服器項目

  9. 在製作報表之前,要先創建一個報表伺服器項目,在其中可以存放若干報表供用戶調用。在中創建報表伺服器項目的操作步驟如下。

  10. 選擇【開始】|【所有程序】|【MicrosoftSQLServer2008R2】|【】,啟動商業智能開發環境。在菜單欄中選擇【文件】|【新建】|【項目】命令,彈出【新建項目】對話框。在【項目類型】列表中選擇【商業智能項目】選項,在【模板】列表中選擇【報表伺服器項目向導】選項,在【名稱】文本框中輸入【報表項目4】,單擊【確定】按鈕以創建項目。

『伍』 資料庫歷史diag.log怎麼看

db2diag命令,是用來查看db2資料庫運行日誌信息的,實際上,db2運行日誌是記錄在db2diag.log文件中,可以 通過此文件,查看記錄的有關DB2資料庫詳細的錯誤信息,而db2diag只是查看該日誌文件的一個小工具而已。db2資料庫在運行過程中如果經常有報錯的話,這個文件增長的會很快,需要定期清理,備份移走或者刪除,通常有兩種方法:
可以通過執行db2 get dbm cfg 來查看Diagnostic data directory path(DIAGPATH) 參數的設置。
1、使用db2diag工具,直接執行命令db2diag -A /db2diagbak (備份至/db2diagbak ,使用db2diag -h查看db2diag幫助),系統會自動移走db2diag.log並將備份的文件名添加上當前日期時間信息。
2、直接備份,在db2停止運行的情況下,將db2diag.log文件備份至其他文件系統,該文件刪除後在db2啟動後會自動重建。

『陸』 如何查詢oracle資料庫的操作記錄

首先,向你介紹一個動態視圖:v$sql
該視圖展示最近一段時間所有執行吵族過的sql語句:
select * from v$sql
即可。
如果報錯找不到v$sql,一般是許可權問題,換sysdba就肯定能查到。
但要注意的是「隱式sql」,很多sql語句是調用執行的,(比如,存儲過程中對dbms包的調用,再如執行create 語句所觸發的對系統表空間、數據升斗弊字典的修改等等。),這些語銷鬧句同樣會展現在v$sql中。
還有其它與sql歷史記錄相關的v$視圖,詳情可以參考Oracle官方文檔《Oracle® Reference》,直接給你個10.2的文檔鏈接,夠方便了吧:
http://www.oracle.com/pls/db102/homepage?remark=tahiti

閱讀全文

與資料庫怎麼查看歷史查詢相關的資料

熱點內容
word中化學式的數字怎麼打出來 瀏覽:702
乙酸乙酯化學式怎麼算 瀏覽:1370
沈陽初中的數學是什麼版本的 瀏覽:1315
華為手機家人共享如何查看地理位置 瀏覽:1008
一氧化碳還原氧化鋁化學方程式怎麼配平 瀏覽:845
數學c什麼意思是什麼意思是什麼 瀏覽:1366
中考初中地理如何補 瀏覽:1257
360瀏覽器歷史在哪裡下載迅雷下載 瀏覽:668
數學奧數卡怎麼辦 瀏覽:1347
如何回答地理是什麼 瀏覽:987
win7如何刪除電腦文件瀏覽歷史 瀏覽:1020
大學物理實驗干什麼用的到 瀏覽:1445
二年級上冊數學框框怎麼填 瀏覽:1657
西安瑞禧生物科技有限公司怎麼樣 瀏覽:821
武大的分析化學怎麼樣 瀏覽:1210
ige電化學發光偏高怎麼辦 瀏覽:1299
學而思初中英語和語文怎麼樣 瀏覽:1603
下列哪個水飛薊素化學結構 瀏覽:1385
化學理學哪些專業好 瀏覽:1449
數學中的棱的意思是什麼 瀏覽:1015