Flex Gateway新着情報
Governance新着情報
Monitoring API Managerデータベース用 Anypoint Connector (Database Connector) をトラブルシューティングするために、冗長ログの有効化、プーリングプロファイル接続のトラブルシューティング、Snowflake JDBC ドライバーのトラブルシューティング、スローされる一般的なメッセージの解釈に関する情報について説明します。
Database Connector は、JDBC ライブラリ (Java SE JDK 1.8 を使用) に記載されている標準およびガイドラインに従います。
アプリケーションとデータベースのやりとりが失敗する理由の理解を深めるには、Database Connector の冗長ログを一時的に有効にします。
手動で log4j2.xml
ファイルを変更するか、CloudHub API を使用している場合は Anypoint Runtime Manager を使用して、冗長ログを有効にします。
Mule アプリケーションのパフォーマンスに影響するため、トラブルシューティングが完了したら、必ず拡張された冗長性を無効にしてください。
設定ファイルで冗長ログを有効にする手順は、次のとおりです。
Anypoint Studio にアクセスし、[Package Explorer] ビューに移動します。
アプリケーションのプロジェクト名を開きます。
src/main/resources
パスフォルダーを開きます。
フォルダー内の log4j2.xml
ファイルを開きます。
<Loggers>
タグ内に <AsyncLogger>
タグを追加します。
<Loggers>
...
<AsyncLogger name="org.mule.extension.db" level="DEBUG"/>
...
</Loggers>
アプリケーションの変更を保存します。
Package Explorer でプロジェクト名をクリックし、[Run (実行)] > [Run As (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] をクリックします。
Anypoint Runtime Manager で冗長ログを有効にする手順は、次のとおりです。
Anypoint Runtime Manager にアクセスします。
[API configuration (API 設定)] に移動します。
[Logging (ログ)] サブタブで、DEBUG レベルで org.mule.extension.db
パッケージを追加します。
変更を適用します。
フローで必要とされる接続数よりも少ない接続を提供するプーリングプロファイルを使用すると、フロー全体がハングする可能性があります。
この問題を解決する手順は、次のとおりです。
解決策の 1 つとして、プールのサイズを増やすことが挙げられます。この方法が使用できない場合、仮想マシン用 Anypoint Connector (VM Connector) を使用して、VM メッセージの有効期間に一致するように接続の有効期間を短くします。こうすることで、Stored procedure 操作へのすべてのコールが実行されて、その結果がコンシュームされ、操作に関連付けられている接続が終了してプールに戻ります。
次の例は、Stored procedure 操作と VM Connector でプーリングプロファイルを使用する方法を示しています。この例では、foreach
要素が 11 番目の反復に到達しても、プールで接続を提供できるため、Stored procedure 操作はハングしません。
<db:config name="Database_Config">
<db:generic-connection url="someUrl" user="someUser" password="somePassword" driverClassName="someDriver">
<db:pooling-profile maxPoolSize="10">
</db:pooling-profile>
</db:generic-connection>
</db:config>
<vm:config name="VM_Config">
<vm:queues >
<vm:queue queueName="testQueue" />
</vm:queues>
</vm:config>
<flow name="processingFlow">
<foreach collection="#[1 to 11]">
<logger level="INFO" message="#['Starting Iteration ' ++ payload as String]" />
<vm:publish config-ref="VM_Config" queueName="testQueue"/>
<logger level="INFO" message="#['Finishing Iteration ' ++ payload as String]"/>
</foreach>
</flow>
<flow name="coolFlow">
<vm:listener config-ref="VM_Config" queueName="testQueue" numberOfConsumers="1"/>
<db:stored-procedure config-ref="Database_Config">
<db:sql><![CDATA[{call testProc2()}]]></db:sql>
</db:stored-procedure>
<logger level="INFO" message="#[output application/json --- payload.resultSet1]" />
</flow>
一部のドライバーには、ストアドプロシージャーをコールするときの独自の仕様があります。中括弧 ({
および }
) を使用してコール可能なステートメントを設定している場合 (例: {call doubleMyInt(:myInt)}
)、アプリケーションを実行すると Snowflake JDBC ドライバーで次の例外がスローされます。
net.snowflake.client.jdbc.SnowflakeSQLException: Unsupported feature 'call'
この問題を解決する手順は、次のとおりです。
Snowflake JDBC ドライバーでは、中括弧 {
および }
を使用せずにコール可能なステートメントを設定します。例:
call doubleMyInt(:myInt)
スローされる一般的なメッセージのリストとその解釈方法を次に示します。
DB:BAD_SQL_SYNTAX
指定された SQL クエリの構文が無効です。
DB:CANNOT_LOAD_DRIVER
Database Connector で JDBC ドライバーを読み込むことができません。
DB:CANNOT_REACH
Database Connector で RDBMS との接続を確立できません。
DB:CONNECTIVITY
いくつかの考えられる接続の問題 (不適切な接続の設定、行のフェッチ結果を待機しているときのデータベース応答の欠落、データベース接続の切断など)。
DB:INVALID_DATABASE
RDBMS への接続は確立されましたが、データベースが存在していません。
DB:INVALID_CREDENTIALS
データベースで指定されたログイン情報が拒否されました。
DB:QUERY_EXECUTION
クエリの実行に失敗しました。
DB:RETRY_EXHAUSTED
すべての再接続の試行に失敗しました。