`
xwood
  • 浏览: 102963 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ORA数据库解锁

阅读更多
一.查询锁基本信息:
select a.object_name, --被锁的资源
       dd.*
from (
  select a.sid,
         'Wait' "Status", --/*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */  LOCK表明该进程锁住了某个资源,WAIT表示该进程正在等待某个资源
         a.username, --ORACLE用户名
         a.machine, --ORACLE机器
         a.serial#, 
         a.last_call_et "Time", --表示该进程最后一次进行操作至当前的时间(秒)
         a.program, --产生死锁的语句主要来自哪个应用程序
         a.command,
         a.lockwait, --死锁的状态,如果有内容表示被死锁
         b.id1, --锁标识。某个LOCK状态的ID1与某个WAIT状态的ID1相同,可说明锁的正是另一个进程等待的。
         c.sql_text "SQL" -- 锁住资源的SQL语句
  from v$session a, v$lock b, v$sqltext c
  where a.username is not null
        and a.lockwait = b.kaddr
        and c.hash_value =a.sql_hash_value
  union
  select a.sid,
         'Lock' "Status", --/*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 
         a.username, 
         a.machine, 
         a.serial#, 
         a.last_call_et "Time", 
         a.program,
         a.command,
         a.lockwait,
         b.id1, 
         c.sql_text "SQL"
  from v$session a, v$lock b, v$sqltext c
  where b.id1 in
        (
          select distinct e.id1 -- /*+ NO_MERGE(d) NO_MERGE(e) */
          from v$session d, v$lock e
          where d.lockwait = e.kaddr
        )
        and a.username is not null
        and a.sid = b.sid
        and b.request=0
        and c.hash_value =a.sql_hash_value
) dd 
left join v$locked_object o on dd.sid = o.session_id
left join all_objects a on o.object_id = a.object_id 

注:NO_MERGE()保证视图的查询不被拆散。这是防止CBO在设计执行方案时将Oracle优化过的视图拆分。以保证执行效率。
二.解锁:
alter system kill session 'sid,serial#';


三.原因分析

1.由于外键原因导致的表级锁
    当在一个session中对从表进行update,insert或delete操作时,oracle会默认对从表数据施加行级锁,而与此同时,如果在另一个session中对主表进行delete操作,oracle便会寻找所有以主表ID为FK的从表,然后看该从表是否有该外键的索引。如果有,则访问索引,如果没有,则对从表施加表级锁,然后对全表进行扫描。
    解决办法:为从表的外键建立索引,这也是在使用外键时的推荐方式。
分享到:
评论

相关推荐

    ORA错误中文描述(包括所有)

    ### ORA错误中文描述知识点详解 #### ORA-00001: 违反唯一约束条件 ...以上是对部分ORA错误的详细介绍,这些错误覆盖了数据库管理中常见的一些问题,理解这些错误可以帮助DBA更快地定位问题并采取适当的措施进行修复。

    ORA-00060: 等待资源时检测到死锁--oracle 数据库表死锁异常

    在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...

    oracle 连接数据库命令

    ### Oracle 连接数据库命令详解 #### 一、SQL*Plus简介 ...通过以上的介绍和示例,读者应该能够理解如何有效地使用SQL*Plus来管理Oracle数据库,包括连接数据库、解锁账户、授权以及启动和关闭数据库等常见操作。

    泛微OA数据库相关问题处理

    解决这个问题可以使用LISTENER.ORA文件,例如: ```bash LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)) ) ``` 这个文件可以配置监听器,解决连接问题。 15. SQL...

    ORA-28001 the password has expired密码过期.docx

    在Oracle数据库管理中,"ORA-28001 the password has expired" 是一个常见的错误,它表明数据库用户的密码已经超过了预设的有效期限,导致用户无法正常登录。这个错误主要出现在Oracle 11G及更高版本中,因为这些...

    连接oracle数据库的cmd命令

    其中,`orcl_server`是在`tnsnames.ora`文件中定义的服务名或TNS别名。 #### 2.2 使用`as sysdba`模式连接 有时,为了执行某些需要系统管理员权限的操作,需要以`sysdba`模式连接。这通常用于恢复、备份或执行其他...

    oracle用户解锁三种方法

    当用户尝试登录并收到"ORA-28000: the account is locked"错误时,有几种方法可以解锁Oracle用户账户。下面将详细介绍这三种解锁方法。 **第一种方法:使用PL/SQL Developer** 1. 以`system`用户身份登录PL/SQL ...

    数据库通用操作命令

    ### 数据库通用操作命令 #### 一、WINDOWS环境下创建BSS生产库和生产账号 ##### 创建表空间 在创建表空间之前,确保已经通过正确的身份验证登录到了Oracle数据库。这通常涉及使用`sqlplus`工具并指定以`sysdba`...

    ORA-01940:无法删除当前已连接的用户

    在Oracle数据库管理中,"ORA-01940:无法删除当前已连接的用户"是一个常见的错误,它表示尝试删除的用户当前正处于活动状态,即至少有一个会话(session)与该用户关联。要成功删除用户,必须先断开所有相关会话。...

    数据库问题及解决方法

    在日常操作中,数据库用户可能会遇到各种问题,其中“ORA-00054: resource busy and acquire with nowait specified”是一个常见的错误,它通常出现在并发操作环境下,比如当一个事务正在处理数据而其他事务尝试立即...

    oracle数据库安装详解+配置+PL/SQL安装配置

    - **tnsnames.ora配置**:在文件中添加数据库连接描述,例如: ``` ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_...

    数据库sql语句

    9. **系统进程和启动**:在Linux环境中,可以使用`ps -ef | grep ora_`检查Oracle数据库的相关进程,`ipcs -sm`查看共享内存状态。系统重启后,可以通过`sqlplus /nolog`和`conn / as sysdba`启动数据库,然后执行`...

    oracle用户解锁三种方法.doc

    如果你收到"ORA-28000: the account is locked"的错误信息,可以按照以下步骤操作: 1. 使用具有DBA权限的用户(如`system`)登录PL/SQL Developer,选择连接类型为"Sysdba"。 2. 在对象浏览器中查看"Users",找到...

    ORACLE数据库设计(SQL&PLSQL)

    监听器配置在`listener.ora`文件中,包括定义服务名、指定数据库实例以及设置端口号等。 - **配置网络服务名**:通过`tnsnames.ora`文件,我们可以定义网络服务名,方便用户以服务名而非IP地址和端口号来连接数据库...

    oracle常见错误号

    20. ORA-27072:磁盘空间不足 - 数据库运行时磁盘空间不足。清理磁盘空间,或扩展数据库文件系统。 了解并解决这些错误是管理Oracle数据库的关键。在遇到问题时,首先确定错误号,然后查阅相关文档或使用工具如`DBA...

    Oracle 解锁与锁定用户

    Oracle 数据库管理系统是全球广泛使用的数据库系统之一,它提供了丰富的安全管理功能,包括用户账户的锁定和解锁机制。本文将深入探讨如何在 Oracle 中解锁和锁定用户,以及涉及到的相关安全性问题。 首先,当一个 ...

    oracle用户解锁

    在 PL/SQL Developer 中,如果使用 scott/tiger 登录时提示 ora-28000 the account is locked,可以使用以下方法来解锁。首先,以 sysdba 身份登录 conn sys/sys as sysdba; 然后,alter user scott account unlock;...

    Oracle数据库管理员笔试题

    3. **启动文件顺序**:Oracle启动时,通常访问的文件包括初始化参数文件(init.ora或spfile.ora)、控制文件、数据文件、重做日志文件。 4. **startup命令选项**:如`startup nomount`(不加载表空间启动)、`...

    oracle11g用户登录时被锁定问题的解决方法 (ora-28000 the account is locked)

    1 错误出现的现象是ora-28000 the account is locked,既用户无法登录。 2 原因:出现这种错误的原因为由于用户多次登录,无法登陆成功,超过了数据库允许登录的次数,所以导致用户被锁定,这种机制也是对数据库的一...

Global site tag (gtag.js) - Google Analytics