SSISパッケージのライブラリを、物理Windows Server 2003でホストされているSQL Server 2008から仮想Windows Server 2012でホストされているSQL Server 2012に移行する作業を行っています。プロジェクトの展開を使用して、Integration Services Catalogに展開する新しいパッケージ。パッケージは、別のサーバー/インスタンス上の別のSQL Server 2012データベースにデータをインポートします。
パッケージが同じSQL Server 2012ターゲットデータベースに対して複数の同時SQL操作を実行しようとすると、「ログイン失敗」エラーが発生するようです。
[〜#〜] old [〜#〜](機能する場所)
[〜#〜] new [〜#〜](エラーが発生する場合があります)
新しい環境の一部のパッケージで異常なエラーが発生しています。
DTS_E_OLEDBERROR
An OLEDB error has occurred
Error code: 0x80040E4D
An OLEDB record is available.
Source: "Microsoft SQL Server Native Client 11.0"
HResult: 0x80040E4D
Description: "Login failed for user 'MyUser'"
ターゲットデータベースのSQLログには、次のエントリがあります。
Source: Logon, Message: Login failed for user 'MyUser'. Reason: Password did not match that for the login provided. [CLIENT: {IP addr. for SSIS DB server}]
これは切り取られて乾燥しているように見えますが、全体の話にはなりません。
まず、SSISパッケージでデータベース接続文字列を再確認を上書きします。パッケージには、データベース接続マネージャーがあり、その接続プロパティはプロジェクトパラメーターにバインドされています。プロジェクトパラメーターは、Integration Servicesカタログの環境変数にバインドされています。
パッケージが正しい環境を使用して実行されるであることを確認しました。
さらに、同じ接続マネージャーを使用したSQL操作fineがエラーにつながる!
すべてのエラーの共通要因は、同じデータベース接続マネージャーを使用して複数の同時SQL操作が発生すると、この「ログイン失敗」エラーが発生するようです。
パッケージの失敗した部分をリファクタリングして、データベース操作を同時にではなく一度に1つずつ実行すると、エラーはなくなります。
これらのパッケージは、物理的なWindows Server 2003サーバーで実行されているSQL Server 2008データベースを対象としたSSIS 2008で正常に機能しました。
Visual Studioから同じターゲットデータベース(仮想Windows Server 2012上のSQL 2012)に対して新しいSSIS 2012パッケージを実行しても、エラーは発生しません。
これは、それらがIntegration Services Catalogでどのように展開および実行されるかと関係があると私たちを導きますが、何が問題なのか理解できません。ここで、いくつかの助けを借りることができます。
問題は、失敗したログインがSQL Serverログインであったことです。これは、新旧の開発者環境用にSQL接続マネージャーのプロパティを構成する方法です。
ServerName
-MyServer
InitialCatalog
-MyDB
UserName
-MyUser
Password
-***********
ConnectionString
-Data Source=MyServer;User Id=MyUser;Initial Catalog=MyDB;Provider=SQLNCLI11;Persist Security Info=True;Auto Translate=False;
これは、古いSQL 2008環境では完全に機能し、Visual Studioでは問題ありませんでしたが、SQL 2012 Integration Services Catalogからの同時データベース操作中に失敗しましたが、追加したときに機能し始めましたPassword=******
を接続文字列に。
ConnectionString
-Data Source=MyServer;User Id=MyUser;Password=********;Initial Catalog=MyDB;Provider=SQLNCLI11;Persist Security Info=True;Auto Translate=False;
SQL 2012 Integration Services Catalog実行環境で2番目の同時接続が開かれている場合、Password
またはその他の構成プロパティではなく、(初期接続の?)接続文字列のみが調べられるようです。接続マネージャ。したがって、Password
が接続文字列に含まれている必要があります。
確かに機能しましたが、Persist Security Info = Trueを使用してもパスワードを保存できないため、1度しか機能しませんでした。結局、Windowsユーザーアカウントを使用して接続し、パッケージのセキュリティをSQL Serverの役割に依存に切り替えて、うまくいきました。
ProtectionLevelを "EncryptSensitiveWithPassword"に設定し、パッケージプロパティ(F4キー)の "PackagePassword"セクションでパスワードを設定してみてください。これにより、Visual Studioを使用してdtsxパッケージを実行すると、ログインエラーが発生しました。