易截截图软件、单文件、免安装、纯绿色、仅160KB

Oracle段高水位(HWM, high water mark)问题

Oracle对表做全表扫描的时候
,会扫描完HWM以下
的数据块。如果某个表delete(delete操作不会降低高水位)了大量数据,那么这时对表做全表扫描就会做很多无用功,扫描了一大堆数据块,最后发现块里面居然没有数据。
通常,在对表做了大批量delete操作之后,就应该马上降低表的高水位,可以使用shrink 命令或者alter table table_name move降低表的高水位。在降低表的高水位之后,表上面的索引会失效,因为表的rowid更改了,这个时候需要rebuild索引。
如何求出段的高水位?其实很简单,首先对表收集统计信息,然后查询DBA_TABLES的blocks,以及empty_blocks字段,blocks表示已经用了多少个blocks,empty_blocks表示从来没有使用过的blocks。那么blocks就表示段的高水位。
可以使用下面的语句查看表到底用了多少个blocks
select count( distinct dbms_rowid.rowid_block_number(rowid)) from table_name;
 
    然后再对比dba_tables表中的blocks列,如果求出的blocks数与dba_tables相差在10左右,那么表示这个表不需要shrink,用上面的脚本求出的blocks数没计算段头,位图管理块。如果相差很大,那么表示这个表需要shrink了,不过这样做比较麻烦,不是吗?
其实还可以监控表的DML操作,根据监控的结果,我们就可以判断哪些表需要降低高水位。在Oracle10g中DBA_TAB_MODIFICATIONS这个视图记录了自上次收集统计信息以来表的DML操作信息。当我们再次对表收集统计信息,该视图的记录就会被清空。
对于非分区表,可以使用下面脚本初步检测哪些表需要降低高水位
 
exec  DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO ;
col table format a35
select a.owner || '.' || a.table_name "Table",a.num_rows,a.avg_row_len,b.inserts,b.deletes,a.num_rows+nvl(b.inserts,0)-nvl(b.deletes,0) total_rows,
round(a.avg_row_len*(a.num_rows+nvl(b.inserts,0)-nvl(b.deletes,0))/1024/1024,4) "Calculate_Sizle(Mb)",c.bytes/1024/1024 "Segment_Size(Mb)"
from dba_tables a left join all_tab_modifications b 
on  a.owner=b.table_owner and a.table_name=b.table_name  inner join dba_segments c&n


相关文档:

Oracle字符串长度的问题

    今天碰到一个问题,通过一个SQL语句查询时,出如下问题:
       ORA-06502: PL/SQL: numeric or value error: character string buffer too small
       ORA-06512: at "WMSYS.WM_CONCAT_IMPL", line 30
 问题出现在通过WMSYS. ......

如何修改Oracle默认用户密码有效期时间

如何修改Oracle默认用户密码有效期时间
1、查看用户的proifle是哪个,一般是default:
     sql>SELECT username,PROFILE from dba_users;
2、查看指定概要文件(如default)的密码有效期设置:
     sql>  SELECT * from dba_profiles s WHERE 
   ......

ORACLE几个过滤条件的执行顺序

select distinct id
  from table t
 where rownum < 10
 order by t.id desc;
上述语句的过滤条件执行顺序 先where --->order by --->distinct
如果有group by的话 group by 在order by前面的 ......

oracle 存储过程的基本语法 及注意事项

oracle 存储过程的基本语法 及注意事项
oracle 存储过程的基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
    参数1 IN NUMBER,
    参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
END 存储过程名字
2.SELECT INTO STATEMENT
  将selec ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号