问题描述
嗨 “汤姆”-
我们有一个外部供应商的产品进入我们的数据库,从不使用绑定变量。每句话都是独一无二的。我们不能改变它,我们被它困住了。
这个外部程序的音量很高。这些不断独特的语句实际上是将非常好的但较少使用的缓存查询从sqlarea中推出。我们每月只运行一次的报告永远不会有机会被重用,如果这些报告使用共享池,它们的运行速度会快得多。我们在sqlarea中没有两周内没有使用过的东西,到下个月末,缓存消失了。共享池是20480 MB,如果这很重要的话。我不知道那是大还是小。
这些EDI合并语句非常容易识别,所以我想我们为什么不在它们推出我们想要保留的东西之前清除其中的一些呢?看来你可以通过地址/has_value选择性地清除。
我以为编写一个小的维护程序来每晚运行,并使用DBMS_SHARED_POOL.PURGE摆脱这些缓存的查询可以解决问题。DBA说我疯了,很危险。你有更好的主意吗?把游泳池变大?锁定被推出的查询?我不是固定的粉丝,因为我们不需要的东西在SQLAREA中比我们可能需要的东西更明显。它也是一个较短的列表,sql_text的前半部分始终相同。
-约翰
我们有一个外部供应商的产品进入我们的数据库,从不使用绑定变量。每句话都是独一无二的。我们不能改变它,我们被它困住了。
这个外部程序的音量很高。这些不断独特的语句实际上是将非常好的但较少使用的缓存查询从sqlarea中推出。我们每月只运行一次的报告永远不会有机会被重用,如果这些报告使用共享池,它们的运行速度会快得多。我们在sqlarea中没有两周内没有使用过的东西,到下个月末,缓存消失了。共享池是20480 MB,如果这很重要的话。我不知道那是大还是小。
这些EDI合并语句非常容易识别,所以我想我们为什么不在它们推出我们想要保留的东西之前清除其中的一些呢?看来你可以通过地址/has_value选择性地清除。
我以为编写一个小的维护程序来每晚运行,并使用DBMS_SHARED_POOL.PURGE摆脱这些缓存的查询可以解决问题。DBA说我疯了,很危险。你有更好的主意吗?把游泳池变大?锁定被推出的查询?我不是固定的粉丝,因为我们不需要的东西在SQLAREA中比我们可能需要的东西更明显。它也是一个较短的列表,sql_text的前半部分始终相同。
-约翰
专家解答
这并不理想,但是您是否研究过为供应商的应用程序设置cursor_sharing = force?
你可以在登录触发器中设置这个。这样,数据库的其余部分可以继续使用cursor_sharing = exact,并在必要时从文字中受益。
大概有了所有这些独特的语句,应用程序根本没有使用绑定变量。这意味着它几乎肯定会暴露于SQL注入。
您是否尝试过告知供应商其应用程序中的巨大安全漏洞?
在尝试编写不断从库缓存中清除查询的内容之前,我会研究这些选项。
你可以在登录触发器中设置这个。这样,数据库的其余部分可以继续使用cursor_sharing = exact,并在必要时从文字中受益。
大概有了所有这些独特的语句,应用程序根本没有使用绑定变量。这意味着它几乎肯定会暴露于SQL注入。
您是否尝试过告知供应商其应用程序中的巨大安全漏洞?
在尝试编写不断从库缓存中清除查询的内容之前,我会研究这些选项。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




