SQLSERVER Expressのバックアップ

ありがたいことに、無料で使わせて頂ける、SQLSERVER Express

SQL Server 2017 Express エディション

このエントリ レベルの無料のデータベースで、最大 10 GB サイズの小規模なデータ ドリブンの Web アプリケーションとモバイル アプリケーションを構築します。

10GBを、小規模というのだろうか?

1日~1500件の受注をしている物流システムを作っていたが、
10GBには達していなかったと思うので、
結構、使えるわけですよ。
フルバックアップファイルは、20GBとかになっていましたが。

※有償のSQLSERVER Standardを使用

おまけに、SQLSERVER Management Studio(SSMS)まで無料なので、
※データベースの操作をするソフト
使わない手はないわけで、

弥生会計も、このSQLSERVER Expressを使っています。

 

なにより、商用でも無償で使えるのがありがたいが、機能制限がされており、

  • レプリケーション/ミラー(冗長性)
  • ジョブ(スケジュール)

など、バックアップ系が全くダメだけど、
参 >> ここまで使えるSQL Server Express Edition @IT

外部のジョブ機能を使うなりして、なんとか凌ぐわけですが、
ダウンタイム最小に!ということで、

まず、

SQLSERVERを、GoogleDriveにバックアップ

直接、GoogleDriveにDATAと、BACKUPを作って、指定しようすると怒られるので、

  1. SQLSERVERを停止する。(ファイルのロックを解除する)
  2. \Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL以下にある、DATA / Backupを、まるごとGoogle Driveにコピーする。
  3. Google Drive上のDATA/Backupのシンボリックリンクを、\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL に作る。
    ※大事なことは、Google Drive上にメインデータを置くことです。

シンボリックリンクは、コマンドプロンプトを、管理者モードで起動し、

CD \Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL
mklink /d DATA "\Users\ユーザー名\Google ドライブ\DATA"
mklink /d Backup "\Users\ユーザー名\Google ドライブ\Backup"

を実行。

※ユーザー名のところだけ、書き換え

参 >> Windowsのシンボリックリンクとジャンクションとハードリンクの違い

  1. SQLSERVERを再開する

以上で、自動的に、ファイルがクラウド上にコピーされます。
※おそらく、SQLSERVERの停止時=Windowsの再起動時に、ファイルが保存され、起動時に、クラウドに反映されていると思います。

追記 >> 実際にやってみたら、ファイルがロックされていて、同期が出来ません!

SQLSERVER Expressの定期バックアップを作る

メインファイル以外にも、一般的なスケジュールによるバックアップもやっておきましょう。

Expressでは、ジョブが使えないので、代案として、

  • Windowsのタスクでバックアップ
  • 運用するソフト上で、タイマーを使ってバックアップ

いずれも、上記の設定で、Backupに保存すれば、自動的にクラウド上に保存されます。

例 >>

BACKUP DATABASE [TestDB] TO DISK = N'C:\backup\TestDB.bak' WITH NOFORMAT, NOINIT, NAME = N'TestDB-完全 データベース バックアップ', SKIP, NOREWIND, NOUNLOAD, STATS = 10
 GO

参 >> SQL Server Expressで自動バックアップを作成する方法

 

SQLSERVER Express の冗長化

クラスタ・ミラーが使えないので、別のPCにSQLSERVERを用意しましょう。

追記 >> 上記の通り、コピーさせてくれないので、コールドスタンバイにバックアップから、復元してやるしか、方法はないようです。

  1. 同様にシンボリックリンクを作り、
  2. 起動時に自動実行されないように、サービスを手動にしておきます。=コールドスタンバイ

PCが故障しないかぎり、眠ったままとなりますが、
万が一の時は、

  1. サービスを起動し、
  2. 最新のデータかどうかだけ確認し、
    (足りない時は、バックアップから復元)
  3. 問題なければ、データベースの接続先を変更

死んだPCから、データを抜く必要もないため、ダウンタイムは最小になるはずです。

 

SQLSERVER Expressのバックアップ