1.ORACLE 索引及性能相关系统视图使用2.ORACLE闪回功能基本用法
3.【检查ORACLE阻塞】如果阻塞超过N秒则发短信报警并KILL进程
4.如何批量脚本停用(启用)SQL Server 和 ORACLE 数据库用户作业5.ORACLE隔离级别与脏读/不可重复读/幻读的关系以及SELECT FOR UPDATE用法6.ORACLE 中 START WITH CONNECT BY PRIOR 用法(用于父子关系的数据表查询)7.ORACLE / SQL Server-查询最终阻塞者进程脚本8.关于Oracle客户端运行SQLPlus.exe9.SQL SERVER / ORACLE 拼接多行记录字段为一个字符串的方法10.ORACLE自定义函数返回记录集(表类型)的写法11.【转】Oracle 建立索引及SQL优化12.【ORACLE】调整序列的当前种子值13.ORACLE 检索某列包含特定字符串的数据表工具存储过程14.ORACLE常用修改字段脚本15.在oracle中怎么通过字段名查询其所在的表16.ORACLE 查询所有用户调度作业17.【ORACLE】查看死锁进程并结束死锁的脚本18.Oracle获取最近执行的SQL语句19.Oracle的函数返回表类型(转)20.ORACLE变量定义及使用(另,T-SQL EXISTS的PLSQL替代写法)21.ORACLE常用脚本示例22.使用 PL/SQL Developer Version 14 调试 Oracle 存储过程23.Oracle前端工具(PL/SQL Developer)—在不安装Oracle客户端的情况下使用24.SQL SERVER/ORACLE 将ID串列转换为多行的写法25.ORACLE 游标和NULLIF函数在触发器中的使用26.关于“LINQ to Entities does not recognize the Method '...' ”问题原因浅析27.Oracle作业执行与SQL Develop运行语句(脚本)的区别28.ORACLE 创建表前判断是否已存在29.ORACLE 返回类型为SYS_REFCURSOR的存储过程用法30.ORACLE杂文之自定义函数与随机函数检查oracle阻塞,如果阻塞超过N秒则发短信报警
阻塞超过分钟后自动kill进程
检查oracle分布式事务预留锁,回滚事务
/*** 注意:链接服务器clinicdb要设置RPC和RPC Out 为true,否则无法自动解锁***/
CREATE PROCEDURE [dbo].[pCheckOracleLock]
AS
SET NOCOUNT ON
DECLARE @phones varchar(500)
DECLARE @i int
DECLARE @sid int
DECLARE @serial int
DECLARE @ctime int
DECLARE @txt varchar(4000)
--Declare @killTxt varchar(100)
SELECT IDENTITY(int ,1,1) ID,* INTO #tmp FROM OPENQUERY(clinicdb,'select * from apps.Locks where ctime>100')
IF EXISTS(SELECT * FROM #tmp)
BEGIN
SELECT @phones=replace(value,' ','') FROM OPENQUERY(clinicdb,'select value from core.parameterValue where name =''DutyPhoneNums'' ')
SET @phones=replace(@phones,',',',')
IF @phones IS NULL OR @phones=''
RAISERROR('pCheckOracleLock存储过程执行错误:系统参数DutyPhoneNums未设置',18,1)
SET @i=1
SET @txt=''
WHILE @i<=(SELECT max(ID) FROM #tmp)
BEGIN
SELECT @txt='Oracle出现阻塞:SID='+ltrim(SID)+',MACHINE='+isnull(MACHINE,'')+',PROGRAM='+isnull(PROGRAM,'')+',obj='+lower(isnull(OWNER,'')+'.'+isnull(OBJECT_NAME,''))
+',已阻塞'+isnull(ltrim(ctime),'')+'秒'
+CASE WHEN ctime IS NOT NULL AND ctime>600 THEN ',【将立即终止该进程!!!】' ELSE '' END
+',SQL:'+char(13)+char(10)+LEFT(isnull(SQL_TEXT,''),150)
FROM #tmp WHERE ID=@i
INSERT INTO [sy30smoke].[JX_T20_CRM].DBO.tSMSSend(content,mobiletelePhone,typeflag,statusflag,appenddatetime)
SELECT @txt, t.s, 16 AS typeflag, 0 AS statusflag, getdate() AS appenddatetime
FROM dbo.[fnSplitString](@phones,',') t
SET @i=@i+1
END
SET @i=1
WHILE @i<=(SELECT max(ID) FROM #tmp)
BEGIN
SELECT @ctime=ctime, @serial=serial, @sid=[sid]
FROM #tmp WHERE ID=@i
IF @ctime>600
BEGIN
EXEC('begin
pKillSession(?,?);
commit;
end;', @sid,@serial ) at clinicdb
END
SET @i=@i+1
END
END
--分布式事务预留锁
SELECT IDENTITY(int ,1,1) ID,* INTO #pending
FROM OPENQUERY(clinicdb,'select LOCAL_TRAN_ID, to_char(Fail_Time,''yyyy-mm-dd HH24:mi:ss'') as Fail_Time, Host from dba_2pc_pending where fail_time>sysdate-1 and fail_time is not null and state=''prepared'' ')
IF EXISTS(SELECT * FROM #pending)
BEGIN
SELECT @phones=replace(value,' ','') FROM OPENQUERY(clinicdb,'select value from core.parameterValue where name =''DutyPhoneNums'' ')
SET @phones=replace(@phones,',',',')
IF @phones IS NULL OR @phones=''
RAISERROR('pCheckOracleLock存储过程执行错误:系统参数DutyPhoneNums未设置',18,1)
DECLARE @dt datetime
SET @dt=dateadd(second,-600,getdate())
SET @i=1
SET @txt=''
WHILE @i<=(SELECT max(ID) FROM #pending)
BEGIN
SELECT @txt='Oracle出现分布式事务预留锁:LOCAL_TRAN_ID='+ltrim(LOCAL_TRAN_ID)+',Fail_Time='+isnull(Fail_Time,'')+',Host='+isnull(Host,'')+char(13)+char(10)
+CASE WHEN Fail_Time IS NOT NULL AND Fail_Time<@dt
THEN ',【将立即回滚该事务!!!】'
ELSE '执行下述sql可解锁:'+char(13)+char(10)
+'Rollback force '''+ltrim(LOCAL_TRAN_ID)+''';'+char(13)+char(10)
+'execute dbms_transaction.purge_lost_db_entry('''+ltrim(LOCAL_TRAN_ID)+''');'+char(13)+char(10)
+'commit;'
END
FROM #pending WHERE ID=@i
INSERT INTO [sy30smoke].[JX_T20_CRM].DBO.tSMSSend(content,mobiletelePhone,typeflag,statusflag,appenddatetime)
SELECT @txt, t.s, 16 AS typeflag, 0 AS statusflag, getdate() AS appenddatetime
FROM dbo.[fnSplitString](@phones,',') t
SET @i=@i+1
END
SET @i=1
DECLARE @Fail_Time datetime
DECLARE @LOCAL_TRAN_ID varchar(100)
WHILE @i<=(SELECT max(ID) FROM #pending)
BEGIN
SELECT @Fail_Time=Fail_Time, @LOCAL_TRAN_ID=''''+ltrim(LOCAL_TRAN_ID)+''''
FROM #pending WHERE ID=@i
IF @Fail_Time<@dt
BEGIN
EXEC('begin
pRollbackTransaction(?);
commit;
end;', @LOCAL_TRAN_ID ) at clinicdb
END
SET @i=@i+1
END
END
DROP TABLE #tmp
DROP TABLE #pending
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2009-11-16 ObjectContext的ApplyPropertyChanges()方法不能更新导航属性的解决办法