如何使用C#监控oracle数据库

如何使用C#监控oracle数据库,第1张

这种思路不好,实现不了。

需要换一种想法。

例如:

1C#写一个实时监控程序,Oracle写包和触发器

2监控程序的作用是实时的调用包,然后返回相关数据

3触发器的作用是,当某个表有数据插入或者删除,或者某个字段被修改了会直接触发。将想要写的数据,写进指定表或视图。

整体思路是:

当某个表有变动,触发器就触发并写入数据到指定表或视图。

一段时间后,C#监控程序调用Oracle的包,包从指定表或视图获取数据,然后将数据返回到监控端,监控端再触发特定的C#代码。

监控sql server数据库记录批量更新的方法是利用触发器记录更新历史。

在sql server中惊醒dml *** 作可以建立插入或者更新的触发器:

update更新类型触发器

if (object_id('tgr_classes_update', 'TR') is not null)

drop trigger tgr_classes_update

go

create trigger tgr_classes_update

on classes

for update

as

declare @oldName varchar(20), @newName varchar(20);

--更新前的数据

select @oldName = name from deleted;

if (exists (select from student where name like '%'+ @oldName + '%'))

begin

--更新后的数据

select @newName = name from inserted;

update student set name = replace(name, @oldName, @newName) where name like '%'+ @oldName + '%';

print '级联修改数据成功!';

end

else

print '无需修改student表!';

go

就是用C#做一个windows服务,简单呀

protected override void OnStart(string[] args)

{

// TODO: 在此处添加代码以启动服务。

MyTimer();

}

//实例化SystemTimersTimer

private void MyTimer()

{

//时间间隔

SystemTimersTimer MT = new SystemTimersTimer(intParse(ConfigResourceInterval)601000);

MTElapsed += new SystemTimersElapsedEventHandler(MTimedEvent);

//MTAutoReset =false;

//MTStart();

MTEnabled = true;

}

//构造SystemTimersTimer实例 间隔时间事件 (定时执行事件)

private void MTimedEvent(object source, SystemTimersElapsedEventArgs e)

{

//开始工作

StartWork();

}

protected void StartWork()

{

//你的代码 查询更新

}

Online DDL 工具:pt-osc

对于 MySQL Online DDL 目前主流的有三种工具:

原生 Online DDL;

pt-osc(online-schema-change),

gh-ost

本文主要讲解 pt-online-schema-change 的使用以及三种工具的简单对比。

一、原理及限制

11 原理

1 创建一个与原表结构相同的空表,表名是 _new 后缀;

2 修改步骤 1 创建的空表的表结构;

3 在原表上加三个触发器:delete/update/insert,用于 copy 数据过程中,将原表中要执行的语句在新表中执行;

4 将原表数据以数据块(chunk)的形式 copy 到新表;

5 rename 原表为 old 表,并把新表 rename 为原表名,然后删除旧表;

6 删除触发器。

尝试这样的思路:

假如你监控A表,将A表的所有ID写入一个检测表中

--创建表 

create table A_CheckUpdate(AID int,BinaryCheckSum int,Remark varchar(50)) 

--将表A的初始数据插入检测更新表中 

insert into A_CheckUpdate select AID,Binary_CheckSum(),'' from A 

 

--你写一个通信 每隔一段时间 比如5秒钟检查一次

--查询A表被更新过的记录 

select  from A_CheckUpdate 

where exists( 

select AID from A where AAID=A_CheckUpdateAID 

and binary_checksum()<>A_CheckUpdateBinaryCheckSum) 

--如果是查看insert 或者delete的数据 请查看A_CheckUpdate是否有多余的ID 或者缺少的ID

select AId from A left join A_CheckUpdate on aID=A_CheckUpdateID

where A_CheckUpdateID is null

 

select A_CheckUpdate Id from A right join A_CheckUpdate on aID=A_CheckUpdateID

where AID is null

在要监控的表A中创建触发器,把新记录数据,更新到另外一张表B,

应用定期查询B的时间,前后两次查询的结果一样就是没有更新,不一样就是有新记录。

当然也可以直接查询原表A,不过A的数据一多就影响性能了。

以上就是关于如何使用C#监控oracle数据库全部的内容,包括:如何使用C#监控oracle数据库、求助“用一个小程序监控数据库中的表是否有更新、.net做一个windows服务来监控数据库中某个表中的数据更新的 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9374930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存