zoukankan      html  css  js  c++  java
  • show_space/get_alert_log/get_trace_file

    1.get_alert_log

    获取alert文件的路径和名称

    set serveroutput on        --设置输出,让sqlplus在屏幕上可以输出。(要加入到login.sql中!)

    create or replace procedure get_alert_log
    is
      alert_name varchar2(513);
    begin
    select a.value||'/alert_'||b.value||'.log' into alert_name from
    (select value from v$parameter where name='background_dump_dest') a,
    (select value from v$parameter where name='instance_name') b;
    dbms_output.put_line(chr(10)||alert_name);
    end get_alert_log;
    /

    create public synonym get_alert_log for sys.get_alert_log;     --设置一个公共同义词,让其他用户可以访问
    grant execute on get_alert_log to public;                -- 授权
    exec get_alert_log    --执行过程得到路径

    --------------------------------------------------------------------------------

    2.get_trace_file

    定位跟踪文件
    create or replace procedure get_trace_file (v_sid number default userenv('sid'))
    is
      trace_file_name varchar2(513);
    begin
    select  d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc'
    into trace_file_name
    from  ( select p.spid   from v$mystat m,v$session s,v$process p
    where m.statistic# = 1 and s.sid = v_sid and p.addr = s.paddr) p,
    ( select t.instance from v$thread  t,v$parameter  v
      where v.name = 'thread'
      and (v.value = 0 or t.thread# = to_number(v.value))) i,
      ( select value from v$parameter where name = 'user_dump_dest') d;
      dbms_output.put_line(chr(10)||trace_file_name);
    end get_trace_file;
    /

    grant select on v_$mystat to public;
    grant select on v_$session to public;
    grant select on v_$process to public;
    grant select on v_$thread to public;
    grant select on v_$parameter to public;
    create public synonym get_trace_file for sys.get_trace_name;
    grant execute on get_trace_file to public;

    exec get_trace_file; --当前会话
    exec get_trace_file(59);  --指定会话

    ------------------------------------------------------------------------------------------------------------------------
    3.show_space

    create or replace procedure show_space
    ( p_segname in varchar2,
    p_owner in varchar2 default user,
    p_type in varchar2 default 'TABLE',
    p_partition in varchar2 default NULL )
    -- this procedure uses authid current user so it can query DBA_*
    -- views using privileges from a ROLE, and so it can be installed
    -- once per database, instead of once per user who wanted to use it
    authid current_user
    as
    l_free_blks number;
    l_total_blocks number;
    l_total_bytes number;
    l_unused_blocks number;
    l_unused_bytes number;
    l_LastUsedExtFileId number;
    l_LastUsedExtBlockId number;
    l_LAST_USED_BLOCK number;
    l_segment_space_mgmt varchar2(255);
    l_unformatted_blocks number;
    l_unformatted_bytes number;
    l_fs1_blocks number; l_fs1_bytes number;
    l_fs2_blocks number; l_fs2_bytes number;
    l_fs3_blocks number; l_fs3_bytes number;
    l_fs4_blocks number; l_fs4_bytes number;
    l_full_blocks number; l_full_bytes number;
    -- inline procedure to print out numbers nicely formatted
    -- with a simple label
    procedure p( p_label in varchar2, p_num in number )
    is
    begin
    dbms_output.put_line( rpad(p_label,40,'.') ||
    to_char(p_num,'999,999,999,999') );
    end;
    begin
    -- this query is executed dynamically in order to allow this procedure
    -- to be created by a user who has access to DBA_SEGMENTS/TABLESPACES
    -- via a role as is customary.
    -- NOTE: at runtime, the invoker MUST have access to these two
    -- views!
    -- this query determines if the object is an ASSM object or not
    begin
    execute immediate
    'select ts.segment_space_management
    from dba_segments seg, dba_tablespaces ts
    where seg.segment_name = :p_segname
    and (:p_partition is null or
    seg.partition_name = :p_partition)
    and seg.owner = :p_owner
    and seg.tablespace_name = ts.tablespace_name'
    into l_segment_space_mgmt
    using p_segname, p_partition, p_partition, p_owner;
    exception
    when too_many_rows then
    dbms_output.put_line
    ( 'This must be a partitioned table, use p_partition => ');
    return;
    end;
    -- if the object is in an ASSM tablespace, we must use this API
    -- call to get space information, otherwise we use the FREE_BLOCKS
    -- API for the user-managed segments
    if l_segment_space_mgmt = 'AUTO'
    then
    dbms_space.space_usage
    ( p_owner, p_segname, p_type, l_unformatted_blocks,
    l_unformatted_bytes, l_fs1_blocks, l_fs1_bytes,
    l_fs2_blocks, l_fs2_bytes, l_fs3_blocks, l_fs3_bytes,
    l_fs4_blocks, l_fs4_bytes, l_full_blocks, l_full_bytes, p_partition);
    p( 'Unformatted Blocks ', l_unformatted_blocks );
    p( 'FS1 Blocks (0-25) ', l_fs1_blocks );
    p( 'FS2 Blocks (25-50) ', l_fs2_blocks );
    p( 'FS3 Blocks (50-75) ', l_fs3_blocks );
    p( 'FS4 Blocks (75-100)', l_fs4_blocks );
    p( 'Full Blocks ', l_full_blocks );
    else
    dbms_space.free_blocks(
    segment_owner => p_owner,
    segment_name => p_segname,
    segment_type => p_type,
    freelist_group_id => 0,
    free_blks => l_free_blks);
    p( 'Free Blocks', l_free_blks );
    end if;
    -- and then the unused space API call to get the rest of the
    -- information
    dbms_space.unused_space
    ( segment_owner => p_owner,
    segment_name => p_segname,
    segment_type => p_type,
    partition_name => p_partition,
    total_blocks => l_total_blocks,
    total_bytes => l_total_bytes,
    unused_blocks => l_unused_blocks,
    unused_bytes => l_unused_bytes,
    LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
    LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
    LAST_USED_BLOCK => l_LAST_USED_BLOCK );
    p( 'Total Blocks', l_total_blocks );
    p( 'Total Bytes', l_total_bytes );
    p( 'Total MBytes', trunc(l_total_bytes/1024/1024) );
    p( 'Unused Blocks', l_unused_blocks );
    p( 'Unused Bytes', l_unused_bytes );
    p( 'Last Used Ext FileId', l_LastUsedExtFileId );
    p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
    p( 'Last Used Block', l_LAST_USED_BLOCK );
    end;
    /

    SCOTT@test>exec show_space('BIG');
    Unformatted Blocks .....................           7,144
    FS1 Blocks (0-25) ......................               1
    FS2 Blocks (25-50) .....................               0
    FS3 Blocks (50-75) .....................               0
    FS4 Blocks (75-100).....................           6,122
    Full Blocks ............................         338,793
    Total Blocks............................         352,896
    Total Bytes.............................   2,890,924,032
    Total MBytes............................           2,757
    Unused Blocks...........................               0
    Unused Bytes............................               0
    Last Used Ext FileId....................               4
    Last Used Ext BlockId...................         344,841
    Last Used Block.........................           8,192

    Unformatted Blocks:为表分配的位于高水位线(high-water mark, HWM)之下但未用的块数。把未格式化和未用的块加在一起,就是已为表分配但从未用于保存ASSM对象数据的总块数。

    ? FS1 Blocks-FS4 Blocks:包含数据的格式化块。项名后的数字区间表示各块的“空闲度”。例如,(0-25)是指空闲度为0~25%的块数。
    ? Full Blocks:已满的块数,不能再对这些执行插入。

    ? Total Blocks、Total bytes、Total Mbytes:为所查看的段分配的总空间量,单位分别是数据库块、字节和兆字节。
    ? Unused Blocks、Unused Bytes:表示未用空间所占的比例(未用空间量)。这些块已经分配给所查看的段,但目前在段的HWM之上。
    ? Last Used Ext FileId:最后使用的文件的文件ID,该文件包含最后一个含数据的区段(extent)。
    ? Last Used Ext BlockId:最后一个区段开始处的块ID;这是最后使用的文件中的块ID。
    ? Last Used Block:最后一个区段中最后一个块的偏移量

  • 相关阅读:
    JavaScript模态对话框类
    事件模块的演变(1)
    html5中可通过document.head获取head元素
    How to search for just a specific file type in Visual Studio code?
    What do 'lazy' and 'greedy' mean in the context of regular expressions?
    正则非获取匹配 Lookahead and Lookbehind ZeroLength Assertions
    regex length 正则长度问题
    Inversion of Control vs Dependency Injection
    How to return View with QueryString in ASP.NET MVC 2?
    今天才发现Google Reader
  • 原文地址:https://www.cnblogs.com/afx1007/p/4065988.html
Copyright © 2011-2022 走看看