Oracle日志挖掘操作实验
发布时间:2010/7/12 11:24:32 来源:城市学习网 编辑:ziteng
学习了几天日志挖掘的基本知识,今天终于决定动手做个实验。实验的过程很简单,就是使用HR用户,创建一个函数,然后删除,然后使用日志挖掘把函数恢复回来。
下面介绍一下实验过程,整个过程都是基于sql plus的。
注意,本文本涉及使用logmnr的基本知识,相关知识网上有很多,请自行搜索。
1.准备工作
--登录
conn hr/hr
--创建函数
CREATE OR REPLACE function fGetPrice return number
is
begin
return 1;
end fGetPrice;
/
--检验函数执行情况
select fGetPrice from dual;
--删除函数,最好能记下时间
drop function fGetPrice;
2.日志挖掘
--使用管理员登录
conn / as sysdba
--设置一下sql plus
set pagesize 50
set line 200
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
--查找当前日志
select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
2 1 752 104857600 1 YES INACTIVE 88233258 2010-06-09 15:08:16
3 1 753 104857600 1 NO CURRENT 88284273 2010-06-10 10:23:11[NextPage] ----我的是两个日志,默认是三个
--查看日志成员,注意组号与上文的当前日志号相同。并检查日志切换时间是否在删除函数时间之前
select member from v$logfile where group#=3;
MEMBER
--------------------------------------------------------------------------------------------
C:\ORACLE\ORADATA\GORACLE\REDO03.LOG
--添加日志并进行分析
begin
dbms_logmnr.add_logfile(options=>dbms_logmnr.new,
logfilename=>'C:\ORACLE\ORADATA\GORACLE\REDO03.LOG'
);
end;
/
begin
dbms_logmnr.start_logmnr(
dictfilename=>'c:\oracle\oradata\goracle\logmnr.dict',
starttime=>'2010-06-10 10:23:11',
endtime=>'2010-06-10 11:08:11');
end;
/
----注:dictfilename指定的参数,是我事先建好的数据字典的位置。请根据个人情况自己设定
--查看分析结果
select sql_redo from v$logmnr_contents where seg_name='FGETPRICE';
SQL_REDO
------------------------------------------------------------------------------------------------
CREATE OR REPLACE function fGetPrice return number
is
begin
return 1;
end fGetPrice;;
ALTER FUNCTION "FGETPRICE" COMPILE DEBUG;
drop function fgetprice
;
可以看到针对函数FGETPRICE进行的两次操作,一次创建,一次删除。把创建语句重新执行一下就把函数恢复了。