如何检索以前的sql命令

JCX*_*JCX 2 sql oracle

想问一下如何在该会话中检索我过去的所有数据库SQL查询?谢谢

Vin*_*rat 6

我非常确定Oracle不会为每个会话保留所有过去查询(封闭游标)的数据.我可以想到几种方法来获取这些数据:

  • 如果您正在使用PL/SQL,那么过去的大多数游标将保留在会话缓存中(直到cursor_sharing初始化参数).您可以查询视图v$open_cursor:

    SELECT * FROM v$open_cursor WHERE sid=to_number(sys_context('USERENV','SID'))
    
    Run Code Online (Sandbox Code Playgroud)

    将此视图加入v$sqltext(或v$sqltext_with_newlines)以获取完整的sql文本:

     SELECT o.saddr, s.address, o.hash_value, s.piece, s.sql_text
       FROM v$open_cursor o
       JOIN v$sqltext_with_newlines s ON o.address = s.address
                                     AND o.hash_value = s.hash_value
      WHERE sid = to_number(sys_context('USERENV', 'SID'))
      ORDER BY o.saddr,  s.address, o.hash_value, s.piece;
    
    Run Code Online (Sandbox Code Playgroud)
  • 您可以跟踪会话,在会话终止后打开生成的跟踪文件将显示所有SQL(此外,您可以tkprof跟踪文件以获取摘要和统计信息).