Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

2135

积分

502

好友

184

主题
1#
发表于 2013-5-20 14:32:17 | 查看: 7017| 回复: 10
分享一个不用index monitor usage获得索引使用情况的脚本, 不保证100%准确, 但也八九不离十

col c1 heading 'Object|Name' format a30
col c2 heading 'Operation' format a15
col c3 heading 'Option' format a15
col c4 heading 'Index|Usage|Count' format 999,999
break on c1 skip 2
break on c2 skip 2

select p.object_name c1, p.operation c2, p.options c3,count(1) c4
from dba_hist_sql_plan p, dba_hist_sqlstat s
where p.object_owner <> 'SYS'
and p.operation like '%INDEX%'
and p.sql_id = s.sql_id
group by p.object_name,p.operation, p.options order by 1,2,3;
下载专业ORACLE数据库恢复工具PRM-DUL  For Oracle http://www.parnassusdata.com/zh-hans/emergency-services

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638  QQ: 47079569   
2#
发表于 2013-5-20 14:35:15
沙发!!!!!

回复 只看该作者 道具 举报

3#
发表于 2013-5-20 14:36:10
板凳。。。测试去

回复 只看该作者 道具 举报

4#
发表于 2013-5-20 14:37:07
up              

回复 只看该作者 道具 举报

5#
发表于 2013-5-20 14:38:34
测试中。。。。。。

回复 只看该作者 道具 举报

6#
发表于 2013-5-20 14:40:39
本帖最后由 aiirii 于 2013-5-20 16:43 编辑

这个似乎更实用, 转自网络:

查找创建的索引,但在当前缓存SQL执行计划不存在
with in_plan_objects as
  (select distinct object_name from v$sql_plan where object_owner = USER)
select table_name, index_name,
  case when object_name is null then 'NO' else 'YES'
  end as in_cached_plan
from user_indexes left outer join in_plan_objects on (index_name = object_name);

回复 只看该作者 道具 举报

7#
发表于 2013-5-20 15:04:30
顶起                              

回复 只看该作者 道具 举报

8#
发表于 2013-5-20 15:12:21
分享一个使用index monitor usage功能监控索引使用情况的脚本:)

/**监控索引是否被使用*/
--create table
CREATE TABLE dbamonitor.WZ_INDEX_USAGE
   (    "INDEX_NAME" VARCHAR2(30) NOT NULL,
        "TABLE_NAME" VARCHAR2(30) NOT NULL,
        "MONITORING" VARCHAR2(3),
        "USED" VARCHAR2(3),
        "START_MONITORING" VARCHAR2(19),
        "END_MONITORING" VARCHAR2(19),
        "CAPATURE_TIME" date
   );
--record index usage status(capture v$object_usage regularly,and reset V$OBJECT_USAGE used flag with NO)
$ cat monitor_index_usage.sh
#!/bin/sh
#Description:monitor index usage

#check interval unit(seconds)
_INTERVAL=300
while true
do
sqlplus -s / as sysdba   << EOF
whenever sqlerror exit rollback
INSERT INTO dbamonitor.WZ_INDEX_USAGE
select io.name index_name,
               t.name table_name,
               decode(bitand(i.flags, 65536), 0, 'NO', 'YES') monitoring,
               decode(bitand(ou.flags, 1), 0, 'NO', 'YES') used,
               ou.start_monitoring start_monitoring,
               ou.end_monitoring end_monitoring,
               sysdate
        from sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou
        where io.owner# = 161    --modify this value to yours
          and i.obj# = ou.obj#
          and io.obj# = ou.obj#
          and t.obj# = i.bo#
    AND bitand(i.flags, 65536)<>0
    AND bitand(ou.flags, 1)<>0;
UPDATE sys.Object_Usage SET flags=0;
commit;
EOF

sleep $_INTERVAL
done

回复 只看该作者 道具 举报

9#
发表于 2013-5-20 15:49:53
O(∩_∩)O~

回复 只看该作者 道具 举报

10#
发表于 2013-5-20 19:15:48
俺也测试测试

回复 只看该作者 道具 举报

11#
发表于 2013-5-20 19:51:30
Good~~~ 需要测试下

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 15:30 , Processed in 0.052485 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569