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

 

-

Windows2003のドメイン・フォレストの機能レベルを上げる(強制的にマスターを移行)

サブのみで稼働していたwindows2003の環境に、
今更ながら、WindowsServer2012を追加しようとしたところ、
ドメイン機能が2000だったために、上げないと追加すらできず、
2003の方の機能レベルをあげようとしたが、この子、サブ。

移行もせず、先に親を切ってしまったので、面倒なことに・・・

***

叩き起こせないこともないが、
長らく電源も入れていないので、今更・・・

ということで、強制的にマスターを移行することに。

参考

マウス操作では、そこまで出来ないので、Ntdsutilsでやることになるが、

もし失敗したら、2012で新しく作り直すとして、

強制的にマスターを移行する

※入力する値には、下線

  1. Ntdsutilsを実行
  2. ntdsutils: roles
  3. fsmo maintenance: connections
  4. server connections: connect to server xx5

余談

fsmo maintenance: で、「? 」を入れると、コマンドの一覧が表示される。

fsmo maintenance: ?
? - このヘルプを表示します
Connections - 特定のドメイン コントローラに接続します
Help - このヘルプを表示します
Quit - 前のメニューに戻ります
Seize domain naming master - 接続されたサーバーのドメイン役割を上書きします
Seize infrastructure master - 接続されたサーバーのインフラストラクチャ役割を
 上書きします
Seize PDC - 接続されたサーバーの PDC 役割を上書きします
Seize RID master - 接続されたサーバーの RID 役割を上書きします
Seize schema master - 接続されたサーバーのスキーマ役割を上書きします
Select operation target - サイト、サーバー、ドメイン、役割および名前付け
 コンテキストを選びます
Transfer domain naming master - 接続されたサーバーをドメイン名前付けマスタ
 にします
Transfer infrastructure master - 接続されたサーバーをインフラストラクチャ マス
 タにします
Transfer PDC - 接続されたサーバーを PDC にします
Transfer RID master - 接続されたサーバーを RID マスタにします
Transfer schema master - 接続されたサーバーをスキーマ マスタにします

いろいろやってみたが、Transferで始まるコマンドは、親がいる場合で、
今回は、親が居ないので、Seizeで始まるコマンドを実行(強制)

  1. fsmo maintenance: Select operation target
  2. select operation target: List roles for connected server

※強制移行するリストを表示させる

スキーマ - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-Name,CN=Site
s,CN=Configuration,DC=xxx,DC=co,DC=jp
ドメイン - CN=NTDS Settings\0ADEL:f71347a1-d0c1-4958-9d4e-663fda25f175,CN=_RED\0ADEL:48cb37d2-5571-45ea-95f6-1811123f9966,CN=Servers,CN=Default-First-Site-
Name,CN=Sites,CN=Configuration,DC=xxx,DC=co,DC=jp
PDC - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=
Configuration,DC=xxx,DC=co,DC=jp
RID - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=
Configuration,DC=xxx,DC=co,DC=jp
インフラストラクチャ - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-
Name,CN=Sites,CN=Configuration,DC=xxx,DC=co,DC=jp

※ドメインが、移行できていないので

  1. select operation target: quit
  2. fsmo maintenance: Seize domain naming master

※上のメニューに戻り、ドメインを強制転送

強制前に domain naming FSMO の安全転送を試みています。
ldap_modify_sW エラー 0x34(52 (利用できません).
Ldap 拡張エラーメッセージ 000020AF: SvcErr: DSID-0321036B, problem 5002 (UNAVAIL
ABLE), data 8

Win32 エラー 0x20af(要求された FSMO の操作に失敗しました。現在の FSMO の所有者に
接続できませんでした。)
)
エラー コードにより、接続、LDAP、または役割の転送エラー
を示すことがあります。
domain naming FSMO の転送に失敗しました。強制処理 (seize) 中です...
サーバー "xx5" は 5 個の役割を認識しています
スキーマ - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-Name,CN=Site
s,CN=Configuration,DC=xxx,DC=co,DC=jp
ドメイン - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-Name,CN=Site
s,CN=Configuration,DC=xxx,DC=co,DC=jp
PDC - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=
Configuration,DC=xxx,DC=co,DC=jp
RID - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=
Configuration,DC=xxx,DC=co,DC=jp
インフラストラクチャ - CN=NTDS Settings,CN=xx5,CN=Servers,CN=Default-First-Site-
Name,CN=Sites,CN=Configuration,DC=xxx,DC=co,DC=jp
  1. fsmo maintenance: quit
  2. ntdsutil: quit

で、終了。

無事、機能レベルを2003に上げれましたが、移行は、

親が生きている間に、致しましょう!!

-