oracle如何实现缓存 oracle结果集缓存

如何有效实现依赖Oracle的缓存策略

ASP.NET 中的缓存提供了对SQL依赖项的支持,也就是说当SQL SERVER数据库中的表或行中的数据被更改后,缓存中的页面就失效,否则,页面输出可一直保留在缓存当中。这确实为程序员提供了方便。但微软一向很小家子气,只为使用自家产品SQL SERVER的程序员提供了方便,那些用Oracle数据库的ASP.NET程序员怎么办呢?

10年积累的网站设计制作、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计制作后付款的网站建设流程,更有凤庆免费网站建设让你可以放心的选择与我们合作。

其实不用着急,因为ASP.NET中的缓存还提供了对文件依赖项的支持,也就是缓存依赖于某个文件,该文件被修改后,缓存中的页面就失效。只要巧妙利用ASP.NET的文件依赖项缓存策略和Oracle中的触发器,就可轻松实现依赖Oracle的缓存策略。思路很简单,先将页面的缓存策略设置为依赖某一个文件,再为Oracle中需要依赖的表添加一个触发器,当表中的数据被更改时,修改缓存所依赖的文件中的内容。

下面以一个小例子来具体说明:

试验目的:Default.aspx页面的缓存依赖于Oracle数据库中SCOTT用户的DEPT表,该表中数据被更改后,缓存中的页面失效。缓存的过期时间为120秒。

一、设置网站页面的缓存依赖于文件TextFile.txt详见System.Web.Caching.Cache类 Asp.NET缓存 各种缓存依赖二、在Oracle数据库中创建触发器

1、触发器被触发时执行PL/SQL代码块。PL/SQL代码块直接读写操作系统中的文件,需调用内置的utl_file程序包。这需要先修改Oracle的初始化参数文件INIT.ORA,在其中添加参数utl_file_dir,来指定文件的目录。修改INIT.ORA文件后,需重启Oracle数据库,设置的参数才能生效。

在INIT.ORA文件中添加下面一行内容:

utl_file_dir='E:/CSharp/CacheByOracleDependncy'

也可以设置为utl_file_dir=*,不指定具体目录,即任何目录都可以。

如果是Oracle 9i数据库,还有一种方法也能起到同样的作用:在sys用户下创建一个directory目录(实际上是在sys用户下的dir$表中增加一个对应的OS_PATH),然后将对该directory对象的读/写操作的权限grant给public。

[sql] view plain copy

create or replace directory FILEPATH as 'E:/CSharp/CacheByOracleDependncy';grant read on directory FILEPATH to public;这里我使用的是第二种方法。

2、为所依赖的表(SCOTT用户的DEPT表)创建一个触发器:当DEPT表中的数据更改后,触发器就会将当前系统时间写入TextFile.txt文件中。

[sql] view plain copy

CREATE OR REPLACE TRIGGER

"SCOTT"."TEST_CACHE_BY_ORACLE_DEPENDNCY" AFTERINSERT

OR UPDATE

OR DELETE OF "DEPTNO", "DNAME", "LOC" ON "SCOTT"."DEPT" DECLAREfile_handle utl_file.file_type;

BEGIN

--打开文件

file_handle := utl_file.fopen('FILEPATH','TextFile.txt','w');--将当前系统时间写入文件

IF utl_file.is_open(file_handle) THEN

utl_file.put_line(file_handle,to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'));END IF;

--关闭文件

utl_file.fclose(file_handle);

EXCEPTION

WHEN OTHERS THEN

BEGIN

IF utl_file.is_open(file_handle) THEN

utl_file.fclose(file_handle);

END IF;

EXCEPTION

WHEN OTHERS THEN

NULL;

END;

END;

如果应用服务器和数据库服务器不是同一台服务器可能会遇到项目无法成功访问文件进行依赖的情况:

解决方法详见ASP.Net访问网络驱动器(映射磁盘)

oracle如何做强制缓存?

-- 加入缓存.

SQL ALTER TABLE a CACHE;

Table altered.

-- 取消加入缓存.

SQL ALTER TABLE a NOCACHE;

Table altered.

如何将oracle数据缓存到redis中

1、同一个Master可以拥有多个Slaves。

2、Master下的Slave还可以接受同一架构中其它slave的链接与同步请求,实现数据的级联复制,即Master-Slave-Slave模式;

3、Master以非阻塞的方式同步数据至slave,这将意味着Master会继续处理一个或多个slave的读写请求;

4、Slave端同步数据也可以修改为非阻塞是的方式,当slave在执行新的同步时,它仍可以用旧的数据信息来提供查询;否则,当slave与master失去联系时,slave会返回一个错误给客户端;

5、主从复制具有可扩展性,即多个slave专门提供只读查询与数据的冗余,Master端专门提供写操作;

6、通过配置禁用Master数据持久化机制,将其数据持久化操作交给Slaves完成,避免在Master中要有独立的进程来完成此操作。

Oracle 11.2.0.4应用缓存之三(缓存配置-预加载只读缓存组)

4.在oracle 端做测试数据验证

7.1 测试Load (不符合3条件时的报错信息)


网页标题:oracle如何实现缓存 oracle结果集缓存
地址分享:http://hbruida.cn/article/hehohs.html