Oracle锁表(网上转帖)

Oracle锁表(网上抄来的)

锁定类型
               行级锁
               表级锁
行级锁
         ---- 行被排他锁定
         ----在某行的锁被释放之前,其他用户不能修改此行
         ----使用 commit 或 rollback 命令释放锁
         ----Oracle 通过使用 INSERT、UPDATE 和 SELECT…FOR UPDATE 语句自动获取行级锁
SELECT…FOR UPDATE 子句
―在表的一行或多行上放置排他锁
―用于防止其他用户更新该行
―可以执行除更新之外的其他操作
―select * from goods where gid=1001
―for update of gname;
―只有该用户提交事务,其他用户才能够更新gname

FOR UPDATE WAIT 子句
―Oracle9i 中的新增功能
―防止无限期地等待锁定的行
―等待间隔必须指定为数值文字
―等待间隔不能是表达式、赋值变量或 PL/SQL
变量
―select * from goods where gid=1001 for update of gname wait 3
―等待用户释放更新锁的时间为3秒,否则超时。
表级锁
―保护表的数据
―在多个用户同时访问数据时确保数据的完整性
―可以设置为三种模式:共享、共享更新和 排他
          语法:lock table<table_name>in<mode>;
共享锁
―锁定表
―仅允许其他用户执行查询操作
―不能插入、更新和删除
―多个用户可以同时在同一表中放置此锁
―lock table table_name
―in share mode [nowait];
― rollback 和commit 命令释放锁
― nowait 关键字告诉其他用户不用等待
共享更新锁
―锁定要被更新的行
―允许其他用户同时查询、插入、更新未被锁定的行
―在 SELECT 语句中使用“FOR UPDATE”子句,可以强制使用共享更新锁
―允许多个用户同时锁定表的不同行
加锁的两种方法
        1        lock table tab_name in share update mode;
        2         select column1,column2
            from goods
            where goods
            where gid=1001
            for update of column1,column2
排他锁
―与其他两种锁相比,排他锁是限制性最强的表锁
―仅允许其他用户查询数据
―不允许执行插入、删除和更新操作
―在同一时间仅允许一位用户在表上放置排他锁
―共享锁与此相反

         lock table tab_name in exclusive mode;
         lock table<表名>[<表名>]...
                   in share mode [nowait]
  
         lock table< 表名>[<表名>]...
         in exclusive mode [nowait]
         lock table<表名>[<表名>]...
         in share update mode[nowait]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,要解锁被锁住的,可以按照以下步骤进行操作: 1. 首先,查看数据库锁,诊断锁的来源及类型。可以使用以下SQL语句查询锁信息: SELECT OBJECT_ID, SESSION_ID, LOCKED_MODE FROM V$LOCKED_OBJECT; \[1\] 2. 找出数据库的serial#,以备杀死。可以使用以下SQL语句查询被锁住的会话信息: SELECT T2.USERNAME, T2.SID, T2.SERIAL#, T2.LOGON_TIME FROM V$LOCKED_OBJECT T1, V$SESSION T2 WHERE T1.SESSION_ID = T2.SID ORDER BY T2.LOGON_TIME; \[2\] 3. 根据步骤2中查询到的会话信息,使用以下SQL语句杀死该会话: ALTER SYSTEM KILL SESSION 'sid,serial#'; (其中sid和serial#为步骤2中查询到的值)\[2\] 此外,还可以使用以下SQL语句查看哪个被锁: SELECT b.owner, b.object_name, a.session_id, a.locked_mode FROM v$locked_object a, dba_objects b WHERE b.object_id = a.object_id; \[3\] 请注意,解锁表需要谨慎操作,确保只解锁正确的会话和。 #### 引用[.reference_title] - *1* *3* [Oracle数据库被锁如何查询和解锁详解](https://blog.csdn.net/qq_46071165/article/details/130104761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Oracle被锁住及解锁方法](https://blog.csdn.net/u012934325/article/details/81015484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值