InterBaseでSQL文を実行時にsort errorが発生した場合の対処方法
問題
InterBaseでorder by句をつけたSQL文を実行すると、下図のようなsort errorが発生しました。
このエラーの対処方法を教えてください。
解決
このケースは、sort errorが発生し、ib_sort_xxxxx...というファイルが開けないという内容のエラーです。 InterBaseのSQL文ではorder by句を指定すると、クエリのソートが行われるのですが、 デフォルトで、Windowsの環境変数TMPで指定されているフォルダ内に一時的にソートするためのファイルが作成されます。
※環境変数TMPを確認する方法は、コマンドプロンプトを起動し、set TMP と入力ください。
デフォルトでは、以下のように表示されます。
C:\Users\< ログイン名>\AppData\Local\Temp
このエラーが発生する原因として以下のような理由が考えられます。
- 環境変数TMPで指定されているフォルダの容量が許容数をオーバー、あるいは空き容量が足りない
- (32ビット版のWindowsでは、4GB以上のサイズは容量オーバーとなります)
- ibconfigのSORTMEM_BUFFER_SIZEのサイズが足りない
- InterBaseのデータベースファイル(*.gdb、*.ib)のサイズが大きい
そこで、このケースの対処方法として以下を試してください。
- 環境変数TMPで展開されているテンポラリファイルをクリアする
- (余計なファイルが残っている場合は、削除して、空き容量を増やしてください)
- ibconfigのTMP_DIRECTORYの指定を任意のフォルダに設定する
- ibconfigのSORTMEM_BUFFER_SIZEを変更する
ibconfigは、InterBaseのホームディレトリ内に配置されています。
例えば、InterBase 2020の32ビットの場合は、InterBaseのホームディレトリはデフォルトで以下のパスになります。
C:\Program Files (x86)\Embarcadero\InterBase2020
なお、ibconfigで設定する各パラメータの説明は、以下のドキュメントを参照ください。
http://docs.embarcadero.com/products/interbase/IBXE7_JP/OpGuide_ja.pdf