Access 2010 (x64) で 2GB 以上のデータベースを扱えない
SPECIAL
テキストファイルのインポート時にエラーが発生してしまう。
Microsoft Access 2010 へ、スペース区切りのテキストファイルの内容をインポートしようとしたところ、次のエラーメッセージが表示されてしまいました。
データベース '' を開くことができません。アプリケーションで認識できないデータベースであるか、またはファイルが破損しています。
テキストファイルが破損というのもなんだか考えにくいので、これはもしかすると取り込み先の Access データベースの方が故障したりしているのかとも考えました。
ここまでで既にたくさんのデータを複数のテキストファイルから取り込んでいたところだったので、その間に Access データベースが壊れてしまったか、またはもしかして、扱えるデータ量の上限に達してしまったなども、可能性としては考えられるのかもしれません。
念のため、別のテキストファイルを取り込んでみようとしてみても、同じエラーとなってしまったので、やはりこれはどちらかというと、Access データベース側の問題のようにも思えます。
動作不良でよくある対応の一つとして、Access データベースを開きなおすという方法があるかと思います。
そこでとりあえず Access をいったん終了して、再度そのデータベースを開いてインポートを試してみましたが、やはり同じ結果となってしまいました。
もし Access データベースが破損ということなのだとしたら、Microsoft Access に搭載されている "データベースの修復" 機能で直ることがよくあるので、試してみることにします。
リボンの 【データベース ツール】 から 【データベースの最適化/修復】 を選択して、最適化と修復を試してみたところ、失敗していたテキストファイルのインポートが取り込めるようになりました。ただ、もう一つの別のテキストファイルを追加でインポートしようとしたところ、再び同じエラーが発生してしまいました。
最適化を行ってみても、今度は改善される感じはなく、同じエラーとなってしまいました。
ところで、Access データベースを再度開こうとしたときに、Access データベースの容量が 1.99GB (2,095,108 KB) になっているところも気になりました。
その後にエラーとなって、最適化を実施したらいったんは 1.4GB 程度まで容量が削減されたものの、再びインポートすると 1.99GB となって、その後は最適化を実行しても 1.99GB から変わりませんでした。1.99GB の時に行ったテキストファイルのインポートでは、データベースが開けないというエラーとなってしまいました。
2GB といえば、何かと障壁となる可能性がある数値なので、その辺りについて詳しく見てみたところ、Microsoft 社のページ http://office.microsoft.com/ja-jp/access-help/HA010341462.aspx に Microsoft Access 2010 の仕様のページがありました。
これを見ると、どうやら Microsoft Access 2010 のデータベース最大容量は "2GB からシステムオブジェクトに必要な領域のサイズを引いた値" となっていました。
つまり 2GB を超えたために、今回のエラーが発生したと考えておいて良さそうです。となるとこのエラーは、とりあえず最適化で容量を減らして様子をみるという感じで対応することになるのでしょうか。 ともあれ、今回は 64 ビット版の Microsoft Access 2010 を使っているのですけど、それでもファイルの上限は 2GB までというのも、なんとなく残念なような感じもします。
Access データベースを分割するという対処法では…
ところで、Microsoft 社のページ http://office.microsoft.com/ja-jp/access-help/HA010341462.aspx にある Microsoft Access 2010 の仕様のページでは、"分割したデータベースを使用すると、この制限を回避できます。" という記述がありました。
つまりこのデータベースの分割という機能を使えば Microsoft Access 2010 のデータベース最大容量 2GB の壁を越えることができるのかと思ったのですけど、実際にやってみたものの、どうやらそう簡単には 2GB の壁を突破させてくれる様子はありませんでした。
データベースの分割には "データベース分割ツール" を使用します。
なお、データベースの分割の際は、予めデータベースファイルをバックアップしておき、また、分割作業が終わるまではデータベースを使用しないようにする必要があるようです。
データベースファイルを Microsoft Access で開いたら、リボンの "データの移動" に所属している "Access データベース" を選択して、データベース分割ツールを起動します。
データベース分割ツールが起動したら【データベースの分割】ボタンをクリックします。
そして、新規に作成する "バックエンドデータベース" のファイル名を指定します。この "バックエンドデータベース" が、実際のデータが格納される Access データベースファイルになるそうです。
データベースの扱いとしては、もとのデータベースは "フロントエンドデータベース" として、フロントデータベースを開いて、バックエンドデータベースに接続するという流れになります。
これでデータベースをフロントエンド(操作用)とバックエンド(データ用)の 2 つに分割すること自体はできるのですけど、これだけでは、データ用のバックエンドのデータ容量が分割前とほぼ同じになってしまいます。そして、バックエンドデータベースが 2GB を超えてえしまうと、やはり最初と同じように "データベース '' を開くことができません" というエラーとなってしまうのでした。
これは、Access データベース 1 つあたりの制限が約 2GB となっているためで、これを回避するためには、1 つの Access データベースを複数のファイルに分割してあげる必要があるとのことなのですが、どうやらデータベースの分割機能を使ってテーブルをいくつかの、別々のバックエンドデータベースへ分けることはできるものの、ひとつのテーブルを複数のバックエンドデータベースへ分けることは、なんとなく出来なそうな感じでした。
つまり、ひとつのテーブルが 2GB を超えるような場合は、データベースの分割では解決しない感じです。
今回はそんな、ひとつのテーブルで 2GB を超えるケースだったので、結局、Microsoft Access 2010 (x64) はあきらめて、Microsoft SQL Server 2008 Developer Edition などの上級クラスのデータベースを使って、2GB の制約を回避する運びとなりました。