登录  /  注册
博主信息
博文 15
粉丝 0
评论 0
访问量 2112
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Oracle链接服务器导致SQL Server异常终止
Moebius数据库多活集群
原创
140人浏览过

1 现象

首先该链接服务器是使用 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文件。

1.png

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

2.png

2 原因

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

3.png

3 解决

  1. 去掉SQL语句中的特殊字符,如果是为了注释用的,可以替换成“/**/”;

  2. Oracle官网上下载最新的链接服务器提供程序,https://www.oracle.com/database/technologies/odac-downloads.html;

  3. 禁用该提供程序的“允许进程内”选项(重启SQL Server服务后生效)。链接服务器提供程序进程作为独立的进程运行,被终止时不会导致SQL Server进程的终止,把影响控制在局部。

    产品&服务

    SQL专家云产品介绍

    Moebius多活集群产品介绍

    数据库协作运维服务

    京格瑞趋势科技有限公司是聚焦于数据服务的高新技术企业,成立于2008年,创始团队及核心技术人员来自微软和雅虎。微软数据平台金牌合作伙伴,卫宁健康数据平台战略合作伙伴。通过产品+服务双轮驱动的业务模式,14年间累计服务4000+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学