Oracle DML操作实时监控系统(oracledml监控)
Oracle DML操作实时监控系统简介
Oracle DML操作实时监控系统是一个基于Oracle数据库的监控系统,主要监控DML(Data Manipulation Language)类型的操作,如INSERT、UPDATE、DELETE等操作,实时检测出影响系统表数据的变化,然后可以通过针对性的处理达到数据安全、正确性和一致性的要求。
Oracle DML操作实时监控系统的实现
Oracle DML操作实时监控系统的实现主要靠Oracle的Packaged 和UDT(User Defined Type)实现:
(1) 首先,创建一个Package,定义一些检测监控需要的类型(Type),主要包括以下几个阶段:
— 创建需要实时跟踪的表类型
create or replace TYPE table_list AS TABLE OF VARCHAR2(100);
— 创建需要实时跟踪的字段类型
create or replace TYPE field_list AS TABLE OF VARCHAR2(100);
— 创建需要实时准备实时监控SQL语句类型
create or replaceTYPE watch_sql AS TABLE OF VARCHAR2(400);
(2) 定义类型完毕后,在Package中定义一些变量来保存实时检测的参数,比如:
table_list tables;
field_list fields;
watch_sql sqls;
(3) 然后定义实时监控函数watch_dml(),检测Oracle DML操作:
function watch_dml
begin
— 使用条件检测是否存在DML操作
if tables.exists() then
— 遍历每个表,构建一条SQL语句
for i in tables.first()..tables.last()
loop
— 判断是否有指定字段,如果有用指定字段,否则,默认全部字段
if fields.exists() then
sqls.extend;
sqls(sqls.last) := ‘select ‘ || fields.first;
for j in fields.first()+1..fields.last()
loop
sqls(sqls.last) := sqls(sqls.last) || ‘, ‘ || fields(j);
end loop;
sqls(sqls.last) := sqls(sqls.last) ||
‘ from ‘ || tables(i);
else
sqls.extend;
sqls(sqls.last) := ‘select ‘ * ‘ from ‘ || tables(i);
end if;
end loop;
end if;
return sqls;
end watch_dml;
(4) 最后,使用定义的函数,使用SQL语句检测实时监控:
for i in sqls.first()..sqls.last() loop
begin
cursor cur_sql is select regtime, old_rec, new_rec from table_ name where rowid in
(select rowid from old_table minus select rowid from new_table);
open cursor cur_sql;
fetch cursor cur_sql into l_regtime, l_old_rec, l_new_rec;
add into log_table (regtime, old_rec, new_rec);
update log_table set regtime=l_regtime, old_rec=l_old_rec, new_rec=l_new_rec
end loop;
end;
Oracle DML操作实时监控系统的优势
Oracle DML操作实时监控系统能够快速准确地监控数据库表中DML类型的变更,并且可以定期把检测到的变更进行数据记录,以实现数据安全性,正确性和一致性的要求。同时,Oracle DML操作实时监控系统不仅实现了数据记录的功能,同时也具备应急恢复的能力,如果发现数据的异常及时发现,可以快速恢复原有数据。