SQLiteが使用するTEMPフォルダは、OSのTEMP/TMP環境変数に設定されたフォルダを使用する為、OSのTEMP/TMPフォルダのドライブに空きが少ない状態で、大量データをSQLiteが処理すると、「System.Data.SQLite.SQLiteException:database or disk is full」エラーが発生する。
ドライブの空き容量の確保や、OSのTEMP/TMP環境変数のパス変更が難しい場合、アプリケーションの事情でSQLiteのTempフォルダを個別に指定したい場合は、アプリケーションのプロセス起動時にTEMP/TMP環境変数のパスを変更することで、SQLiteが使用するTEMPフォルダを変更することができる。
SQLiteが使用する環境変数は幾つかあるので、プロセス開始時にそれぞれ変更してしまうのが無難。下記はC#でプロセスの環境変数を変更する例。
System.Environment.SetEnvironmentVariable("TMP", "G:\Temp");
System.Environment.SetEnvironmentVariable("TEMP", "G:\Temp");
※Windowsの場合はTMPとTEMPですが、UNIX系ではTMPDIRとSQLITE_TMPDIRを変更します。
SQLiteのtemp_store_directoryオプションで、SQLiteのTEMPフォルダの変更することもできますが、非推奨なのでプロセスの環境変数を変更する方が良いです。
SQLiteがTempフォルダに一時ファイルを作成している様子は、Process Monitor で監視すると分かり易い。
最近のコメント