SQL Server のバックアップであるが、今の職場では デタッチもしくはデータベースを停止し、データベースの実体ファイルをコピーする、という荒技を行うのが通例だったようだ。

確かにWindows 2008 Server になってコピー速度が速くなったとはいえ、稼働中のシステムにそれは乱暴すぎる。よって、まずはSQL文でバックアップを提供した。その時のメモ。
基本、そのときの状態を取りたいがため、フルバックアップをしている。

BACKUP DATABASE [DB名] TO DISK = '[ファイル名]';

なお、ファイル名はローカルドライブかUSB接続のものとしている。ネットワーク上にある別の機器にも確保できなくはないが、制約があるので止めている。


さてさて。これでは「間違えて複数回実行してしまった」というときに、複数分蓄積される。よって次のように変更。

BACKUP DATABASE [DB名] TO DISK = '[ファイル名]' with init;

これで複数回実行してしまってもその時点のものが取れる。しかし、バックアップというものはその時点でトランザクションログを切り捨て可能にしてしまう。よって定期的にバックアップを取るような仕組みになっているところに臨時的にこういうことをやってしまうと定期バックアップ側にバックアップされないトランザクションが出ることになる。
ということで更に次のように変更。

BACKUP DATABASE [DB名] TO DISK = '[ファイル名]' with init , COPY_ONLY;

いまのところこんな感じ。なお、この COPY_ONLY であるが、SQL Server 2008 以降、SQL Server Management Studio では、コピーのみのバックアップはサポートされていないそうだ。
http://msdn.microsoft.com/ja-jp/library/ms191495.aspx