首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle DB正在被锁定

Oracle DB正在被锁定
EN

Stack Overflow用户
提问于 2018-02-13 03:09:23
回答 1查看 337关注 0票数 0

最近,我开始在我的Oracle DB (UAT环境)中发现这种奇怪的行为,您的反馈非常感谢。

最近,当我尝试重新编译我的包时,编译失败了,从那时起,DB进入了“锁定状态”--我认为任何需要访问这个包函数/过程的查询都不会运行到完成。

我的DBA是说,当有一个开放会话试图访问它时,我试图编译它。它首先删除了现有的包,然后无法重新创建新的包,所以整个包都丢失了,因此DB被毁了。

我不太明白这一点。“公开会议”能引起这样的问题吗?

可以从以下来源访问my:

代码语言:javascript
复制
 a) .NET web application (Read/Write access)
 b) Tableau server (Read Only access)
 c) Developers on SQLDbx and PLSQLDeveloper (some with R/W and some with R/O access)
 d) Tableau Desktop dashboard tool (R/O access)

最近发生的唯一变化是在上面( c)中,我们增加了一些具有R/O访问权限的开发人员。我不确定他们或上面任何其他人如何能够留下一个“公开会议”,从而导致这种情况。

EN

回答 1

Stack Overflow用户

发布于 2018-02-13 04:53:18

在这里,“公开会话”可能不是正确的术语。您很可能遇到了一个块,我们称之为“库缓存引脚”。当您试图编译的PL/SQL对象处于活动调用中时,就会发生这种情况。如果您的PL/SQL程序运行数分钟(小时?)几天?)一次,很明显你在这里会有危险。

例如,在第一次会议上,我会:

代码语言:javascript
复制
SQL> create or replace
  2  procedure long_running is
  3  begin
  4    dbms_lock.sleep(20);
  5  end;
  6  /

Procedure created.

SQL>
SQL> exec long_running
[takes 20 seconds obviously]

在另一个会话中,我尝试修改proc。

代码语言:javascript
复制
SQL> create or replace
  2  procedure long_running is
  3  begin
  4    dbms_output.put_line('blah blah blah');
  5  end;
  6  /

blocks....If,我会看到会话的细节

代码语言:javascript
复制
SQL> select event, seconds_in_wait
  2  from v$Session
  3  where status = 'ACTIVE'
  4  and username = 'SCOTT'
  5  /

EVENT                                                            SECONDS_IN_WAIT
---------------------------------------------------------------- ---------------
PL/SQL lock timer                                                             16
library cache pin                                                             12

我看到正在运行的一个,会话被卡在库缓存引脚上。

但是,如果您只是wait...eventually,那么一旦其他执行完成,您就能够编译。

显然,如果您有为hours...then运行的例程,您应该有一种方法能够优雅地阻止它们。

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

https://stackoverflow.com/questions/48758831

复制
相关文章

相似问题

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