zoukankan      html  css  js  c++  java
  • 选出有行连接(row chain)或者是行迁移(row migeration)的表

    自己编写的一个小脚本,该脚本的主要功能是选出有行迁移或者行连接的表,并且按照行迁移/行连接降序输出OWNER.TABLE_NAME,该脚本没有统计ORACLE系统内置的表,如果表的索引状态为unusable,也不能统计,请在数据库空闲的时候运行该脚本。

     严重警告:请别在生产环境中乱用该脚本,后果自负

    set serveroutput on
    set linesize 200
    set pagesize 100
    declare
    TYPE tablename IS RECORD
    ( owner dba_tables.owner%TYPE,
      table_name dba_tables.table_name%TYPE,
      chain_cnt dba_tables.chain_cnt%TYPE
    );
    dbatables tablename;
    cursor table_name is
    select owner,table_name from dba_tables where owner not in
    ('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS') and owner not in (select owner from dba_indexes where status='UNUSABLE');
    cursor table_name2 is
    select owner,table_name,chain_cnt from dba_tables where owner not in
    ('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS')
    and chain_cnt>0 order by chain_cnt desc;
    cursor spetial is select owner,table_name from dba_indexes where status='UNUSABLE';
    begin
      for tablename in table_name loop
    execute immediate 'analyze table '|| tablename.owner ||'.'||tablename.table_name || ' compute statistics ';
    end loop;
      for c_spetial in spetial loop
    dbms_output.put_line('UNUSABLE index in ' || c_spetial.owner ||'.' ||c_spetial.table_name || ' , Can not analyze this table');
    end loop;
    open table_name2;
    loop
    fetch table_name2 into dbatables;
    if(table_name2%ROWCOUNT=0) then
    dbms_output.put_line('No Chained Rows Found !!!');
    else
    dbms_output.put_line(dbatables.chain_cnt || ' chained rows found in ' ||  dbatables.owner ||'.'|| dbatables.table_name);
    end if;
    exit when table_name2%NOTFOUND;
    end loop;
    end;
    /

    例子:

    SQL> set serveroutput on
    SQL> set linesize 200
    SQL> set pagesize 100
    SQL> declare
      2  TYPE tablename IS RECORD
      3  ( owner dba_tables.owner%TYPE,
      4    table_name dba_tables.table_name%TYPE,
      5    chain_cnt dba_tables.chain_cnt%TYPE
      6  );
      7  dbatables tablename;
      8  cursor table_name is
      9  select owner,table_name from dba_tables where owner not in
     10  ('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS') and owner not in (select owner from dba_indexes where status='UNUSA
    BLE');
     11  cursor table_name2 is
     12  select owner,table_name,chain_cnt from dba_tables where owner not in
     13  ('SYS','SYSMAN','SYSTEM','MDSYS','OLAPSYS','DMSYS','ORDSYS','EXFSYS','XDB','CTXSYS','WMSYS','OUTLN','ISMSYS','DBSNMP','TSMSYS')
     14  and chain_cnt>0 order by chain_cnt desc;
     15  cursor spetial is select owner,table_name from dba_indexes where status='UNUSABLE';
     16  begin
     17    for tablename in table_name loop
     18  execute immediate 'analyze table '|| tablename.owner ||'.'||tablename.table_name || ' compute statistics ';
     19  end loop;
     20    for c_spetial in spetial loop
     21  dbms_output.put_line('UNUSABLE index in ' || c_spetial.owner ||'.' ||c_spetial.table_name || ' , Can not analyze this table');
     22  end loop;
     23  open table_name2;
     24  loop
     25  fetch table_name2 into dbatables;
     26  if(table_name2%ROWCOUNT=0) then
     27  dbms_output.put_line('No Chained Rows Found !!!');
     28  else
     29  dbms_output.put_line(dbatables.chain_cnt || ' chained rows found in ' ||  dbatables.owner ||'.'|| dbatables.table_name);
     30  end if;
     31  exit when table_name2%NOTFOUND;
     32  end loop;
     33  end;
     34  /
    UNUSABLE index in SCOTT.EMP , Can not analyze this table
    No Chained Rows Found !!!

  • 相关阅读:
    Codeforces Gym 101138 D. Strange Queries
    BZOJ 4236: JOIOJI
    BZOJ 2654: tree
    POJ 1390 Block
    2048
    BZOJ 2412: 电路检修
    BZOJ 2448: 挖油
    BZOJ 3907: 网格
    Codeforces 727 D T-shirts Distribution
    BZOJ 1485: [HNOI2009]有趣的数列
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330646.html
Copyright © 2011-2022 走看看