Programing

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から、データを抜く必要もないため、ダウンタイムは最小になるはずです。

 

-

TDBGridの右寄せ・センターリング @Delphi

新しいバージョンを買っているのに、移行せずに、
古いバージョンを使ってきたが、やっとXE2に着手。
最新は、10.2 Tokyo

XE5から、iOS/Androidの開発も出来るようになったので、
このバージョンまでは、保有しているが、
まだ、インストールすらしていない。

まだ、そこまで必要な案件がない・・・

***

TDBGridのカスタムドローで、センターリング・右寄せするには、
昔は、

with TDBGrid.canvas do begin
case Column.Alignment of
 taRightJustify:
  // 右寄せ
  LeftMargin := Column.Width - TextWidth(bufStr) - 4;
 taCenter:
  // 中央寄せ
  LeftMargin := (Column.Width - TextWidth(bufStr)) div 2;
 end;
 TextRect(Rect, Rect.Left + LeftMargin, Rect.Top + 2, bufStr);
end;

と、書いていたが、XE2にしてから、ずれるようになったので、
調べてみたところ、

今は、

with TDBGrid do begin
  case Column.Alignment of
    taRightJustify:
      // 右寄せ
      uFormat := DT_RIGHT or DT_SINGLELINE or DT_VCENTER;
    taCenter:
      // 中央寄せ
      uFormat := DT_CENTER or DT_SINGLELINE or DT_VCENTER;
    else
      uFormat := DT_LEFT or DT_SINGLELINE or DT_VCENTER;
  end;

  aRect      := Rect; // ※DrawTextは変数渡し(RectはConst)
  InflateRect(aRect, 0, 0);
  DrawText(Handle, PChar(bufstr), Length(bufstr), ARect, uFormat);
end;

と書くようだ。

参  >> TDBGrid の複数行選択とセルのカスタム描画 

 

また、XE2からスタイルテーマが選べるようになり、
黒塗りが出来るようになった。

しかし、上記カスタムドローをしちゃうと、背景が真っ白になったりするので、

Canvas.Font.Color :=TStyleManager.ActiveStyle.GetSystemColor(clWindowText)
// ※clWindowTextを、clbtnface、clWindowなどに、変更

を、追加することで、各テーマの標準色を取ってきてくれる。

 

客様の反応は、わからないけど、これで納品予定(笑

白バックって、三原色を放つため、光量が強すぎて、目には刺激が強すぎるが、
その点、黒バックって、目に優しいんですよね♪

昔のDOSの画面は、真っ黒に緑文字だったのに、
紙は白だけど、ディスプレイも白じゃないとって、誰が決めたんだろう?

PS.
最近見つけた、Windowsの新機能 >> 夜間モード

https://support.microsoft.com/ja-jp/help/4027563/windows-10-set-your-display-for-night-time

ブルーライトカットで、目が一瞬で楽になるのが、わかります。
お試しあれ!。

-