AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 418777
Accepted
aseq
aseq
Asked: 2012-08-18 12:48:42 +0800 CST2012-08-18 12:48:42 +0800 CST 2012-08-18 12:48:42 +0800 CST

为什么添加数据文件会导致 Oracle 中出现死锁?

  • 772

我在 Oracle 中注意到一些以前从未发生过的事情。虽然我现在经常做这种事很多年了。在这种情况下,它是一个 Oracle11 实例(Oracle 数据库 11g 企业版版本 11.2.0.1.0 - 准确地说是在 Linux 上运行的 64 位)。

我正在导入一个转储文件,同时我正在使用如下语句增加表空间:

alter tablespace example add datafile '/path/to/oradata/instance/exampleXX.dbf' size 31000m;

运行上述语句时有时会出现以下错误:

ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource

我可以重新启动 alter tablespace 语句,它在第二次尝试时通常会正常运行。

我问为什么会这样,因为这对我来说很不寻常。它是否表示错误或阻碍文件系统故障?我知道同时运行导入和将数据文件添加到表空间可能对服务器有很多要求,但这是服务器有 4 个 CPU、64 GB 和几 TB 的 SAS raid10 可供使用。

顺便说一句,这不是生产系统。

相关跟踪文件输出:

Deadlock graph:                                                                                                                                                   
                       ---------Blocker(s)--------  ---------Waiter(s)---------                                                                                   
Resource Name          process session holds waits  process session holds waits                                                                                   
TT-00000006-00000010        36      11          SX       38     142           S                                                                                   
TT-00000006-00000010        38     142     S             36      11          SX                                                                                   

session 11: DID 0001-0024-0000005D      session 142: DID 0001-0026-00000068                                                                                       
session 142: DID 0001-0026-00000068     session 11: DID 0001-0024-0000005D                                                                                        

Rows waited on:                                                                                                                                                   
  Session 11: no row                                                                                                                                              
  Session 142: no row                           

----- Information for the OTHER waiting sessions -----                                                                                                            
Session 142:                                                                                                                                                      
  sid: 142 ser: 30639 audsid: 0 user: 5/SYSTEM flags: 0x8000051                                                                                                   
  pid: 38 O/S info: user: example_user, term: UNKNOWN, ospid: 14589                                                                                                   
    image: example@example (DW00)                                                                                                                                     
  current SQL:                                                                                                                                                    
  CREATE TABLE EXAMPLE ...

----- Error Stack Dump -----                                                                                                                                      
ORA-00060: deadlock detected while waiting for resource                                                                                                           
----- Current SQL Statement for this session (sql_id=6bvzdgdn8vqqt8) -----                                                                                         
alter tablespace ...

堆栈跟踪和内存转储可以提供更多信息,但我不是解决这些问题的专家。我所追求的是它可能是什么的想法,之前发生过这种情况的人可以做出有根据的猜测。如果它是一个错误,则表明文件系统可能有问题,或者 raid 控制器无法处理负载。为什么两条语句都在等待资源,为什么这个资源不可用。

linux
  • 4 4 个回答
  • 2093 Views

4 个回答

  • Voted
  1. bahamat
    2012-08-18T16:17:51+08:002012-08-18T16:17:51+08:00

    根据这个网站(我通过一个非常简单的网络搜索找到的),这是因为你的会话与另一个冲突:

    ORA-00060 错误表示由于与另一个会话的资源争用而发生死锁,Oracle 回滚了您当前的语句以解决死锁。另一届会议可以照常进行。在所需资源可用后,需要重新提交当前会话回滚的语句以执行。

    阅读该文章的更多内容,了解有关死锁的更多信息。

    • 2
  2. Best Answer
    khoxsey
    2012-08-21T11:22:53+08:002012-08-21T11:22:53+08:00

    查看争用中的实际资源可能会有所帮助,但我猜测这两个操作都试图触及表空间元数据,因此将彼此锁定。一个很好的测试是重新安排你的任务,这样alter tablespace命令就不会有这么大的耗尽(创建数据文件):

    imp dumpfile control=blahblah.ctl
    create datafile ....
    alter tablespace add datafile...
    

    但是,在运行 11g 并具有您描述的资源的机器上,我建议您查看使用 ASM 而不是手动管理文件。ASM 使 DBA 的生活变得如此轻松(好吧,无论如何我的)。

    • 2
  3. Alex Perez
    2016-12-24T06:42:12+08:002016-12-24T06:42:12+08:00

    好吧,这是一篇非常古老的帖子,但我在尝试用我的 Oracle 12c 服务器解决同样的问题时访问了该页面。最后是因为我达到了控制文件中配置的 200 个数据文件的默认限制:

    SQL> select max(FILE_ID) from DBA_DATA_FILES;
    MAX(FILE_ID)
    ------------
             200
    

    我必须增加该值,然后我可以创建一个新表空间或将数据文件添加到现有表空间:

    alter system set db_files = 2000 scope = spfile;
    dbshut / dbstart
    
    • 2
  4. Oracle DBA
    2018-03-14T22:16:21+08:002018-03-14T22:16:21+08:00

    当两个会话通过尝试更新一行而互相阻塞时,就会发生死锁,该行已被另一个会话更新但尚未提交或回滚。可能涉及 2 个以上的会话,但主要思想是相同的。

    http://dbpilot.net/2018/01/15/ora-00060-deadlock-detected-while-waiting-for-resource/

    ...

    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve