zoukankan      html  css  js  c++  java
  • 通过LOGMNR查找程式带入的实际值

    生产库中出现了大量的锁表,需要得到当时程式执行的SQL以及其带入的值

    1.查看SQL

    SELECT SQL_ID FROM V$SESSION WHERE SID=(SELECT FINAL_BLOCKING_SESSION FROM V$SESSION WHERE BLOCKING_SESSION IS NOT NULL);

    查出来后,在通过V$SQL查找,此时发现程式使用了绑定变量,此方法不可行。

    2.通过10046进行追踪

    可以通过10046追踪某个会话,但是因为有好多程式,并不知道哪一个会锁表,因此无法确定追踪哪一个

    3.通过LOGMNR得到

    因为锁表的会话并没有提交,所以我们需要验证一下LOGMNR是否可以抓到未提交的SQL

    --1.执行一条更新语句
    UPDATE TT SET NAME='MONKEY' WHERE ID=1;
    --2.不提交
    --3.归档当前的REDO
    alter system archive log current;
    --4.LOGMNR
    EXEC  SYS.DBMS_LOGMNR.ADD_LOGFILE('/xxxx/xxxx/archivelog/1_1078_1047477936.dbf');
    EXEC  SYS.DBMS_LOGMNR.START_LOGMNR(OPTIONS=>16);
    SELECT * FROM V$LOGMNR_CONTENTS  WHERE lower(TABLE_NAME)='tt'

    根据这个原理,我们可以对锁表的会话的变量值进行抓取。

  • 相关阅读:
    python
    spice-vdagent
    no ia32-libs
    git conflict
    wget mirror
    docker !veth
    libprotobuff8.so not found
    angular 列表渲染机制
    Java测试技巧
    react组件生命周期
  • 原文地址:https://www.cnblogs.com/monkey6/p/13992518.html
Copyright © 2011-2022 走看看