zoukankan      html  css  js  c++  java
  • Oracle历史记录

    请问如何查询ORACLE的历史操作记录!!!!!
    ------解决方案--------------------
    有一个专门存储操作的数据库表。。
    select t.SQL_TEXT, t.FIRST_LOAD_TIME
    from v$sqlarea t
     where t.FIRST_LOAD_TIME like '2010-06-30%'
     order by t.FIRST_LOAD_TIME desc

    ===========

    SELECT v$open_cursor.SID,v$sql.sql_text,v$open_cursor.CURSOR_TYPE,v$session.PROGRAM
       FROM   v$session, v$open_cursor,V$sql
       WHERE  v$open_cursor.saddr   = v$session.saddr
       and v$open_cursor.SID=v$session.SID  
       and  v$open_cursor.SQL_ID=v$sql.SQL_ID
       and v$session.OSUSER='adcc'
       and v$open_cursor.CURSOR_TYPE='OPEN'
       and v$session.PROGRAM='iisexpress.exe'
       order by v$open_cursor.CURSOR_TYPE desc

    ==========

    用户名大写

    select t.SQL_TEXT, t.PARSING_SCHEMA_NAME, t.LAST_ACTIVE_TIME
     from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('WCQ') order by t.LAST_ACTIVE_TIME desc

    ===================

        今天同事反应前台应用页面的执行的速度很慢,想按照session跟踪一下sql,看是否能有优化的空间,我连接上数据库之后,发现应用有很多连接到数据库中,不确定session是我们要跟踪的用户,仔细的想了一下,如何能快速的锁定用户,我的想法操作如下:

    --查看session中是mahanso的用户(注意:要大写)
    select * from v$session
    where username = 'MAHANSO'

    --查看
    SELECT * FROM V$DB_OBJECT_CACHE
    where wner = 'MAHANSO'
    and type = 'TABLE'

    --查看oracle连接用户执行的sql语句,但是是不能确定觉得session中sid、serial#,username


    select /*+ PUSH_SUBQ */
     command_type,
     sql_text,
     sharable_mem,
     persistent_mem,
     runtime_mem,
     sorts,
     version_count,
     loaded_versions,
     open_versions,
     users_opening,
     executions,
     users_executing,
     loads,
     first_load_time,
     invalidations,
     parse_calls,
     disk_reads,
     buffer_gets,
     rows_processed,
     sysdate start_time,
     sysdate finish_time,
     '>' || address sql_address,
     'N' status
    from v$sqlarea
    where address = (select sql_address from v$session where sid = 884)

    --查看“操作系统”进程 用户 执行的sql语句,但是当我用ps -ef |grep ora查看操作系统进程的时候,我晕倒,有N多连接连在数据库上。


    select distinct c.spid 进程号,
                    b.sid oracle进程号,
                    b.username 用户名,
                    a.module 程序类型,
                    a.hash_value,
                    sql_text SQL语句
      from v$sql a, v$session b, v$process c
     where a.hash_value = b.sql_hash_value
       and a.address = b.sql_address
       and b.paddr = c.addr
       and c.spid = (操作系统的进程号)

    --查看oracle中session执行sql语句的情况
    select * from v$sql

    /****************************************************************************************************************/

    P.S 这里要学习了一下:v$sql、v$sqlarea、v$sqltext区别

    1、查一下这些视图的定义你就能理解,它们的源都是一个。
    SELECT view_definition FROM v$fixed_view_definition        WHERE view_name='GV$SQL';
    SELECT view_definition FROM v$fixed_view_definition        WHERE view_name='GV$SQL_AREA';

    2、实际上最模糊的是v$sql与v$sqlarea,区别与联系除biti说的还有:

    a、v$sql_area相当于是按INST_ID, KGLNAOBJ, KGLHDPAR, KGLNAHSH, KGLNATIM, GLOBTS0,GLOBT19, KGLOBTS1, KGLOBT20,DECODE(KGLOBT33, 1, 'Y', 'N'),KGLHDCLT这些列的自v$sql的group by,也就是说v$sql的每一行表示的是每一个sql语句的一个versiion,而v$sqlarea存放的是相同语句不同version一个汇总。

    b、 v$sql与v$sqlarea的源都是一个:X$KGLCURSOR

    c、实际调优中建议使用v$sql,相对来说比v$sqlarea快,而且还不会产生share pool latch的争用。

    3、因v$sql及v$sqlarea存放着统计信息在调优时使用居多,但其sql是不全的,如果想获得完整的sql就要用v$sqltext了。

    /****************************************************************************************************************/

    --查看在'MAHANSO'用户下执行的所有的sql语句,按照时间降序排列

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

    --我向前端应用工程师了解目前我们测试页面的sql语句

    --查看目前“mahanso”用户所有session中执行那些sql,找到我要跟踪的sql语句,最后确定下来session的sid、serial#、username,进行跟踪。

    select * from v$session b,v$sql a
    where a.address = b.sql_address
    and username = 'MAHANSO'

  • 相关阅读:
    Linux常用命令
    Docker常用命令
    Google操作
    JAVA实现动态二维码输出
    JAVA IDEA Debug设置
    JAVA下载https资源图片
    Nginx配置文件常用操作
    Docker安装(Ubuntu、CentOS)
    SpringBoot启动脚本
    Tomcat——tomcat配置文件方式部署项目
  • 原文地址:https://www.cnblogs.com/wangcq/p/3614552.html
Copyright © 2011-2022 走看看