oracle中表的锁定

锁的概念

锁出现在数据共享的场合,用来保证数据的一致性。当多个会话同时修改一个表时,需要对数据进行相应的锁定。

锁有“只读锁”、“排它锁”,“共享排它锁”等多种类型,而且每种类型又有“行级锁”(一次锁住一条记录),“页级锁”(一次锁住一页,即数据库中存储记录的最小可分配单元),“表级锁”(锁住整个表)。

若为“行级排它锁”,则除被锁住的行外,该表中其他行均可被其他的用户进行修改(Update)或删除(delete)。若为“表级排它锁”,则所有其他用户只能对该表进行查询(select)操作,而无法对其中的任何记录进行修改或删除。当程序对所做的修改进行提交(commit)或回滚(rollback)后,锁住的资源便会得到释放,从而允许其他用户进行操作。

如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁。

隐式锁和显式锁

在Oracle数据库中,修改数据操作时需要一个隐式的独占锁,以锁定修改的行,直到修改被提交或撤销为止。如果一个会话锁定了数据,那么第二个会话要想对数据进行修改,只能等到第一个会话对修改使用COMMIT命令进行提交或使用ROLLBACK命令进行回滚撤销后,才开始执行。因此应养成一个良好的习惯:执行修改操作后,要尽早地提交或撤销,以免影响其他会话对数据的修改。

 对emp表的SCOTT雇员记录进行修改,测试隐式锁。
	步骤1:启动第一个SQL*Plus,以SCOTT账户登录数据库(第一个会话),修改SCOTT记录,隐式加锁。
		UPDATE emp SET sal=3500 where empno=7788;
		步骤2:启动第二个SQL*Plus,以SCOTT账户登录数据库(第二个会话),进行记录修改操作。
		UPDATE emp SET sal=4000 where empno=7788;
步骤3:对第一个会话进行解锁操作:
		COMMIT;
		步骤4:查看第二个会话,此时有输出结果:

		步骤5:提交第二个会话,防止长时间锁定。

表的显式锁定

锁定行

对emp表的部门10的雇员记录加显式锁,并测试。

对部门10加显式锁:
		SELECT empno,ename,job,sal FROM emp WHERE deptno=10 FOR UPDATE;

步骤1:对部门10加显式锁:
		SELECT empno,ename,job,sal FROM emp WHERE deptno=10 FOR UPDATE;

步骤2:启动第二个SQL*Plus(第二个会话),以SCOTT账户登录数据库,对部门10的雇员CLARK进行修改操作。
		UPDATE emp SET sal=sal+100 where empno=7782;

		步骤3:在第一个会话进行解锁操作:
		COMMIT;
		步骤4:查看第二个会话,有输出结果:

锁定表

LOCK语句用于对整张表进行锁定。

对表的锁定可以是共享(SHARE)或独占(EXCLUSIVE)模式。共享模式下,其他会话可以加共享锁,但不能加独占锁。在独占模式下,其他会话不能加共享或独占锁。

【训练1】  对emp表添加独占锁。

步骤1:对emp表加独占锁:

LOCK TABLE emp IN EXCLUSIVE MODE;

步骤2:对表进行解锁操作:

COMMIT;

时间: 2024-11-05 06:15:01

oracle中表的锁定的相关文章

Oracle EBS-SQL (SYS-10):锁定表查询.sql

/*死锁查询-1*/ SELECT o.object_name, l.session_id,l.process, l.locked_mode FROM v$locked_object l , dba_objects o WHERE o.object_id=l.object_id ------------------------------------------------ /*死锁查询-2*/ select GL.SESSION_ID,         do.object_name,     

Oracle 账户被锁定

哎 每次安装oracle的时候总是忘了将用户解锁,结果就蛋疼了,从网上找到一个简单的解决方案 在CMD命令输出如下: sqlplus /nolog alert user system account unlock 之后用sqlplus命令登陆 账号 system 密码是在安装时候设定的全局密码 Oracle 账户被锁定

oracle用户被锁定

sqlplus sys/[email protected]:1521/cmsx as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期一 7月 21 13:33:13 2014 Copyright (c) 1982, 2010, Oracle.  All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production W

查看oracle中表的索引

查看oracle中表的索引 oracle中表的索引信息存在 user_indexes 和 user_ind_columns 两张表里面,其中 user_indexes 系统视图存放是索引的名称以及该索引是否是唯一索引等信息, user_ind_columns 统视图存放的是索引名称,对应的表和列等 sql示例: select* from all_indexes where table_name='ACM_NETWORK_OPERATION'; select * from user_ind_col

Oracle用户自动锁定

oracle11g数据库安全加固须谨慎 数据库安全配置中,需要做相关的安全加固工作.以确认数据库的安全,但是,有些时候,操作不当或者数据库业务账号修改密码后,而程序的连接数据库的配置封装在jar里,如果jar内的连接数据库的配置信息没有做相应的修改的话.就会对数据库的此业务账号造成严重的后果. 因此,真正了解Oracle安全数据库用户的状态,就显得尤为重要了.下面我们就看一下oracle数据库中的多种用户状态. ORACLE数据库用户有多种状态,可查看视图USER_ASTATUS_MAP. 1 

oracle 用户被锁定解锁方法

修改了用户密码,第二天过来发现用户被锁定,晚上走的时候还好好的 . alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED; alter user xxxx account unlock; ok! --1.--系统参数配置 connect sys/[email protected]_link as sysdba select * from dba_profiles where resource_name like 'FAILED_L

Oracle查看表锁定及解锁

在对Oracle数据库的Update或者Insert等操作没有反应时,很有可能是因为被操作的表被锁定,导致无法进行操作.这个时候需要解锁. 首先查看具体有哪些表被锁定 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid; 查询结果如下: 然

Oracle中表列由VARCHAR2类型改成CLOB

情景 原来表中的列定义成VARCHAR2类型,众所周知,VARCHAR2类型最大支持长度为4000.假设因为业务须要.想把此列转换为CLOB类型,在Oracle中直接通过ALTER语句转换是行不通的.以下依据详细事例解说在Oracle数据库中怎样把表列由VARCHAR2类型转换为CLOB类型. 演示样例准备 1. 新建两张张表TB_WITHOUT_DATA(此VARCHAR2列不包括数据)和TB_WITH_DATA(此Varchar2列包括数据) create table TB_WITHOUT_

Oracle用户被锁定解决方法

1.用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. 2.查看具体的被锁时间 SQL> select username,lock_date from dba_users where username='TEST'; USERNAME LOCK_DATE TEST 2009-03-10 08:51:03 3.解锁