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#でプロセスの環境変数を変更する例。
1 2 3 4 |
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で監視すると分かり易い。
コメント