数据库表锁处理及杂症解决

1.oracle相关

表锁处理

某张表锁住后无法增删改,需要先解锁
select c.owner, c.object_name, b.sid, b.serial#, b.status, b.osuser
from v$locked_object a, v$session b, dba_objects c
where b.sid = a.session_id and a.object_id = c.object_id

alter system kill session 'SID,SERIAL#'

2.mysql相关

待补充

3.sqlServer相关

IDENTITY_INSERT

IDENTITY_INSERT为OFF时,不能插入,更新即可
SET IDENTITY_INSERT [表名] ON;

4.DM达梦相关

表锁处理

先通过表名查询出来sess_id,再通过SP_CLOSE_SESSION关闭
BEGIN
    -- 遍历查询结果集
    FOR cur_rec IN (
        SELECT c.sess_id
        FROM v$lock a
        LEFT JOIN sysobjects b ON b.id = a.table_id
        LEFT JOIN v$sessions c ON a.trx_id = c.trx_id
        WHERE b.name LIKE '%SAFETY_DAILY_VEHICLE_PERSON_DATA_TAB%'
    ) LOOP
        BEGIN
            -- 执行存储过程关闭会话
            EXECUTE IMMEDIATE 'CALL SP_CLOSE_SESSION(' || cur_rec.sess_id || ')';
        EXCEPTION
            WHEN OTHERS THEN
                -- 打印错误信息,可根据实际需求调整处理方式,比如记录日志
                DBMS_OUTPUT.PUT_LINE('Error closing session ' || cur_rec.sess_id || ': ' || SQLERRM);
        END;
    END LOOP;
END;

mount状态

select status$ from v$instance
  
alter database open
评论区
头像
文章目录