受信エラー: Unlink “メッセージ・ファイル” Failure 5: パーミッションがありません。
本書では、SQL Remote使用時のエラー「Unlink “メッセージ・ファイル” Failure 5: パーミッションがありません。」について説明します。
エラー:“Unlink “<メッセージ・ファイル>” Failure 5: パーミッションがありません。”
原因:パーミッション、ネットワーク通信障害、またはタイミングの問題
状況:SQL Remote はメッセージ・ファイルを削除できません。また、メッセージが適用されない場合があります。
解決策:メッセージが生成された理由を特定します。以下の診断手順を参照して問題点を修正してください。
一般に、このパーミッション拒否エラーは、ファイルが使用中であること、または、使用中のアカウントにファイルを削除する(リンク解除する)ためのパーミッションがないことを意味します。Unlink は、ファイルを削除する場合に使用するC 関数です。Unlink を使用すると、ファイル名で指定されたファイルが削除されます。この関数の呼び出しで読み取り専用ファイルを削除することはできません。以下の手順を行うと、このエラーの原因を調べることができます。
1. リンク解除エラーを引き起こしたファイルが、指定されたパスにあることを確認します。
2. ファイルを削除する権限がMessage Agent にあることを確認します。
3. このエラーがFTP サーバで発生している場合は、パーミッションが正しく設定されていることを確認します。FTPメッセージ・システムの使用時には、FTP サーバにログインするユーザは適切なメッセージ・ディレクトリに対する読み取り、書き込み、名前変更、および削除のパーミッションを持つ必要があります。これは、FTP メッセージ・タイプだけにこのエラーが該当するという意味ではありません。このエラーは、FILE メッセージ・システムの使用時にも発生する可能性があります。
リンク解除エラーは、メッセージにI/O エラーがあったことを表します。このエラー・メッセージの原因としては、ほかに次のようなことが考えられます。
- Message Agent の実行中に電話回線/モデムが切断された。
- dbremote の実行時にファイル・サーバが利用不可能な状態だった。これは、dbremoteを実行しているマシンとは別のサーバでメッセージ・システムがメッセージを格納している場合や、ネットワーク接続が停止状態の場合に起こります。
- FILE メッセージ・システムを使用している場合に、ファイル・サーバに対するパーミッションが適切に設定されていない。
- メッセージ・ファイルのプロパティが読み取り専用に変更されている。
- ファイルが別のプロセス(メモ帳など)で使用されている。
- リモート・ノードがファイルを解放する前に、別のリモート・ノードがメッセージにアクセスしようとしている。
たとえば、送信側ノードがメッセージ・ファイルを作成して、そのファイルに対する追加の書き込みを開始するとエラーが起こる場合があります。送信側ノードがメッセージ・ファイルへの書き込みを行っているときに、受信側ノードが同じメッセージ・ファイルの終わりまでスキャンして、そのファイルを削除しようとすると、このエラーが発生
します。
このエラーが頻繁に発生する場合は、dbremote の受信頻度を少なくすることができます。デフォルトでは、MessageAgent は受信メッセージを1 分ごとにポーリングします。
SQL Anywhere 5.5.0x~Adaptive Server Anywhere (SQL Anywhere) 6.0.1 では、-f スイッチを使用してMessage Agent の受信頻度を変更できます。
Adaptive Server Anywhere (SQL Anywhere) 6.0.2 以降では、dbremote の-rd スイッチ(-rd は受信遅延を意味する)を使用して、ポーリング頻度を設定できます。Message Agent は、ポーリング頻度に関係なく、送信サイクルごとに受信メッセージを1 回チェックします。したがって、SEND EVERY より大きい頻度値を指定しても、MessageAgent は送信サイクルごとに受信メッセージを1 回チェックします。