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'

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

  • 相关阅读:
    学习FastDfs(三)
    学习FastDfs(二)
    学习FastDfs(一)
    学习ELK日志平台(五)
    学习ELK日志平台(四)
    学习ELK日志平台(二)
    学习ELK日志平台(一)
    并不对劲的CTS2019
    并不对劲的BJOI2019
    并不对劲的bzoj1095:p2056:[ZJOI2007]捉迷藏
  • 原文地址:https://www.cnblogs.com/monkey6/p/13992518.html
Copyright © 2011-2022 走看看