我遇到了一个令人费解的配置异常,一个 SSIS 包与 SQL Server 2012 可用性组建立了 OLEDB 连接。管理 AG 的 DBA 要求所有开发人员通过指定 AG 侦听器名称和 AG 的 DB 部分来定位辅助节点,并ApplicationIntent=ReadOnly
在其连接字符串中用作附加参数。到辅助服务器的路由sqlcmd
使用 -K 开关,但 SSIS 包仍被路由到主服务器。他们请求的连接字符串的示例如下。这被用作 SSISDB 目录中的项目级配置项。
Provider=SQLNCLI11.1;Server=xxx.xxxx.xxxxx.xxx.com;UID=YourNameHere;Database=AGDB;ApplicationIntent=ReadOnly;Application Name=SomethingForProfilerAndXEToFilterOn
在调试期间,OLEDB 连接是使用 SQL Server Data Tools GUI 从头开始创建的。连接字符串的显着区别是添加了一个空格来让参数现在被读取Application Intent=ReadOnly
。与辅助节点的连接现已成功。
OLEDB 驱动程序似乎接受了这两种变体,但只有带有空格的驱动程序才能通过 SSIS 包正确实现。这是 SSIS 还是 SQL Server Native 客户端/OLEDB 驱动程序异常?
这是设计使然
根据您使用的 SNAC 协议,应用程序意图连接字符串属性会略有不同。
使用 SQL Native Access Client SQL OLE DB 时,应使用空格指定应用程序意图连接字符串: 'Application Intent' 当使用 SQLClient 或 ODBC 连接时,请指定不带空格的 'ApplicationIntent'
https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/