暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

内存库解锁方案

IT那活儿 2023-11-21
246

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  




问题背景



1.1 场景描述

业务进程有持续锁,需要解锁。

1.2 检查方法

通过dmdb_status -l db31查询acctadm.md_app_procws_ofac_his_cc01表被锁,正常锁30min会自动释放,经排查锁相关的业务进程不存在。




解决方案



步骤一:直接从内存库端kill该会话

登录内存库:
dmsql system/xxxx@dmdb
kill session 16000 @db31;

查看释放sessions的形式是否成功。
select * from dba_locks @db31

步骤二:如果kill session异常,直接强制解锁

登录内存库:
dmsql system/xxxx@dmdb
sys unlock table acctadm.md_app_procws_ofac_his_cc01;

如果强制解锁,建议重建索引,步骤如下:
登录内存库:
1)对索引进行检擦看索引记录数和表记录是否一致
imsql acctadm/xxxx@10.2xx.9.xx:3910
sys check table acctadm.MD_APP_PROCWS_OFAC_HIS_CC01;
select count(*) from acctadm.MD_APP_PROCWS_OFAC_HIS_CC01;

结果为索引记录数比表记录数多一条,(p2=1多一条锁记录)。
2)如果不一致,创建索引,一致就不需要创建了
CREATE or replace INDEX MD_APP_PROCWS_OFAC_HIS_CC01_1 
ON MD_APP_PROCWS_OFAC_HIS_CC01(BATCHSN,WSSEQ) HASH 1000000;

重建完索引,记录数还是不一致。
  • 解决方案一

    删除索引重建 (报错
imsql system/xxxx@10.2xx.9.xx:3910

drop INDEX MD_APP_PROCWS_OFAC_HIS_CC01_1 on acctadm.MD_APP_PROCWS_OFAC_HIS_CC01;
MDB-03035: cannot delete all indexes when there is a primary key

  • 解决方案二

    重建表 (需要imsql单点登录获取表结构)  --实际方案
imsql system/xxxx@10.2xx.9.xx:3910

iMSQL> rename table acctadm.MD_APP_PROCWS_OFAC_HIS_CC01 to acctadm.MD_APP_PROCWS_OFAC_HIS_CC01bak;
Table renamed
iMSQL> CREATE TABLE acctadm.MD_APP_PROCWS_OFAC_HIS_CC01(
BATCHSN VARCHAR(64) NOT NULL,
WSSEQ VARCHAR(25) NOT NULL,
RLB_DISP VARCHAR(18),
STATUS VARCHAR(2) NOT NULL,
ID_NO NUMERIC(14) NOT NULL,
PHONE_NO VARCHAR(20),
CONTRACT_NO NUMERIC(14),
DAY_BILLCYCL VARCHAR(8) NOT NULL,
CONTENT VARCHAR(230),
GEN_TIME VARCHAR(17) NOT NULL,
DEAL_TIME VARCHAR(17) NOT NULL,
DEAL_CODE VARCHAR(5),
PRIMARY KEY(BATCHSN,WSSEQ,ID_NO)
);
Table MD_APP_PROCWS_OFAC_HIS_CC01 created
iMSQL> CREATE INDEX MD_APP_PROCWS_OFAC_HIS_CC01_1 ON acctadm.MD_APP_PROCWS_OFAC_HIS_CC01(BATCHSN,WSSEQ) HASH 1000000;
Index md_app_procws_ofac_his_cc01_1 created

insert into acctadm.MD_APP_PROCWS_OFAC_HIS_CC01 select * from acctadm.MD_APP_PROCWS_OFAC_HIS_CC01bak;
commit;

表重建后需要授权:

imsql acctadm/xxxx@10.2xx.9.xx:3910
grant all on all to acctopr;
grant select on all to acctqry;
grant select on all to bdsopr;
commit;

通知业务侧起进程,检查主备同步是否正常:
dmsql dmsql system/xxxx@dmdb
select count(*) from acctadm.MD_APP_PROCWS_OFAC_HIS_CC01 @db31;
select count(*) from acctadm.MD_APP_PROCWS_OFAC_HIS_CC01 @db31_bak;
select count(*) from acctadm.MD_APP_PROCWS_OFAC_HIS_CC01 @db31_bak2;


END



本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论