Encontrei uma anomalia de configuração intrigante com um pacote SSIS estabelecendo uma conexão OLEDB com um grupo de disponibilidade do SQL Server 2012. Os DBAs que administram o AG solicitaram que todos os desenvolvedores direcionassem um nó secundário especificando o nome do ouvinte do AG e a parte do banco de dados do AG e usando ApplicationIntent=ReadOnly
como parâmetro adicional em suas cadeias de conexão. O roteamento para o secundário funciona com sqlcmd
o uso da opção -K, mas os pacotes SSIS ainda estavam sendo roteados para o primário. Um exemplo da string de conexão que eles solicitaram está abaixo. Isso foi utilizado como um item de configuração de nível de projeto no catálogo SSISDB.
Provider=SQLNCLI11.1;Server=xxx.xxxx.xxxxx.xxx.com;UID=YourNameHere;Database=AGDB;ApplicationIntent=ReadOnly;Application Name=SomethingForProfilerAndXEToFilterOn
Durante a depuração, a conexão OLEDB foi criada do zero usando a GUI do SQL Server Data Tools. A diferença notável na string de conexão foi a adição de um espaço para que o parâmetro agora fosse lido Application Intent=ReadOnly
. As conexões com o secundário agora são bem-sucedidas.
Parece que o driver OLEDB aceita ambas as variações, mas apenas aquela com o espaço é implementada corretamente com os pacotes SSIS. Isso é uma anomalia com o SSIS ou com o driver SQL Server Native client/OLEDB?
Isso é por design
Dependendo do protocolo SNAC que você está usando, há uma pequena variação na propriedade da cadeia de conexão da intenção do aplicativo.
Ao usar o SQL Native Access Client SQL OLE DB, a string de conexão da intenção do aplicativo deve ser especificada com um espaço: 'Application Intent' Ao conectar usando SQLClient ou ODBC, especifique 'ApplicationIntent' sem espaço
https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/