这种思路不好,实现不了。
需要换一种想法。
例如:
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服务来监控数据库中某个表中的数据更新的 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)