昨日、Facebook で教えていただいたのですが CREATE DATABASE (ATTACHE DATABASE も) のデータベースの構文には以下の記載があります。
ファイルが未処理のパーティション上にある場合、os_file_name には、未処理になっている既存のパーティションのドライブ文字のみを指定する必要があります。1 つの未処理のパーティションに作成できるのは 1 つのデータ ファイルだけです。
SQL Server のデータベースを作成するときは、 mdf/ndf/ldf というファイルを指定するのが一般的だと思いますが、Raw Partition (未処理のパーティション) を直接指定することもできるそうです。
WIndows 2000 + SQL Server 2000 の組み合わせから使用できたようなのですが、10年以上 SQL Server を使用して全く気が付いていませんでした…。
参考となる技術情報としては以下のものがありそうです。
Using Raw Partitions
Physical Database Storage Design
それではさっそく設定方法を見ていきたいと思います。
■Raw Partition を使用したデータベースの配置
初めに権限周りのことを書いておきますと、今回は SQL Server のサービスを Local System アカウントで実行してしまっています。
一般ユーザーの権限を持つサービスアカウントでは権限が不足しており設定がうまくできませんでした。
Administrators グループのメンバーにしたアカウントを使用して SQL Server のサービスを起動しても設定はできたので、ローカルセキュリティポリシーで適切な権限を付与すれば一般ユーザーでも設定できるのではと思うのですが、具体的な権限については調査中です。
Raw Partition ですが SQL Server はパーティションを最小単位としてデータベースのファイルを配置する方法のみとなっていますが、RDBMS によっては Raw Device (Raw デバイス) として設定できるものもあるかと。
SQL Server の場合は、以下のようなクエリを使用してデータベースを作成します。
CREATE DATABASE [TEST1] |
通常、SQL Server でデータベースを作成する際には、ファイル名として [~.mdf][~.ndf][~.ldf] を指定しますが、Raw Partition の場合はドライブ文字を指定します。
Raw Partition には空のディレクトリにマウントしたディスクを使用することもできますので、以下のような指定も可能です。
CREATE DATABASE [TEST1] |
この際、注意しておきたいのが[ドライブ文字を指定するときは最後にを入れない]、[マウントしたディスクを使用する場合は最後にを入れる] という点です。
ドライブの指定が間違っていると、
メッセージ 5123、レベル 16、状態 1、行 1 |
というエラーが発生します。
権限が不足している場合も同様のエラーになりますので、切り分けをする場合にはローカルシステムアカウントにして作成ができるかどうかで試すのが早いかと思います。
# ローカルシステムアカウントであれば権限系のエラーは発生しないと思いますので。
Raw Partition ですが、[ディスクをフォーマットしないでパーティションを作成する] ことで作成することができます。
GUI でパーティションを作成する際に、以下の設定で作成を行います。
フォーマットをしないでパーティションを作成するとディスクの管理には [RAW] と表示されます。
これが Raw Partition の状態になります。
Raw Partition は未処理のパーティションを準備する必要がありますが、検証をするためであれば VHD を使用することもできますので、Winodws Server 2008 R2 以降を使用しているのであれば、VHD を作成してそのファイルをマウントすることで手軽に検証できると思います。
NTFS でフォーマットしてしまったパーティションを使用してデータベースを作成しようとすると以下のエラーになります。
メッセージ 5149、レベル 16、状態 3、行 1 |
この場合は Raw Partition になっていないので、ボリュームを削除して状態をクリアする必要があります。
Raw Partition はパーティションを最小の単位としていますのでディスクに対して以下のようなパーティションを設定して、データベースを作成することも可能です。
Raw Partition を使用している場合はデータベーススナップショットを使用することができなくなりますので注意が必要です。
データベース スナップショットの制限事項と要件
FAT32 ファイル システムまたは未処理のパーティションにはデータベース スナップショットを作成できません。データベース スナップショットで使用されるスパース ファイルは NTFS ファイル システムによって提供されます。
また、エクスプローラーからドライブを開くことができませんので SQL Server のサービスを停止してファイルをコピーするということもできません。未検証ですが、フォーマットしていないパーティションですので Windows Server バックアップでも触れないのではないかと。
ファイルを指定した場合と Raw Partition を指定した場合でディスクへのスループットにどれくらいの影響が出るのかは測れていないですが、通常のファイルを使用したデータベースの構成とは変わってきますので使用する場合には運用に気を付ける必要があると思います。