Oracle日志挖掘操作实验

作者:隔壁老王(http://wallimn.iteye.com),本人原创,转载请保留本人信息。

学习了几天日志挖掘的基本知识,今天终于决定动手做个实验。实验的过程很简单,就是使用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
----我的是两个日志,默认是三个

--查看日志成员,注意组号与上文的当前日志号相同。并检查日志切换时间是否在删除函数时间之前
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进行的两次操作,一次创建,一次删除。把创建语句重新执行一下就把函数恢复了。



你可能感兴趣的:(oracle,sql,C++,c,数据挖掘)