这种思路不好,实现不了.
需要换一种想法.
例如:
①C#写一个实时监控程序,Oracle写包和触发器.
整体思路是:
当某个表有变动,触发器就触发并写入数据到指定表或视图.
一段时间后,C#监控程序调用Oracle的包,包从指定表或视图获取数据,然后将数据返回到监控端,监控端再触发特定的C#代码.
ORACLE其实提供了监控索引使用情况的功能.ALTER INDEX index_name MONITORING USAGE; 我们下面来测试验证一下吧.
创建一个表TEST作为实验测试验证的样例
CREATE TABLE TEST
(
ID NUMBER(10),
);
CREATE INDEX IDX_TEST_ID ON TEST(ID);
INSERT INTO TEST
SELECT 1001, 'Kerry' FROM DUAL UNION ALL
COMMIT;
execute dbms_stats.gather_table_stats(ownname = 'ETL', tabname ='TEST', estimate_percent =DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt = 'FOR ALL COLUMNS SIZE AUTO');启用对索引IDX_TEST_ID的监控
SQL COL TABLE_NAME FOR A10
SQL COL MONITORING FOR A10
SQL COL USED FOR A10
SQL SELECT * FROM V$OBJECT_USAGE;
SQL SET AUTOTRACE ON;
SQL SELECT * FROM TEST WHERE ID =1001;
ID NAME
---------- --------------------------------1001 Kerry
Execution Plan
-----
- 'PLAN_TABLE' is old version
Statistics
----------------------------------------------------------1 recursive calls
0 db block gets
0 physical reads
0 redo size
0 sorts (memory)
0 sorts (disk)
①. rows processed
clip_image001
如下所示,此时索引IDX_TEST_ID依然没有被使用.
我们使用索引提示强制下面SQL使用索引IDX_TEST_IDSELECT /*+ INDEX(TEST IDX_TEST_ID) */* FROM TEST WHERE ID =1001;此时你就会发现USED的值变为了YES了.
ALTER INDEX IDX_TEST_ID NOMONITORING USAGE;执行上面命令后,在V$OBJECT_USAGE表中,就会更新表TEST记录的END_MONITORING、MONITORING的值.
如果你又启用监控索引使用情况,那么系统会更新START_MONITORING、END_MONITORING字段的值(END_MONITORING的值更新为NULL).如果删除表TEST,此时你会发现V$OBJECT_USAGE对象中关于表TEST的记录也不见了.
注意:SELECT * FROM V$OBJECT_USAGE; 只能查看当前用户下被监控的索引信息.即使sys、system用户也不能查看其它用户的信息.
在测试过程中有个小疑问,就是在准备测试环境时,如果不对表收集统计信息的话,那么即使SQL走全表扫描,你依然发现V$OBJECT_USAGE中索引被标记使用了.如下所示DROP TABLE TEST PURGE;
ALTER INDEX IDX_TEST_ID MONITORING USAGE;SQL SET AUTOTRACE ON;
SQL SELECT * FROM TEST WHERE ID =1001;
①.0 consistent gets
如果我们想在系统中监控所有的索引,那么我们可以通过下面脚本实现监控数据库所有的索引.注意我们要排除一些系统表的索引、以及LOB indexes.原因有下面两个:
*Action: None.
SET HEADING OFF;
SPOOL run_monitor.sql
SELECT
'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' MONITORING USAGE;'
FROM
DBA_INDEXES
WHERE
INDEX_TYPE != 'LOB' AND OWNER NOT IN ('SYS', 'SYSMAN', 'SYSTEM', 'MDSYS', 'WMSYS', 'TSMSYS', 'DBSNMP', 'OUTLN');
SPOOL OFF;
@run_monitor.sql
此时使用下面脚本就能查出那些索引是未使用索引,当然监控索引时长非常重要,太短的话有可能导致查询出来的数据有问题,一般建议监控一周后即可,OLAP系统则需要适当延长监控的时间.
SELECT I.TABLE_OWNER,
T.TABLE_NAME,
I.INDEX_NAME,
U.USED,
U.START_MONITORING,
U.END_MONITORING
FROM USER_TABLES T
INNER JOIN USER_INDEXES I
ON T.TABLE_NAME = I.TABLE_NAME
INNER JOIN V$OBJECT_USAGE U
ON U.TABLE_NAME = I.TABLE_NAME
AND I.INDEX_NAME = U.INDEX_NAME
select *
from
(select
owner,
index_name
dba_indexes di
where
di.index_type != 'LOB'
and
owner not in ('SYS', 'SYSMAN', 'SYSTEM', 'MDSYS', 'WMSYS', 'TSMSYS', 'DBSNMP', 'OUTLN')minus
select
index_owner owner,
dba_constraints dc
index_owner not in ('SYS', 'SYSMAN', 'SYSTEM', 'MDSYS', 'WMSYS', 'TSMSYS', 'DBSNMP', 'OUTLN')minus
p.object_owner owner,
p.object_name index_name
stats$snapshot sn,
stats$sql_plan p,
stats$sql_summary st,
stats$sql_plan_usage spu
st.sql_id = spu.sql_id
spu.plan_hash_value = p.plan_hash_value
st.hash_value = p.plan_hash_value
sn.snap_id = st.snap_id
sn.dbid = st.dbid
sn.instance_number = st.instance_number
sn.snap_id = spu.snap_id
sn.dbid = spu.snap_id
sn.instance_number = spu.instance_number
sn.snap_id between begin_snap and end_snapand
p.object_type = 'INDEX'
)
/
accept idxname char prompt 'Enter Index Name: '
ttitle 'Invocation Counts for index|idxname'
dba_hist_snapshot sn,
dba_hist_sql_plan p,
dba_hist_sqlstat st
st.sql_id = p.sql_id
p.object_name = 'idxname'
group by
begin_interval_time,search_columns;
?在Oracle EBS上进行Form跟踪的技术方法:
Oracle EBS的一个Profile 提供此功能:
User_Profile_Option_Name = 登录:审计层(Sign-On:Audit Level)
View_Name = FND_SIGNON_AUDIT_VIEW
'无':不跟踪--A
'用户':只跟踪到哪个用户登陆
'职责':只跟踪到哪个用户以哪个职责登陆
'表单':跟踪哪个用户以哪个职责登陆后,运行哪个FORM--D
启用此Profile后,可以在FND_SIGNON_AUDIT_VIEW中查询到相关数据
通过PID或PROCESS_SPID与 v$process/v$session 关联
"登录:审计层"允许您选择审计登录至 Oracle 应用产品用户的层,并增加了四个审计层的功能:无、用户、责任和表单.?
"无"是默认值,
表示不审计登录到 Oracle 应用产品的任何用户.?
在"用户"层的审计线索:?
登录至您的系统的用户?
用户登录和退出的时间
占用的终端?
在"责任"层审计执行了"用户"层审计功能和线索:?
责任用户选择?
用户使用每个责任的时间量?
在"表单"层审计执行了"责任"层审计功能和线索:?
用户选择的表单?
用户使用每个表单的时间?
系统管理员在所有层均可进行查看、更新.?
用户无法查看或更改此预置文件选项.?
此预置文件选项在全部四个层均可查看和更新.?
层? ? ? ?是否可查看? ? ? ?是否允许更新?
站点? ? ? ?是? ? ? ?是?
应用? ? ? ?是? ? ? ?是?
责任? ? ? ?是? ? ? ?是?
用户? ? ? ?是? ? ? ?是?
此预置文件选项的内部名称为 SIGNONAUDIT:LEVEL.
标准功能的Form,都会被只要设定Profile值,都会被监控的;
但是,客制开发的Form,如果想被系统记录其使用情况和使用次数,必须写代码:
在Pre-Form(或者WHEN-NEW-FORM-INSTANCE)正确输入下面语句,就可以记录每次User登录Form的信息(登录时间,次数等)了:
例如,Form名称是:XYG_WIP_MOVE_SCH_QY
注册的模组的简称是:XYG
只要User登录这个Form,就会被记录下来,方便以后统计Form的被使用次数等信息.
逻辑是:只要在同一个权限登录一次Form,就会被记录一次.
同时,用DB工具也可以方便查看目前用户使用Form的信息.
检查实例的可用性
检查监听器的可用性
检查alert日志文件中的错误信息
在存放log文件的地方满以前清空旧的log文件
分析table和index以获得更好的性能
检查表空间的使用情况
找出无效的对象
监控用户和事务!
Oracle database 10g
① 使用LR自带的监控引擎
这一步就不用说了,安装直接Setup,安装就OK了.
①.,安装完后,先配置一下Net Configuration Assistant.记住配置的服务名.
配置成功会显示:正在连接...测试成功.
查看是否登录成功.
这里我们用LR native monitors.
不需要配置Net Configuration Assistant.
今天这一节可以选择本地或者其他机器的sitescope,如果sitescope启用了aclearcase/" target="_blank" ccount的验证,也要写上相应的用户名密码.
至此就可以监控oracle了.
以上就是土嘎嘎小编为大家整理的oracle监控怎么用相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!