!!!大讨论:程序如何监视数据库的变化----来者有分楼主wnchg(温水青蛙)2002-05-28 16:09:21 在 PowerBuilder / 数据库相关 提问
我的程序要监视数据库所有表的变化情况,如何实现?
现在我用的方法是:给每张表做一个触发器,作用是当表有变化时,往特定的一张表my_systable写入一条记录,我的程序定时扫描表my_systable,但这样开销太大。
有没有更好的方法?
欢迎参加讨论!
问题点数:0、回复次数:122
Top
1 楼jackygan(一剑飘香)回复于 2002-05-28 16:12:18 得分 0 如果是SQLSERVER的话,他本身看带的profile里有一个自动监视,很多用的。
Top
2 楼far_ranging(大路)回复于 2002-05-28 16:23:33 得分 0 一般来说都会有一些系统表,你定时查看系统表就行了。不同的数据库系统表也不相同。
Top
3 楼kaikaihe(开开)回复于 2002-05-28 16:25:49 得分 0 寻找工具解决
Top
4 楼lws0472(期待2008)回复于 2002-05-28 16:33:01 得分 0 每个数据库都有自己的日志文件,后缀基本都为.log,不同的数据库日志文件也不一样,你查一下就可以了
Top
5 楼wnchg(温水青蛙)回复于 2002-05-28 16:36:41 得分 0 to: jackygan(一剑飘香):SQLSERVER的profile可以与我的程序通信么?
to: kaikaihe(开开):有没有不采取循环监视的工具?
Top
6 楼wizardinred(红袍法师)回复于 2002-05-29 14:01:13 得分 0 我也想知道,期待中....
Top
7 楼blue_tear_11(blue_tear_)回复于 2002-05-29 14:07:14 得分 0 我不知道,所以来看看
Top
8 楼jackygan(一剑飘香)回复于 2002-05-29 14:09:15 得分 0 SQLSERVER的profile里会把记录存为文本,你用程序去访问这个文本就可以了。
Top
9 楼programbcb(datawindow)回复于 2002-05-29 14:13:48 得分 0 pb中不好作,有谁知道这个原理的
比如在网络游戏中,一个人的走动会在其它任何一起玩的人的电脑中走动一样
这是如何实现的?
Top
10 楼wnchg(温水青蛙)回复于 2002-05-29 14:21:01 得分 0 (一剑飘香) profile是SQLSERVER中的工具吗?SQLSERVER个人中文版里有吗?
Top
11 楼jackygan(一剑飘香)回复于 2002-05-29 14:48:22 得分 0 有啊,是profiler,上面我写错了,具体说明参看MSSQL的书籍。
Top
12 楼jimly(jimly)回复于 2002-05-31 00:20:06 得分 0 用其它方法的开销恐怕只会更大。
再有就是不知你监视的目的,是监视谁改了数据,还是监视数据库的性能参数
是否需要调整?
Top
13 楼SOFTFUN_CSDN(不知所云~)回复于 2002-05-31 00:23:07 得分 0 1、这是DBMS的范畴,通用的实现做起来比较复杂,因为不同的DBMS差异较大;
2、一般DBMS都提供有此功能;
3、用触发器是很不现实且笨的方法;
Top
14 楼xiaoxianhe(笑仙鹤)回复于 2002-05-31 00:24:37 得分 0 期待答案。
Top
15 楼wnchg(温水青蛙)回复于 2002-05-31 16:52:29 得分 0 to:jimly(一脚) 我主要是要监视某些特定的表,当这些表发生变化后,让程序(而非手动)按照一定顺序去对修改相关的表。
Top
16 楼ouyi2002(即查即用-摘星计划)回复于 2002-05-31 17:12:09 得分 0 不是有一个数据库日志文件吗?就是那个后缀为*.log的文件。
比如你有一个名为AAA.db的数据库,在同一路径下一定存在一个名为AAA.log的日志文件,这个文件就是用来记录数据库的改变情况的,必要的时间可以用它来对数据库进行恢复。
Top
17 楼pei322(灵瞳)回复于 2002-05-31 17:15:13 得分 0 学习学习
Top
18 楼ouyi2002(即查即用-摘星计划)回复于 2002-05-31 17:21:10 得分 0 如果是监视一张表,我有一个主意,你新建一张表,结构和被监视的表一样,只是表名不一样。然后为被监视的建立数据窗口,将它的删除和修改缓冲区中的数据写入新建的一张表中,这时新建的一张表就用来记录被监视表的修改情况。(这种做法有一个前提,就是你的被监视表一定要用数据窗口进行操作,不用直接用SQL语句来操作。这样被监视表的修改情况才能被记录下来)。
这种做法我以前已经成功地做出来了,不知哪位高人还有没有更好的方法?
Top
19 楼zhanwei(@_@,初学.Net)回复于 2002-05-31 17:28:18 得分 0 我建议楼主看一下PFC的DEBUG Service的处理方式,可以监测所有的执行的sql语句,包括嵌入式和数据窗口的,在这没法很详细的解释,自己先看看吧!
Top
20 楼wnchg(温水青蛙)回复于 2002-06-01 16:34:55 得分 0 To: zhanwei(白天不上CSDN) 恕我拙笨,请问何为“PFC的DEBUG Service的处理方式”
TO:ouyi2002(林月如(言而有信);问题是要监视的表不是由我操纵的。
谢谢大家的捧场,日后结贴,
鄙人当总结最好的方法。贴出备考!
Top
21 楼ddtid(竹雨)回复于 2002-06-01 16:45:50 得分 0 说了要给分的啊
我不知道
Top
22 楼sunsg()回复于 2002-06-02 16:23:56 得分 0 你说的方法也可以,不过可以定期的清除以前的数据,只保留最近一周的数据
Top
23 楼oceanaut(海阔天空)回复于 2002-06-03 11:08:34 得分 0 具体我也没有做过,:)
Top
24 楼sydeng(new海)回复于 2002-06-03 11:47:44 得分 0 to:wnchg
知道了,告诉我,谢谢。
sydeng@371.net
Top
25 楼cqulzh(Eexcelence)回复于 2002-06-03 13:17:24 得分 0 再次学习……
Top
26 楼wnchg(温水青蛙)回复于 2002-06-04 18:37:58 得分 0 转发grey_whp有关监视数据源的的发言
————————————————————————-
grey_whp(小跑) :
先写一个触发器,在ORACLE中,调用外部C++程序,将windows常用的3个DLL联编到自己的程序里,这用就可以通知窗口了。
发送者 grey_whp 发送时间 2002-6-3 22:40:11
前几天和我的同事遇到了类似的问题,她是用一个触发器去触发ORALCE一个外部调用,有外部调用去向一个指定的窗口发消息,然后就实现了数据库更新时的自动通知功能。
你可用到的windows中的几个动态连接库,是KERNEL32.dll,user32.dll另一个我忘记了,他们在winnt\system32下。
Top
27 楼xiongxiao(小雄)回复于 2002-06-12 10:15:22 得分 0 关注
Top
28 楼yufeng777(yufeng)回复于 2002-06-12 15:27:54 得分 0 学习
Top
29 楼tiantianpb(第一菜鸟!)回复于 2002-06-12 20:11:12 得分 0 学习,再学习,努力再努力
Top
30 楼wnchg(温水青蛙)回复于 2002-06-12 20:51:44 得分 0 等待,再等待,等待再等待
Top
31 楼Leony(老树)回复于 2002-06-13 17:02:07 得分 0 学习
Top
32 楼roor(宝蓝)回复于 2002-06-14 07:58:53 得分 0 学习ing
Top
33 楼pzjy(朱建永)回复于 2002-06-16 04:07:17 得分 0 up~~~~~~~
Top
34 楼rakeliu(老牛)回复于 2002-06-16 09:34:49 得分 0 提一个思路,不知有用没用!
我做过一个类似复制服务的小程序,就是使用触发器,记录表名、主键条件字穿,定期查询这张表就知道是否有数据修改。
Top
35 楼wnchg(温水青蛙)回复于 2002-06-18 10:59:28 得分 0 定期查询这张表--- rakeliu(老牛) 是在程序里用循环做吗?
Top
36 楼wk_1978()回复于 2002-06-18 12:37:14 得分 0 up
Top
37 楼jmsofts(jmsofts)回复于 2002-06-18 14:59:48 得分 0 gz
Top
38 楼wnchg(温水青蛙)回复于 2002-06-19 22:10:00 得分 0 欢迎各位提出宝贵意见,
也请帮忙up一下贴子。
Top
39 楼ben_4(二水)回复于 2002-06-19 22:39:57 得分 0 强烈关注
Top
40 楼put(干劲)回复于 2002-06-21 13:03:46 得分 0 关注 关注
Top
41 楼jianghuxing(回头看看原来我一无所有)回复于 2002-06-27 17:19:35 得分 0 我已有一个点点思路,那位仁兄还有高见呀。
谈谈,在谈谈。
Top
42 楼siyuancxl(思远)回复于 2002-06-27 18:59:54 得分 0 jackygan(一剑飘香) 说得很对,
如果是SQLSERVER的话,他本身带的profile里有一个自动监视,很有用的。
所有的sql语句都能监视到!
Top
43 楼zqllyh(学习Stupid As Pig中...)回复于 2002-06-27 20:02:22 得分 0 关注
Top
44 楼oftenfail(静静的等待)回复于 2002-06-28 08:48:21 得分 0 学习
Top
45 楼wallis(豆子)回复于 2002-07-09 12:50:14 得分 0 up
Top
46 楼wallis(豆子)回复于 2002-07-09 12:50:52 得分 0 up
Top
47 楼hjd_cw()回复于 2002-07-09 13:38:03 得分 0 我正在做这样的东西,原型已经搞定了!
Top
48 楼wnchg(温水青蛙)回复于 2002-07-10 08:57:54 得分 0 欢迎发表意见
Top
49 楼webcat()回复于 2002-07-10 09:08:34 得分 0 关注
Top
50 楼zry_ykfh(zry)回复于 2002-07-10 10:25:38 得分 0 关注
Top
51 楼pb_yu(pb鱼)回复于 2002-07-10 11:20:00 得分 0 同意 ouyi2002(林月如(言而有信)) 方法,
我以前用过同类方法解决过类似问题。
另外:还可以建立一个日志表,在程序执行中用编程方式将各种操作 用户+执行的SQL+及数据等信息insert日志表中,定期检索此表。
以上方法只适应对单个表或极少数表有目的的进行监视
Top
52 楼bestlea(牙白)回复于 2002-07-10 11:48:20 得分 0 我不知道你是想监视每张表的数据变化呢,还是哪些表被修改过的?
Top
53 楼bestlea(牙白)回复于 2002-07-10 11:52:04 得分 0 我不知道你是想监视每张表中的数据变化,还是想监视哪些表有被改动过?请告知,我下午再来!
Top
54 楼szpqq(Gavin)回复于 2002-07-10 11:59:17 得分 0 学习
Top
55 楼GuoYangHai(Charles.Guo)回复于 2002-07-10 12:14:45 得分 0 修改某些特定的表成功後,馬上去修改其它的表
Top
56 楼wallis(豆子)回复于 2002-07-11 17:53:27 得分 0 学习。
Top
57 楼wnchg(温水青蛙)回复于 2002-07-12 18:07:27 得分 0 To: bestlea(牙白)
我要根据各个表的变化情况,来维护相关的表,以保持数据的一致性。顾而要监视每张表中的数据变化。
Top
58 楼hjd_cw()回复于 2002-07-14 11:56:29 得分 0 sybase 里可以用 monitor server。
Top
59 楼netdog0399(四君子)回复于 2002-07-14 12:23:05 得分 0 我想的话,不同的数据库有不同的对表变化监视的工具!但是有PB来实现我还是要看高手如何解决的了!
糊涂蓝:)
虽然生活在同一个世界里,但却被一面玻璃墙隔开。在彼此的世界里面,我可以看到你在哭,你可以看到我在笑,但是我永远也无法感触到你的体温,就像你永远也无法感觉到我的心跳。
Top
60 楼sun9761(bobi)回复于 2002-07-14 18:47:22 得分 0 我建议去看《sql数据库系统管理与开发指南》里面又sql数据库的工作模式和他的工作运行状态的分析。剖析了数据库的工作。触发器和存储过程都有。可以看看。
Top
61 楼byry(百事罐头)回复于 2002-07-17 08:49:44 得分 0 在数据库端做触发器最好,写存储过程也可以,在客户端用程序实现也可以,不过这样会加重客户端的工作,而且不利于数据库的一致性,完整性,以及数据库恢复和并发控制.
Top
62 楼xirumin(吃好喝好)回复于 2002-07-17 09:43:48 得分 0 如果有很多表,还是用DBMS自带的功能,最好不要另出机注,很费力又不讨好
Top
63 楼wnchg(温水青蛙)回复于 2002-07-17 18:38:06 得分 0 xirumin(雪山飞剑) ,什么叫“另出机注”?
Top
64 楼bestlea(牙白)回复于 2002-07-18 21:57:09 得分 0 最好的方法,也是最麻烦的方法就是对表建立check机制。
Top
65 楼muzi(muzi)回复于 2002-07-19 23:19:06 得分 0 关注中!
Top
66 楼pb_yu(pb鱼)回复于 2002-07-20 00:04:02 得分 0 To: bestlea(牙白)
我要根据各个表的变化情况,来维护相关的表,以保持数据的一致性。顾而要监视每张表中的数据变化。
我认为楼主问题是保持数据的一致性, 所以还是要看楼主的系统是如何规划的,以及各表之间数据关系。如果系统异步实现数据的统一足够,那么编写存储过程定时触发异步实现数据的一致性,毕竟同步实现太消耗系统性能,而且数据库也不稳定,也不一定可靠。
Top
67 楼bestlea(牙白)回复于 2002-07-20 09:13:02 得分 0 to pb_yu(pb鱼)
你有没有想过异步实现数据数据的一致性在一定程度上反而不一致吗?比如说,一用户在检索数据时,你所用的异步触发还未发动,此时的数据就会不一致的。
Top
68 楼tiger7403(好兵帅克)回复于 2002-07-20 10:02:05 得分 0 关注
Top
69 楼bad_good(温柔一小刀)回复于 2002-07-20 10:13:24 得分 0 写存储过程也可以,在客户端用程序实现也可以,不过这样会加重客户端的工作,而且不利于数据库的一致性,完整性,以及数据库恢复和并发控制.
Top
70 楼banalman(IT解放者)回复于 2002-07-20 11:50:59 得分 0 肯定数据库系统的系统表中有的
Top
71 楼bestlea(牙白)回复于 2002-07-22 08:42:33 得分 0 我们考虑得太多了,我认为不管怎么实现,只有服务器端或客户端只要有能力支持实现过程,那么就不算对系统增加了额外的资源。
Top
72 楼liulee(流方)回复于 2002-07-22 21:34:23 得分 0 若是用户级的监控,可以用 PFC的services来解决,实际上就是把transaction的语法全部截获下来。
若是服务器端的监控,若不怕开销,可以用触发器的方法;
若想别的方法?我觉得有下列可能:
1、独立程序,侦听服务器的侦听端口,若无法侦听则考虑钩子钩一下;
2、解析协议,把所有对该端口的操作全部地,统统地记录下来。
这几乎是邮件级的,所以难点在于协议的解码,若知道了,则没有更多的技术难点了。
Top
73 楼cjc79(岁月无痕)回复于 2002-07-22 22:04:38 得分 0 你这么多人来,我也凑了数!
Top
74 楼wangsj_zj(藤)回复于 2002-07-24 12:39:20 得分 0 启用pfc的提供的sql 的监视工具sql spy,将所有信息写入到指定的日志文件中
Top
75 楼771218(forit)回复于 2002-07-24 12:48:43 得分 0 一定要监视吗?不能在触发器里直接写吗?
Top
76 楼SummerHeart(夏夜之怀)回复于 2002-07-24 13:49:38 得分 0 学习 。wnchg(wnchg) 有了结论请贴出来让大家学习学习。
Top
77 楼renmao(晓晓)回复于 2002-07-24 13:55:39 得分 0 关注:我也很想知道的,大家能不能具体点!这个问题很值得讨论!
Top
78 楼joss(季节...夏至)回复于 2002-07-24 15:19:22 得分 0 去数据库基础版问问吧
直接找到他们版主也行
他们对这方面讨论得多一些
应该会有好结果
!!^^
Top
79 楼newhumanegg(新新人类)回复于 2002-07-24 23:04:26 得分 0 这个问题比较棘手,回去看看!
Top
80 楼TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669)回复于 2002-07-25 02:36:49 得分 0 用FPC的services或用SQLSERVER的profiler如果数据不是很多的话,其实用触发器也无所谓啊。
Top
81 楼wnchg(温水青蛙)回复于 2002-08-02 15:11:36 得分 0 欢迎继续讨论。
Top
82 楼LJYWZ(艳阳天)回复于 2002-08-04 22:07:58 得分 0 为什么不用触发器呢?
Top
83 楼scu96124678(冰河)回复于 2002-08-15 10:41:40 得分 0 学习学习在学习
Top
84 楼jlandzpa(jlandzpa)回复于 2002-08-16 11:55:57 得分 0 触发器就是干这种事的,它的效率肯定比你自己实现高的多.
Top
85 楼zsl208(zsl)回复于 2002-08-24 17:47:52 得分 0 同意jlandzpa(ORA-00600)的观点
Top
86 楼bad_good(温柔一小刀)回复于 2002-08-28 19:34:11 得分 0 up
Top
87 楼zenglong(zenglong)回复于 2002-09-02 14:39:34 得分 0 好象除了用触发器,和存储过程外,要与自已开发的程序通信,没有什么更
简便的方法了。
Top
88 楼ao(皮卡丘)回复于 2002-09-02 19:53:28 得分 0 up
Top
89 楼dzhcheng(逸枫)回复于 2002-09-02 20:22:48 得分 0 学习!
Top
90 楼shahand(死磕)回复于 2002-09-02 20:47:38 得分 0 如果要返回到客户端一个信息,怎么样做呢?
Top
91 楼jianlinlong(楚 潇)回复于 2002-09-03 10:40:37 得分 0 up
Top
92 楼xing_xing(流星)回复于 2002-09-03 10:54:47 得分 0 关注!
Top
93 楼junhao(白衣飘飘的年代)回复于 2002-09-03 11:20:54 得分 0 to wnchg (wnchg):
有结论后能给我发一份过来吗,我也正好遇到同样的问题,我的email是:zhang-junhao@21cn.com,非常感谢!
Top
94 楼wj_mailbox(aaa)回复于 2002-09-03 11:40:52 得分 0 数据库自带工具
Top
95 楼wkliangsdqd(天元)回复于 2002-09-03 13:16:26 得分 0 同上
Top
96 楼smilelhh(blue)回复于 2002-09-03 14:04:54 得分 0 用审计是不是要比触发器要效果好点\?
Top
97 楼ShuiZhongYue(水中月)回复于 2002-09-06 17:58:13 得分 0 用审计是最好的办法!
具体方法请参照相关的数据库书籍。
================================================================
CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!
★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。
★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。
Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
Top
98 楼ozl(糊涂虫)回复于 2002-09-06 18:11:58 得分 0 学习学习
Top
99 楼bluewinder(蓝风子)回复于 2002-09-06 18:14:18 得分 0 学习
Top
100 楼wnchg(温水青蛙)回复于 2002-09-11 10:07:41 得分 0 有谁能具体说说审计吗?我刚听说。
Top
101 楼ccc520(ccc)回复于 2002-09-11 12:53:02 得分 0 学习
Top
102 楼szpqq(Gavin)回复于 2002-09-11 12:59:59 得分 0 up
Top
103 楼softdear(softdear)回复于 2002-09-11 13:26:54 得分 0 我觉得楼主的用意主要是自动更新相关表,因此用触发器比较好
Top
104 楼Jingxh(赤脚)回复于 2002-09-11 14:14:36 得分 0 gz
Top
105 楼linwancai(小林)回复于 2002-09-15 23:05:35 得分 0 我正在准备解决双机热备用的数据库同步和数据库镜像问题,如有结论,请给我e-mail一份:wancai@21cn.com
先谢了!
我到时也给你一份我们的分析报告和算法设计。
Top
106 楼yaoyuan(遥远)回复于 2002-09-21 09:49:17 得分 0 提高ing..............................
Top
107 楼bravebarbarian(野蛮人)回复于 2002-09-22 11:03:02 得分 0 up
Top
108 楼hy_ghb(新的生活)回复于 2002-09-23 22:52:14 得分 0 对表的操作我想都是通过程序操作的,可以在操作表时写想应的sql语句记下所操作的信息,写入一个表中,以达到对数据中所有表的监视。
Top
109 楼hongqi162(失踪的月亮)回复于 2002-09-24 08:33:14 得分 0 up
Top
110 楼Hi_greece(无招胜有招)回复于 2002-09-24 09:10:17 得分 0 up
Top
111 楼888888888888(888888888888)回复于 2002-09-24 11:08:16 得分 0 触发器或存储过程
Top
112 楼chinatpsys(黑侠)回复于 2002-10-04 19:06:54 得分 0 学习学习
很有意思研究中..................................
Top
113 楼lovingyyw(坏小子)回复于 2002-10-04 20:15:36 得分 0 我是来要分的 呵呵
Top
114 楼fengzeng(风之子)回复于 2002-10-04 22:21:43 得分 0 关注!!!
Top
115 楼help2002(密码)回复于 2002-10-08 11:14:24 得分 0 为什么不用触发器?
Top
116 楼msf(飞黄腾达)回复于 2002-10-10 20:14:26 得分 0 ok
Top
117 楼l680103(l680103)回复于 2002-10-10 20:52:29 得分 0 用TIMER 隔一定时间扫一遍得了
Top
118 楼cyliu2000(开垦者)回复于 2002-10-11 08:43:10 得分 0 up
Top
119 楼norman211314(IT民工)回复于 2002-10-11 08:54:58 得分 0 没错,用触发器应可以实现的。
Top
120 楼sarvio()回复于 2002-10-11 09:24:04 得分 0 收藏
Top
121 楼chengjian(程剑)回复于 2002-10-11 09:59:10 得分 0 我也认为:用TIMER 隔一定时间扫一遍得了
Top
122 楼xiaoxianhe(笑仙鹤)回复于 2002-12-09 00:31:16 得分 0 学习……
Top
123 楼fengzeng(风之子)回复于 2003-01-02 12:15:56 得分 0 pb如何调用INTERBASE数据库的存储过程,再线等待
输入参数: IZYH VARCHAR(8)
IHISCFID DOUBLE PRECISION
ISJ DATE
IYS VARCHAR(10)
IZL VARCHAR(10)
IKS VARCHAR(30)