首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle: CURSOR_SHARING参数的作用域

Oracle: CURSOR_SHARING参数的作用域
EN

Database Administration用户
提问于 2020-07-02 12:14:39
回答 2查看 412关注 0票数 0

在Oracle数据库(12.2及以上版本)中,是否可以针对不同的模式、表或视图以不同的方式配置CURSOR_SHARING参数,还是该参数总是全局的?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-07-03 02:13:12

Oracle建议不要使用cursor_sharing=force作为锁存争用的永久解决方案。有关详细信息,请参阅本文中的文档:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/improving-rwp-cursor-sharing.html#GUID-7FF4E133-06A7-401E-9BFC-3B0B9C902346 --这样做对安全性和性能都有影响。

尽管如此,在一些情况下,您正在处理第三方应用程序(即您无法更改源代码),并且生成了许多几乎重复的SQL,并且它正在引发锁存争用等问题。在这种情况下,建议使用特定用户的登录触发器在会话级别设置cursor_sharing=force,比如为用户“pmdba”设置这样的触发器:

代码语言:javascript
复制
CREATE OR REPLACE TRIGGER PMDBA_LOGON_TRG 
AFTER LOGON ON PMDBA.SCHEMA 
BEGIN
  execute immediate 'alter session set cursor_sharing=force';
END;
/

如果cursor_sharing碰巧以任何方式设置为“强制”,您可以使用提示逐条语句关闭它,如下所示:

代码语言:javascript
复制
SELECT /*+ CURSOR_SHARING_EXACT */ hostname FROM servers WHERE srvr_id = 3;

当会话或系统级别设置“精确”时,没有语句级提示可以将cursor_sharing打开为“强制”,也无法使cursor_sharing成为对象级属性。

有关更多信息,请参见此博客文章:

票数 1
EN

Database Administration用户

发布于 2020-07-02 13:25:04

可以在架构上创建登录触发器,并使用

代码语言:javascript
复制
execute immediate 'alter session set CURSOR_SHARING=...';

将其设置在会话级别

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/270253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档