zoukankan      html  css  js  c++  java
  • ORACLE学习笔记性能优化5

    18.怎么清理临时段
      可以使用如下办法
      <1>、 使用如下语句查看一下认谁在用临时段
      SELECT username,sid,serial#,sql_address,machine,program,
      tablespace,segtype, contents
      FROM v$session se,v$sort_usage su
      WHERE se.saddr=su.session_addr

       <2>、 那些正在使用临时段的进程
      SQL>Alter system kill session 'sid,serial#';

      <3>、把TEMP表空间回缩一下
      SQL>Alter tablespace TEMP coalesce;


      还可以使用诊断事件
      <1>、 确定TEMP表空间的ts#
      SQL> select ts#, name FROM v$tablespace;
      TS# NAME
      -----------------------
      0 SYSYEM
      1 RBS
      2 USERS
      3* TEMP
      ...

      <2>、 执行清理操作
      alter session set events 'immediate trace name DROP_SEGMENTS level TS#+1'
      说明:
      temp表空间的TS# 为 3*, So TS#+ 1= 4,如果想清除所有表空间的临时段,则,TS# = 2147483647

    19.怎么样dump数据库内部结构,如上面显示的控制文件的结构
      常见的有
      1、分析数据文件块,转储数据文件n的块m
      alter system dump datafile n block m

      2、分析日志文件
      alter system dump logfile logfilename;

      3、分析控制文件的内容
      alter session set events 'immediate trace name CONTROLF level 10'

      4、分析所有数据文件头
      alter session set events 'immediate trace name FILE_HDRS level 10'

      5、分析日志文件头
      alter session set events 'immediate trace name REDOHDR level 10'

      6、分析系统状态,最好每10分钟一次,做三次对比
      alter session set events 'immediate trace name SYSTEMSTATE level 10'

      7、分析进程状态
      alter session set events 'immediate trace name PROCESSSTATE level 10'

      8、分析Library Cache的详细情况
      alter session set events 'immediate trace name library_cache level 10'


    20.如何获得所有的事件代码
      事件代码范围一般从10000 to 10999,以下列出了这个范围的事件代码与信息
      SET SERVEROUTPUT ON
      DECLARE
      err_msg VARCHAR2(120);
      BEGIN
      dbms_output.enable (1000000);
      FOR err_num IN 10000..10999
      LOOP
      err_msg := SQLERRM (-err_num);
      IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
      dbms_output.put_line (err_msg);
      END IF;
      END LOOP;
      END;
      /

      在Unix系统上,事件信息放在一个文本文件里
      $ORACLE_HOME/rdbms/mesg/oraus.msg
      可以用如下脚本查看事件信息
      event=10000
      while [ $event -ne 10999 ]
      do
      event=`expr $event + 1`
      oerr ora $event
      done

      对于已经确保的/正在跟踪的事件,可以用如下脚本获得
      SET SERVEROUTPUT ON
      DECLARE
      l_level NUMBER;
      BEGIN
      FOR l_event IN 10000..10999
      LOOP
      dbms_system.read_ev (l_event,l_level);
      IF l_level > 0 THEN
      dbms_output.put_line ('Event '||TO_CHAR (l_event)||
      ' is set at level '||TO_CHAR (l_level));
      END IF;
      END LOOP;
      END;
      /

  • 相关阅读:
    前端基础(2)CSS
    前端基础(1)、HTML
    MySQL数据库,这一篇就够啦!!!(持续更新)
    十、数据库之流程控制
    九、数据库之存储过程和函数
    spring注解总结
    eclipse导入项目后错误的处理方式
    ssm分页查询错误
    字节编址和字的区别(转)
    数据库查询练习
  • 原文地址:https://www.cnblogs.com/einyboy/p/2493522.html
Copyright © 2011-2022 走看看