热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle10gRelease2新功能之变化通知-mysql教程

欢迎进入Oracle社区论坛,与200万技术人员互动交流进入引言在.NET应用程序中,我们有很多方法实现对Oracle数据库的访问。但是从功能和性能上来分析,OracleDataProviderfor.NET(ODP.NET)无疑是我们最好的选择,它是Oracle专门为基于.NET的应用程

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 引言 在.NET应用程序中,我们有很多方法实现对Oracle数据库的访问。 但是从功能和性能上来分析,Oracle Data Provider for .NET(ODP.NET)无疑是我们最好的选择,它是Oracle专门为基于.NET的应用程

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

引言

  在.NET应用程序中,我们有很多方法实现对Oracle数据库的访问。 但是从功能和性能上来分析,Oracle Data Provider for .NET(ODP.NET)无疑是我们最好的选择,它是Oracle专门为基于.NET的应用程序设计的一套接口,它的访问速度要远远快于其它方法。

  本文将介绍Oracle Database的新功能之一:Change Notification。为了能更好的说明这个新功能,我将用例程的方式来介绍它的定义和使用方法。

  Database Change Notification的产生背景

  在现在的程序开发过程中,我们经常考虑的一个提高性能的方法就是用data cache。Data cache 避免了我们每次需要数据的时候都去访问数据库,这样节省了大量的时间。但是这样就出现了一个问题,当我们用data cache的时候,如果在数据库中的数据发生了改变,那么我们data cache 中的数据就和数据库的数据不一致了,这样将会导致错误。为了解决这个问题,我们一般常用两种方法。

  1. 让用户手动的更新data cache的内容,例如提供一个更新按钮。

  2. 让我们的程序间隔一定的时间自动去更新data cache的内容。

  不难看出,这两种方法都有相当的局限性。

  第一种方法用户必须记住经常的去更新数据,如果数据库中的数据改了但是用户并没有去更新数据,这样将导致错误。第二种方法的局限性是我们没有办法设置一个恰好的时间间隔使数据库数据变化的时候保证data cache的数据也发生变化。

  Database Change Notification就是为了解决这个难题。

  Database Change Notification 的基本概念

  Database Change Notification的作用就是当数据库中的数据发生变化的时候,自动发出一个通知。

  用Database Change Notification有三个步骤:

  1. 注册: 指定数据库要监听的查询。ODP.NET自动注册基于这个查询的监听事件。数据库可以监听DML(Data Manipulation Language)事件,DDL(Data Definition Language)事件,和global 事件(例如关闭数据库)。

  2. 通知:一旦数据库中的数据发生变化,数据库将自动发出通知,我们要在我们的程序中定义事件处理操作。

  3. 响应:在我们的程序中,一旦收到通知,我们一般情况下会自动更新data cache,当然我们可以通知用户数据发生改变,由他来决定是否进行更新。

  举例:

  在ODP.NET中使用Database Change Notification很简单,请看下面的例程。这个例程用HR数据库用户。

static void Main(string[] args)
{
 string sql = "select first_name, last_name, salary from employees where employee_id = 149";
 string cOnstr= "User Id=hr;Password=hr;Data Source=oramag;Pooling=false";
 OracleConnection con = new OracleConnection(constr);
 con.Open();
 OracleCommand cmd = new OracleCommand(sql, con);
 OracleDependency dep = new OracleDependency(cmd);
 dep.OnChange += new OnChangeEventHandler(OnDatabaseNotification);
 cmd.ExecuteNonQuery();

 while (notificatiOnReceived== false)
 {
  Console.WriteLine("Waiting for notification...");
  System.Threading.Thread.Sleep(2000);
 }

 cmd.Dispose();
 con.Dispose();

 Console.WriteLine("Press ENTER to continue...");
 Console.ReadLine();
}

public static void OnDatabaseNotification(object src, OracleNotificationEventArgs args)
{
 Console.WriteLine("Database Change Notification received!");
 DataTable changeDetails = args.Details;
 Console.WriteLine("Resource {0} has changed.", changeDetails.Rows[0]["ResourceName"]);

 notificatiOnReceived= true;
}

  HR一定要有change notification 权限,我们用下面的命令。

