一.查询锁基本信息:
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-00001: 违反唯一约束条件 ...以上是对部分ORA错误的详细介绍,这些错误覆盖了数据库管理中常见的一些问题,理解这些错误可以帮助DBA更快地定位问题并采取适当的措施进行修复。
在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...
### Oracle 连接数据库命令详解 #### 一、SQL*Plus简介 ...通过以上的介绍和示例,读者应该能够理解如何有效地使用SQL*Plus来管理Oracle数据库,包括连接数据库、解锁账户、授权以及启动和关闭数据库等常见操作。
解决这个问题可以使用LISTENER.ORA文件,例如: ```bash LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)) ) ``` 这个文件可以配置监听器,解决连接问题。 15. SQL...
在Oracle数据库管理中,"ORA-28001 the password has expired" 是一个常见的错误,它表明数据库用户的密码已经超过了预设的有效期限,导致用户无法正常登录。这个错误主要出现在Oracle 11G及更高版本中,因为这些...
其中,`orcl_server`是在`tnsnames.ora`文件中定义的服务名或TNS别名。 #### 2.2 使用`as sysdba`模式连接 有时,为了执行某些需要系统管理员权限的操作,需要以`sysdba`模式连接。这通常用于恢复、备份或执行其他...
当用户尝试登录并收到"ORA-28000: the account is locked"错误时,有几种方法可以解锁Oracle用户账户。下面将详细介绍这三种解锁方法。 **第一种方法:使用PL/SQL Developer** 1. 以`system`用户身份登录PL/SQL ...
### 数据库通用操作命令 #### 一、WINDOWS环境下创建BSS生产库和生产账号 ##### 创建表空间 在创建表空间之前,确保已经通过正确的身份验证登录到了Oracle数据库。这通常涉及使用`sqlplus`工具并指定以`sysdba`...
在Oracle数据库管理中,"ORA-01940:无法删除当前已连接的用户"是一个常见的错误,它表示尝试删除的用户当前正处于活动状态,即至少有一个会话(session)与该用户关联。要成功删除用户,必须先断开所有相关会话。...
在日常操作中,数据库用户可能会遇到各种问题,其中“ORA-00054: resource busy and acquire with nowait specified”是一个常见的错误,它通常出现在并发操作环境下,比如当一个事务正在处理数据而其他事务尝试立即...
- **tnsnames.ora配置**:在文件中添加数据库连接描述,例如: ``` ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_...
9. **系统进程和启动**:在Linux环境中,可以使用`ps -ef | grep ora_`检查Oracle数据库的相关进程,`ipcs -sm`查看共享内存状态。系统重启后,可以通过`sqlplus /nolog`和`conn / as sysdba`启动数据库,然后执行`...
如果你收到"ORA-28000: the account is locked"的错误信息,可以按照以下步骤操作: 1. 使用具有DBA权限的用户(如`system`)登录PL/SQL Developer,选择连接类型为"Sysdba"。 2. 在对象浏览器中查看"Users",找到...
监听器配置在`listener.ora`文件中,包括定义服务名、指定数据库实例以及设置端口号等。 - **配置网络服务名**:通过`tnsnames.ora`文件,我们可以定义网络服务名,方便用户以服务名而非IP地址和端口号来连接数据库...
20. ORA-27072:磁盘空间不足 - 数据库运行时磁盘空间不足。清理磁盘空间,或扩展数据库文件系统。 了解并解决这些错误是管理Oracle数据库的关键。在遇到问题时,首先确定错误号,然后查阅相关文档或使用工具如`DBA...
Oracle 数据库管理系统是全球广泛使用的数据库系统之一,它提供了丰富的安全管理功能,包括用户账户的锁定和解锁机制。本文将深入探讨如何在 Oracle 中解锁和锁定用户,以及涉及到的相关安全性问题。 首先,当一个 ...
在 PL/SQL Developer 中,如果使用 scott/tiger 登录时提示 ora-28000 the account is locked,可以使用以下方法来解锁。首先,以 sysdba 身份登录 conn sys/sys as sysdba; 然后,alter user scott account unlock;...
3. **启动文件顺序**:Oracle启动时,通常访问的文件包括初始化参数文件(init.ora或spfile.ora)、控制文件、数据文件、重做日志文件。 4. **startup命令选项**:如`startup nomount`(不加载表空间启动)、`...
1 错误出现的现象是ora-28000 the account is locked,既用户无法登录。 2 原因:出现这种错误的原因为由于用户多次登录,无法登陆成功,超过了数据库允许登录的次数,所以导致用户被锁定,这种机制也是对数据库的一...