Oracle链接服务器导致SQL Server异常终止
笔记哥 /
05-09 /
28点赞 /
0评论 /
320阅读
## 现象
首先该链接服务器是使用 OraOLEDB provider (OLEDB Provider for Oracle)创建的,在使用该链接服务器的SQL语句中出现特殊字符 “--”时,例如,SELECT \* FROM OPENQUERY(LINKEDSERVER\_OA,‘SELECT \* FROM student WHERE name = ''王'' --一些注释’),就会导致SQL Server服务异常终止。
在Windows 系统事件日志中看到“SQL Server (MSSQLSERVER) 服务意外终止,它已执行此操作 X 次”的错误消息。另外SQL Server会生成DUMP文件。

注意,软硬件故障、杀毒软件、安全软件等都会导致SQL Server进程异常终止并生成EXCEPTION\_ACCESS\_VIOLATION的DUMP。因此一定要通过WinDbg分析DUMP文件,只有看到下面的程序运行堆栈才能确定是链接服务器导致的。

## 原因
首先这是Oracle的链接服务器提供程序(OraOLEDB Provider)的BUG,当遇到特殊字符“--”时,错误地修改了不属于它的堆内存,如果进程内的堆函数不稳定,为了防止数据损坏,操作系统会自动关闭该进程。 当该链接服务器提供程序配置为“允许进程内”,SQL Server进程将一起关闭。详细请参考微软官方文档:https://learn.microsoft.com/en-US/troubleshoot/sql/database-engine/linked-servers/crashes-run-oracle-linked-server-query。

## 解决
1. 去掉SQL语句中的特殊字符,如果是为了注释用的,可以替换成“/\*\*/”;
2. Oracle官网上下载最新的链接服务器提供程序,https://www.oracle.com/database/technologies/odac-downloads.html;
3. 禁用该提供程序的“允许进程内”选项(重启SQL Server服务后生效)。链接服务器提供程序进程作为独立的进程运行,被终止时不会导致SQL Server进程的终止,把影响控制在局部。
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/3193
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利