grant change notification to hr;

  在你的电脑上安装ODP.NET,添加下面的using statement在你的代码刚开始的地方。

using System.Threading;
using System.Data;
using Oracle.DataAccess.Client;

  现在你就可以运行这段例程了。输出如下:

Waiting for notification...

  这个时候去修改你的数据库,例如用下面的命令,

update employees set salary = salary+10
where employee_id = 149;
commit;

  可以看到有如下的输出,

Database Change Notification received!
Resource HR.EMPLOYEES has changed.


推荐阅读
  • 本文探讨了为何DataWindow.NET在PowerBuilder 11之后版本中不再被支持,并提供了一种在PB12.5中恢复此功能的解决方案。欢迎交流与反馈。 ... [详细]
  • 本文提供了一组示例表,并探讨了如何通过SQL查询来计算父记录及其子记录的总金额。 ... [详细]
  • 解决PHP与MySQL之间的编码不匹配问题
    探讨如何有效解决PHP与MySQL之间常见的编码问题,确保数据的正确传输与显示。 ... [详细]
  • 使用Docker部署Gitea自托管Git服务
    Gitea是由Gogs社区分叉而来的开源自托管Git服务,旨在提供一个更加灵活和易于维护的解决方案。本文将详细介绍如何利用Docker容器技术快速部署Gitea。 ... [详细]
  • Oracle 数据库提供了自动化文件管理(OFM)的功能,允许用户通过设置特定参数来简化数据文件和日志文件的创建过程。当配置了 db_create_file_dest 和 db_create_online_log_dest_n 参数后,系统能够自动处理文件的创建与删除。 ... [详细]
  • 本文档整理了公司内部常用的网站链接和重要资源路径,包括部门周报、内控报销系统、邮件服务等,同时提供了相关数据库的登录信息。 ... [详细]
  • 深入理解Hibernate延迟加载机制
    本文探讨了Hibernate框架中的延迟加载(懒加载)特性,分析其对程序性能的影响及实现原理,同时提供了具体的代码示例来说明如何配置和使用延迟加载。 ... [详细]
  • 1、服务器配置信息① 主服务器IP:192.168.1.2② 从服务器IP:192.168.1.3③ 操作系统:主服务器:Win8,从服务器࿱ ... [详细]
  • 睿智汇海教育致力于培养杰出的IT专业人才,确保学员在就业市场上具备竞争力,助其实现职业成功。我们提供的C#/.Net/Asp.Net培训课程,旨在通过系统的教学和丰富的实践机会,帮助学员掌握最新的技术知识。 ... [详细]
  • 统一幻灯片标题:使用母版功能的技巧
    本文详细介绍了如何通过PowerPoint中的幻灯片母版功能,实现所有幻灯片标题的一致性设置。同时,提供了其他办公软件和编程相关的实用技巧。 ... [详细]
  • MySQL 5.7 绿色版安装及 my.ini 配置详解
    本文主要针对最近因系统重装导致的MySQL配置问题,详细介绍了MySQL 5.7.24绿色解压版的安装步骤及my.ini配置文件的关键设置,帮助用户顺利完成数据库的安装与配置。 ... [详细]
  • 本文介绍如何利用JavaScript在页面加载时为ASP.NET的DropDownList控件设置特定的选项值。 ... [详细]
  • MyBatis入门指南
    本文详细介绍了MyBatis的基础知识,包括如何整合日志框架(如log4j和logback),使用外部JDBC文件,getMapper()方法的应用,以及别名设置等技巧。 ... [详细]
  • 在使用 SQL 语句从数据库中提取数据并尝试将其转换为其他数据类型时,可能会遇到 'java.math.BigDecimal cannot be cast to java.lang.Integer' 错误。本文将详细解释这一错误的原因,并提供有效的解决方案。 ... [详细]
  • 本文探讨了如何利用脚本文件高效管理Oracle数据库,包括脚本文件的创建、编辑及运行方法,旨在为数据库管理人员提供实用指导。 ... [详细]
author-avatar
文文的爱天使_152
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有