y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

メモ:MSDE2000の2GB容量制限を何とかしたい

MSDE2000で「プライマリデバイスの容量がどうこうで書き込みできない」みたいなエラーが出た。
DBデバイスの容量を確認すると2GBいっぱいいっぱいになっている。

「はっはーん。MSDEの2GB制限まで使い切ったか」←そのまま表現するおぎやはぎ流無駄ボケ

サーバのエラーメールなんかを巡回受信するアプリを2年間稼動しているので、相当のレコード数になっているはずである。2GBを使い切るってのは結構大変だと思っていたが、メールを数十万件受信するとこうなるらしい。

さて、どうすべか
「MSDE2000は2GBバイトまでです。それ以上はSQLサーバにアップグレードしてください」の下馬評通り、SQLサーバを購入するのか?
バックアップを取ったら、以前のデータをばっさばさ消すか。
それとも、これ以外の方法があるのか?

■チェック&圧縮(最適化) →成功
use DB名
DBCC CHECKDB
DBCC SHRINKDATABASE(DB名)

※最適化は、不要レコードを削除してからでないと実行されない

■デバイスの追加
コマンドプロンプトで動作するSQLクライアント”osql”を使用する。
> osql -S サーバIPアドレス\インスタンス名 -U sa

1>USE master
2>GO
1>ALTER DATABASE DB名
2>ADD FILE
3>(
4>NAME=DBデバイス論理名,
5>FILENAME='物理ファイルの配置先\DBデバイス名.mdf',
6>SIZE=初期DBサイズ(MB),
7>MAXSIZE=2048MB,
8>FILEGROWTH=10MB,
9>)
10>GO
ディスク’DBデバイス論理名'で10.0MB単位でデータベースを拡張しています。

MSDEでデバイス拡張が出来るということは、無制限に使えてしまうということではなかろうか?
「プライマリデバイスがいっぱいでどうこう・・・」とエラーが出たことが、今回のスタート地点であったが、プライマリデバイスがいっぱいの時、自動的に他デバイスに切り替わってくれるのなら、必要分のデバイスを予め用意しておけば良いということになる。ホントか?

”データベースあたり2GBの制限”であるので、物理デバイスが2GB以上に拡張できても、論理DBで2GBの制限が掛かっているのなら、ALTER DATABASEで追加しても無意味!かもしれない。(実証実験をしていません)
もしかして、SQLサーバは、上記の拡張で32個分=64GBを実現しているのかなぁ。

■デバイスの削除
USE master
GO
ALTER DATABASE DB名
REMOVE FILE DBデバイス論理名
GO


■リファレンスサイト
RDB MSDE2000のインストール
TechScrawl SQL Server ノート