Google Cloud SQLへのレプリケーションを試してみました[DBMoto]

異種データベース間レプリケーションを行えるソフトウェアDBMoto。エージェントレスなアーキテクチャを採用しているので、データベースのプラットフォームに依存せず、例えばクラウド上のデータベースであってもレプリケーションを実施することができます。

今回は実際にDBMotoによる、Google Cloud SQLを使用したレプリケーションを試してみました。

現在Google Cloud SQLはMySQLPostgreSQLから選択できますが、DBMotoではどちらのデータベースエンジンであってもレプリケーションを行えます。また連携元(先)のデータベースに関しては、同種のデータベースはもちろん、Oracle, SQL Server,DB2 (AS/400)といった異種データベースであってもレプリケーションを行うことが可能です。


まずは、Google Cloud SQLを作成します。

こちらよりGoogle Cloud SQLインスタンスの作成画面のスタートページを開きます。


「インスタンスを作成」ボタンを選択し、次の画面でデータベースエンジンを選択します。今回はMySQLを選択してみました。


インスタンス名やリージョン、rootパスワードを入力後、作成をクリックします。数分待つとインスタンスが立ち上がり、Google Cloud SQL MySQLのデプロイが完了します。


インスタンス起動後は接続先となるIPアドレスが表示されます。さらに、GUI上でユーザ作成や接続を承認するIPアドレスも指定できます。今回はオンプレミスのDBMoto<サーバから接続するため、承認済みネットワークにDBMotoサーバのグローバルIPアドレスを指定し、接続ユーザとして「dbmoto」ユーザを作成しました。


これでGoogle Cloud SQL側の設定は完了です。後はDBMotoの画面で接続設定を行うだけです。Google Cloud SQLのパブリックIPアドレスと作成した「dbmoto」ユーザを指定することで接続が完了し、Google Cloud SQLを使用したレプリケーションを行うことができます。

Cloud SQL ProxyをDBMotoサーバにインストールすることで、Cloud SQL Proxyを使用した接続を行うことも可能です。


もちろん、リアルタイムな連携目的で、レプリケーション元データベースからGoogle Cloud SQLへの差分レプリケーションも可能です。さらにデータベースエンジンがMySQLの場合は、バイナリログやトリガーを使用したGoogle Cloud SQL MySQLからの差分レプリケーションも可能です。
※トリガーを使用する場合は、Google Cloud SQL MySQL側のデータベースフラグの設定から「log_bin_trust_function_creators」パラメータを有効化することで可能です。

このように、DBMotoを使用することで、オンプレミスのあらゆるデータベースをGoogle Cloud SQL に移行することや、リアルタイムなデータ連携によりGoogle Cloud SQL 側でのアプリケーション開発などを行うことが可能です。DBMotoの詳細に関してはこちらよりお問い合わせください。

タグ: , , , , ,

複数ユーザ管理や統合管理に「リモート接続モード」:DBMoto

DBMotoは「リモート接続モード」に対応しています。このモードを使用することでDBMotoをインスト―ルしたサーバとは別のマシンにDBMotoのリモートコンソールのみをインストールし、そこからリモートアクセスして管理や設定等を行えます。

続きを読む
コメントする -->

DBMotoの各種機能別の動画デモについてのリンクサイト情報(異種DB接続、ミラーリング、シンクロナイゼーション)

DBMotoの各機能・設定についての動画リンクサイト情報です。

閲覧にはメールアドレス入力が必要です。

ご不明点や詳細については、下記のURLからお問合せください。https://www.climb.co.jp/soft/veeam/contact/

◇AS/400の接続

◇SQL Serverの接続

◇ターゲットテーブルの作成

◇AS/400からSQL Serverへのミラーリング

◇AS/400とSQL Serverのシンクロナイゼーション

◇Oracleの接続

◇AS/400からOracleへのミラーリング

◇AS/400とOracleのシンクロナイゼーション

◇OracleからSQL Serverへのミラーリング

◇OracleからSQL Serverへのシンクロナイゼーション

◇Microsoft Azure SQL Databaseへの接続

◇OracleからAzure SQL Databaseへのミラーリング

◇AWS RDS(MySQL)への接続

◇OracleからRDS(MySQL)へのミラーリング

◇OracleからSQL Serverへのミラーリング

◇OracleとSQL Serverのシンクロナイゼーション

◇レプリケーションのグループ化

◇逆方向マッピング

◇レプリケーション一括作成

タグ:

外部キーが設定された親子テーブルのリフレッシュの注意点と簡単設定方法

DBMotoで外部キーが設定された親子テーブルを共に全件リフレッシュによるレプリケーションを行う場合には注意が必要です。

参照されるテーブルAを親、参照するテーブルB(外部キー設定)を子とした場合、
登録する場合はAから、削除する場合はBからである必要があります。

DBMotoでテーブルAとBをグループ化してリフレッシュを行う場合は通常下記の手順がとられます。

1-1. テーブルAをTruncate
1-2. テーブルAにInsert
1-3. テーブルBをTruncate
1-4. テーブルBにInsert

しかしこの手順では外部キー制約違反のエラーが発生してしまいます。
これを実際には下記の手順で行わなければなりません。

2-1. テーブルBをTruncate
2-2. テーブルAをTruncate
2-3. テーブルAにInsert
2-4. テーブルBにInsert

この手順の処理を行うために、
DBMotoで下記の通り設定変更を行います。

まずDBMotoで 2-3/2-4 のInsert処理を順番通りに行うためにグループに所属する各テーブルの処理優先順位を設定します。

しかしこのままだとTruncateの2-1/2-2の処理もこの優先順位通りになってしまいます。
Truncateは逆の順序で行う必要があるため、[Truncate Inverse]の設定を True にします。

以上で正常にリフレッシュレプリケーションを行うことが可能になります。

ただ、少数のテーブルであらば、これでも問題ありませんが、数か増えてくるといちいちボタンで並び替えは手間となります。このような場合には右下の鍵マークをクリックします。

上記のreplication2, 3, 1とグループに追加されていますが、依存関係としては1, 2, 3となるべきものです。そこで鍵マークをクリックすると手動で動かさなくとも、DBMotoが読み取っている外部キー情報に基づき下記のように自動で並び替えをしてくれます。

例えば、Oracleで下記のエラーが発生する場合には上記手順にてグループ化し、リフレッシュを実行してください。

ORA-02291: 整合性制約(string.string)に違反しました – 親キーがありません
ORA-02292: 整合性制約(string.string)に違反しました – 子レコードがあります

タグ:

SQL Server ExpressおよびWebエディションのデータベースより、DBMotoでミラーリングを実行する方法

DBMotoにおいて、SQL Serverから差分データをレプリケーションする場合、
SQL Serverのディストリビューターを使用するか、トリガーを使用します。

SQL Server StandardやEnterpriseエディションの場合、ディストリビューター/トリガー双方ともサポートしておりますが、Webエディションや無償版のExpressエディションについてはディストリビューター自体がサポートされていないため、トリガー方式のみの対応となります。

あらかじめSQL Server側で用意しておく認証情報や設定については、こちらのブログをご確認ください。

トリガーの設定は、すべてDBMotoのコンソールより実施できます。

  1. DBMotoに登録したSQL Serverを右クリックし、トランザクションセットアップ有効化をクリック

  2. Triggersを選択
  3. 次に変更点を保持するログテーブルを、どのデータベースにどのような名前で作成するか指定します。
    既に以前ログテーブルを作成している場合は、既存のマスターテーブルを選択より指定します。
    ログテーブルが存在しない場合は、新規マスターテーブルを追加より新規作成可能です。
  4. 次へをクリックし、セットアップウィザードを終了します。

上記の設定によって、トリガーを使用した差分レプリケーションが開始できます。

タグ: , , ,

CloudBerry Backupによる SQL Serverの自動バックアップ

CloudBerry Backupによる SQLServerの自動 バックアップのステップを紹介します。

SQL Serverバックアップを行うにはCloudBerry Backup Ultimateエディションが必要で、現在 Microsoft SQL Server 2000-2017をサポート可能です。

(1)Start the backup wizard in CloudBerry Backupのバックアップ・ウィザードのHomeタブで MS SQL Serverをクリックします。

(2)Local/ Cloud Backup / Hybrid Backupのどれかを(ここでは最初のオプションを使用します)選択し、ターゲット・ストレージ・アカウントを選択するか新しいアカウントを作成します。

(3)このバックアップ計画の名前を入力して次に進みます。 この時点で、CloudBerry BackupをターゲットのSQL Serverインスタンスに接続する必要があります。 CloudBerry Backupはユーザに必要な権限も確認します。 SQL Serverに別のバックアップアカウントを作成した場合は、[ Authentication:認証]メニューを使用してそのアカウント情報を指定します。

(4) バックアップしたいデータベースを選択します。ここではTestDBを選択します。

(5)必要な数のコピーだけを保存するには、バックアップのRetention policy(保存方針)を指定してください。 これは、クラウド・ストレージを使用しているときに、スペースを使い果たしたり、必要以上に支払いをしたりするのを防ぐのに役立ちます。

(6)スケジュール・ステップでは、「1回実行」ジョブを作成したり、利用可能なスケジュールテンプレートの1つを設定したりすることができます。 ほとんどの場合、Recurring (定期的な:事前定義されたテンプレート)スケジュールを使用することを推奨します。これには、フル、差分、およびトランザクション・ログのバックアップのセットが含まれ、ユーザのニーズで修正できます。

そのスケジュールがユーザが希望するもので無い場合 – Recurring(アドバンス・スケジュール)を確認してユーザ独自のテンプレートを作成してください。

(7)次のステップで、テンプレート・セットから繰り返しの詳細を指定します。 以下の例では、1時間ごと、毎日の差分、毎週のフルでのバックアップがあります。

(8)前後のアクションや通知設定など、設定したいその他の詳細オプションを設定し、バックアップ計画の作成を完了します。

タグ: , , , ,

3/19(火)開催Webセミナー録画: Veeam新機能 徹底解説 Part 4:SAP HANA統合:SAP認定ソリューションだから整合性のあるバックアップも簡単・確実!

1月22日にリリースされたばかりのVeeam Backup & Replication 9.5 update 4の各種新機能を、機能別に紹介するどこでもセミナー第4弾です。

SAP HANAの整合性を保ったバックアップ方法、SAP HANA管理者側でのバックアップ運用、そしてバックアップを全てまとめて保管等々を解決できます。

https://www.slideshare.net/climb_soft/veeam-part-4sap-hanasap

このセミナーではこのようなご要望にお応えする、『Veeam Plug-in for SAP HANA』をご紹介します。この機能はSAP HANAが提供するBackintというAPIを用いて作成されたバックアップを、Veeamの仮想マシンや物理マシンのバックアップと同一のリポジトリに保存するための連携機能であり、SAPから“Backint for SAP HANA“として認定もされています。
これにより、バックアップ管理者は推奨する保存先をSAP HANAバックアップの保存先とし、SAP HANA管理者は整合性を保ったネイティブのバックアップで運用を行えます。

タグ: , , , , , , ,

2/21開催Webセミナー「 Veeam新機能 徹底解説 Part 1:Oracle RMAN連携 ~運用変えずVeeamでらくらくバックアップ&リストア~」

1月22日にリリースされたばかりのVeeam Backup & Replication 9.5 update 4、このアップデートにはメジャーバージョンに匹敵する新機能が数多く含まれています。これら各種新機能に関して概要をこちらのWebセミナーにてご紹介させていただきましたが、その中でも注目度の高い個別の機能をシリーズ化してご紹介していきます。

今回はVeeam Plugin for Oracle RMAN機能です。この機能はOracle RMAN(リカバリマネージャ)で作成されたバックアップを、Veeamの仮想マシンや物理マシンのバックアップと同一のリポジトリに保存するための連携機能です。

これにより、バックアップ管理者は推奨する保存先をRMANバックアップの保存先とし、Oracleデータベース管理者は実行手順を変えずRMANバックアップを実施できます。

タグ: , , , , , ,

DBMotoのエラー通知をもっと柔軟に、フィルタ設定で必要な通知のみをメール送付

DBMotoではグループやレプリケーションごとに細かくメール通知の設定を行えます。

Syniti DR(DBMoto)でメール通知を行うアラート設定

この設定では、メッセージのステータスによる通知可否を指定する他に、フィルタに一致するもののみを通知するように指定できます。

このフィルタ設定は単純に指定した文字列を含むものもみをフィルタするだけでなく、ANDORNOTの論理演算子を使用することも可能です。

これにより、例えば、ターゲットテーブルの手動更新などで発生する可能性のある一意制約エラーをDBMoto管理への通知からは除外、一意制約エラーに関してのみターゲットテーブルのオーナーに対してエラーをメール通知といった複雑な通知もできます。

※データベースごとにエラーの出力のされ方が異なるため、設定する場合には実際に出力されるエラーを確認し、文字列を指定してください。

例えばOracleをターゲットテーブルとしたレプリケーションの一部レコードが一意制約エラーとなった場合、デフォルトですと下記のような通知が指定したメールアドレスまで送信されます。


[レプリケーション ‘レプリケーション名’ のアラート] DBMoto Automatic Alert Message

** Alert Timestamp: 2018年12月26日 17:31:59
** Alert Type: ReplicationError
** Alert Severity: 高

** Description: レプリケーションのエラーに関するアラート

** Details: レプリケーション ‘レプリケーション名’ は次のエラーを生成しました。: Error inserting a new record (Replication: ‘レプリケーション名’ – Target table: ‘ターゲットテーブル名’)
Oracle.DataAccess.Client.OracleException ORA-00001: 一意制約(Schema.SYS_C007358)に反しています 場所 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck, Int32 isRecoverable)
場所 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
場所 Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
場所 nn.g7()
場所 i1.a(kq A_0, fr A_1, Boolean A_2)


このエラーに関してハンドリングを行うため、上記例でのDBMoto管理者への通知では、ORA-00001(一意制約違反)が含まれていないものを通知するようフィルタ設定します。

NOT “ORA-00001”

各ターゲットテーブルオーナーに対する通知に関しては、送信先ごとにアラートを作成し、ORA-00001(一意制約違反)であり、かつ特定のテーブル名を含む場合のみ通知するようフィルタ設定します。

“ORA-00001” AND “ターゲットテーブル名”

また、特定の複数のエラーに関してのみ通知、かつその中の一部エラーに関しては特定テーブルの場合のみといったフィルタの場合には下記のように設定することもできます。

(“エラーA” AND “テーブル名”) OR “エラーB” OR “エラーC”

このように通知される内容に合わせてフィルタを設定することが可能ですので、単純に全てのエラーと通知するのではなく、エラーに合わせて、通知先を変更するなどの柔軟な設定が可能になっています。

 

コメントする -->

保護中: DBMoto 9.5.4.3 リリースノート

このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。

タグ:

仮想化されたOracleデータベースの適切なバックアップ・リストア手法

エンタープライズ・レベルの企業は、Oracleプラットフォームをミッション・クリティカルなアプリケーションで使用しています。昨今、このOracleプラットフォームをVMwareおよびHyper-V環境で運用されることが多くなりました。その仮想化されたOracleデータベースのバックアップ・リストア手法を紹介します。

Oracle へのVeeam の統合

Veeam Backup & Replicationは、仮想化したOracleプラットフォームへの機能追加として使用できます。エラーや障害が発生した場合に、Oracleデータベースをできる限り早く復元することができます。Veeam Backup & Replicationは独自のOracleバックアップ・ソリューションとして、またはRMANや他のバックアップ・ソフトウェアを用いた既存のバックアップ・プロセスへの機能拡張として使用できます。またVeeam Backup & Replicationは、インスタントVMリカバリやVeeam Explorer for Storage Snapshotsによるスナップショット・ベースのリストア(復旧)など、複数の高速リカバリ機能をOracleプラットフォームに提供します。

システム要件: Veeam Backup & ReplicationでOracleの可用性を有効にするには、WindowsまたはLinuxベースのVM上で稼働するOracle Version 11G、12CとVeeam Backup & Replication v9以上が必要です。

Oracleバックアップのベスト・プラクティス

Veeam Backup & Replicationはブロック単位のイメージ・バックアップを作成し、その内容に関係なくVM全体をコピーとして保護します。バックアップの効率とスピードは、VMwareとHyper-Vの両方の環境で変更ブロック追跡(CBT)技術を使用することで改善します。CBTを使用することでVeeamは変更されたデータ・ブロックのデータをすべてのバックアップ・ジョブで取得できます。処理されるのは変更されたデータのみで、バックアップ・ジョブは、データベース自体の一貫性のあるフル・バックアップとなります。それは、リストア・ポイントにはデータベース自体を含むフルVMの復元が可能なイメージが含まれるためです。

Oracleの場合、Veeam Backup & Replicationは、データベースが存在する環境変数を自動的に分析し、それらをバックアップ・モードへシフトします。バックアップ・ジョブは、VMスナップショットを取得するために数秒間係り、のちに(数秒後に)DB上でバックアップ・モードを開放します。スナップショットは、実際のバックアップを作成するために使用されます。

さらに、ストレージ・スナップショットを使用する場合は、VMwareの負荷を軽減し、VMwareのスナップショット処理の最適化、高速リストアに使用できるため、より頻繁にバックアップを作成できるようになります。オプションとして、クラッシュ・コンシステント(整合性)のストレージ・スナップショットを短い実行間隔で作成できます。クラッシュ・コンシステントの処理により、VMデータはあらゆるハード・ディスクから同じ時点で保護され、リストア中にOracleと互換性が維持されます。

イメージレベルのバックアップとともに、Oracle Archive Logバックアップを必要な頻度で実行し、障害時のデータ損失を最小限に抑え、任意の時点への復元または任意のトランザクションの復元が可能になります。

Oracleリストア・ベスト・プラクティス

Veeam Backup & Replicationでは、Oracleデータベースを復元するオプションを選択できます。イメージレベルのバックアップまたはストレージ・スナップショットからの復元が可能です。また、インスタントVMリカバリは、サーバー全体をわずか数分時間で起動、またはきめ細かくファイルをリストアするために使用されます。

そして Veeam Explorer for Oracle リストア・ウィザードを使用すると、Archive Logsバックアップと組み合わせて、イメージレベルのバックアップから任意の時点または任意のトランザクションへデータベースをリストアできます。これは、状況に応じて柔軟に決定できます。

何にもましてストレージ・スナップショットからインスタントVMリカバリVeeam Explorerを使用すると、システム障害時に短時間でアプリケーションをリストアできます。

タグ: , , , , , , ,

保護中: DBMoto 9.5.2.6 リリースノート

このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。

コメントを読むにはパスワードを入力してください。 -->

[DBMoto][スクリプト]カラムを結合・分割したレプリケーション

異種データベース間の双方向レプリケーションツールDBMotoでは、スクリプトを使用することでカラムの結合・分割を行いながらデータを同期することも可能です。今回の記事では双方向レプリケーションにおいてカラムの結合・分割を実現するサンプルスクリプトとその設定方法をご紹介いたします。

1.カラムの結合

今回は例として、下記図のようにAS/400の2つの数値型カラムを結合して、SQL Serverの日付型カラムへとレプリケーションを行います。

まずはDBMoto管理画面左上にあるグローバルスクリプトボタンをクリックし、ポップアップされたDBMotoグローバルスクリプト画面で下記スクリプトをコピーします。VBスクリプトなのでスクリプト言語はVBに設定します。

[vb]
Imports System
Imports System.Data
Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript

Namespace DBRS
Public Class GlobalScript : Inherits IGlobalScript

‘AS/400 to SQL Server CONVERTTODATETIME
Public Shared Function CONVERTTODATETIME (objDate As Object, objTime As Object) As Object
If (objDate Is Nothing OrElse objDate Is System.DBNull.Value) Or (objTime Is Nothing OrElse objTime Is System.DBNull.Value) Then
CONVERTTODATETIME = System.DBNull.Value
Else
CONVERTTODATETIME = New DateTime(Left(objDate.ToString(),4) , Mid(objDate.ToString(),5,2), Right(objDate.ToString(),2), Left(objTime.ToString(),2), Mid(objTime.ToString(),3,2), Right(objTime.ToString(),2))
End If
End Function

End Class

Public Class MappingRule : Inherits IMappingRule

End Class

Public Class CreateTableRule : Inherits ICreateTableRule

End Class

Public Class GlobalEvents : Inherits IGlobalEvents

End Class
End Namespace

[/vb]

その後、レプリケーションプロパティのフィールドマッピング設定から結合するカラムを指定します。今回はC2カラムとC3カラムを結合するので、C2カラムから出ている矢印を右クリック > 関数へのマッピング画面で下記関数を入力します。
CONVERTTODATETIME([C2],[C3])

関数入力後、指定したカラムからマッピングされていることが確認できます。

設定が完了したらレプリケーションを実行してみます。AS/400のデータが結合されSQL Serverにレプリケーションされることが確認できます。

2.カラムの分割
今度は逆にSQL Serverの日付型カラムを分割し、AS/400の2つの数値型カラムにレプリケーションを行う設定を行います。

グローバルスクリプトに下記スクリプトを追加します。

[vb]
Imports System
Imports System.Data
Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript

Namespace DBRS
Public Class GlobalScript : Inherits IGlobalScript

‘AS/400 to SQL Server CONVERT TO DATETIME
Public Shared Function CONVERTTODATETIME (objDate as Object, objTime as Object) as Object
If (objDate Is Nothing OrElse objDate Is System.DBNull.Value) Or (objTime Is Nothing OrElse objTime Is System.DBNull.Value) Then
CONVERTTODATETIME = System.DBNull.Value
Else
CONVERTTODATETIME = new DateTime(Left(objDate.ToString(),4) , Mid(objDate.ToString(),5,2), Right(objDate.ToString(),2), Left(objTime.ToString(),2), Mid(objTime.ToString(),3,2), Right(objTime.ToString(),2))
End if
End Function

‘SQL Server to AS/400 CONVERT TO NUMBER(yyyymmdd)
Public Shared Function CONVERTDATETONUMBER(objDate as Object) as Object
Dim dtDate as DateTime
If objDate Is Nothing OrElse objDate Is System.DBNull.Value Then
CONVERTDATETONUMBER = System.DBNull.Value
Else
dtDate = objDate
CONVERTDATETONUMBER = dtDate.Year * 10000 + dtDate.Month * 100 + dtDate.Day
End if
End Function

‘SQL Server to AS/400 CONVERT TO NUMBER(hhmmss)
Public Shared Function CONVERTDATETOTIME (objDate as Object) as Object
Dim dtDate as DateTime
If objDate Is Nothing OrElse objDate Is System.DBNull.Value Then
CONVERTDATETOTIME = System.DBNull.Value
Else
dtDate = objDate
CONVERTDATETOTIME = dtDate.Hour * 10000 + dtDate.Minute * 100 + dtDate.Second
End if
End Function

End Class

Public Class MappingRule : Inherits IMappingRule

End Class

Public Class CreateTableRule : Inherits ICreateTableRule

End Class

Public Class GlobalEvents : Inherits IGlobalEvents

End Class
End Namespace

[/vb]

その後、レプリケーションプロパティのフィールドマッピング設定に分割するカラムを指定します。矢印ボタンをクリックし、逆向きレプリケーションの設定画面にした後、各カラムにドラック&ドロップでマッピングし、各マッピング画面でそれぞれ下記関数を入力します。
CONVERTDATETONUMBER([C2])
CONVERTDATETOTIME([C2])

下の画面はSQL ServerのC2カラムからAS/400のC3カラムにドラッグ&ドロップでマッピングした後に関数設定を行っております。
レプリケーションを実行してみると、SQL Serverのデータが分割されAS/400の各カラムにレプリケーションされることが確認できます。

タグ: , , ,

Microsoft SQL Serverのバックアップとリストア手法

MSSQLは、マイクロソフトが開発したWindowsプラットフォーム上で、最も一般的なリレーショナルデータベース管理システムです。このデータベースソフトウェア製品の主な機能は、他のソフトウェアアプリケーションによって要求されたデータを格納および検索することです。このブログでは、AWSでホストされているMSSQLを見て、Microsoftが提供するバックアップとリストアのプロセスに固有の3つのオプションを示します。このブログでは、MSSQL 2008 R2 Standard Editionを使用しました。ただし、MSSQLによって提供される同じバックアップおよびリストアメカニズムは、他のMSSQLバージョンにほとんど適用可能です。

MSSQLのビルトインバックアップおよびリストアプロセス

理想的な世界では、ハードドライブやその他のハードウェアは決して故障しません。ソフトウェアに欠陥はなく、ユーザーは間違いを犯さず、ハッカーは決して成功しません。しかし、私たちは完璧ではない世界に住んでおり、有害なイベントの処理を計画し準備する必要があります。

データベース環境では、その計画をデータリストア計画(DRP)と呼びます。DRPは、データベース管理者(DBA)がデータベース環境の可用性に影響を与える可能性がある有害なイベントを処理するために取る一連のアクションです。

バックアップとリストアの実行を検討する理由

バックアップおよびリストア操作を実行する主な理由は3つあります:

  1. 損失データのリストア:これは、バックアップ/リストア計画の最も明白な目的です。 イベントの場合、失われたデータをリストアすることができます。
  2. データの損失を最小限に抑制(RPOの目標を向上させるための目標を向上):計画では、失われたデータの量を最小限に抑える必要があります。たとえば、データベースを一日おきにバックアップすると、システムで最大24時間のデータが失われる可能性があります。一日中常に追加のバックアップを実行すると、潜在的な損失を減らすことができます。
  3. ダウンタイムの影響を最小限に抑制(目標時間の短縮 – RTO):考慮すべきもう一つの要素は、システムのリストアがいかに難しく時間がかかり、潜在的なダウンタイムのコストを削減するかです。場合によっては、フルバックアップと多数のトランザクションログを使用してデータベースをリストアすることもできます。1つの差分ログと少ないトランザクションログバックアップで1つの完全なデータバックアップをリストアするよりも、そのデータベースのダウンタイムコストが高くなる可能性があります。

以下のセクションでは、MSSQLのフルバックアップオプションと差分バックアップオプションについて説明します。

バックアップの種類

SQL Serverには、3種類の基本バックアップが用意されています:フルバックアップ、差分バックアップ、ログバックアップ

  1. フルバックアップ

フルデータバックアップには、特定のデータベース内のすべてのデータ、一連のファイルグループまたはファイル、およびすべてのデータをリストアできるログファイルがすべて含まれています。
フルデータベースバックアップは、トランザクションログの一部とともにデータベース全体をバックアップします。トランザクションログには、バックアッププロセス中に発生したすべてのオープントランザクションとトランザクションが含まれているため、データベース全体のバックアップをリストアした後で、フルデータベースをリカバリできます。フルデータベースバックアップは、バックアップが完了した時点のデータベースを表します。これにより、リストアプロセスでトランザクションの整合性を実現できます。

以下は、フルデータベースバックアップコマンドの例です:

BACKUP DATABASE efy

TO DISK = N’C:\Backup\efy.bak’

  1. 差分バックアップ

差分バックアップは、フルバックアップの実行に要する時間を短縮するように設計されています。差分バックアップは、データベース全体をコピーするのではなく、前回のフルバックアップ以降に変更されたデータのみをコピーします。フルバックアップと同様、差分バックアップは、バックアップがリストアされたときにトランザクションの整合性を維持するために、トランザクションログの一部をコピーします。

以下は、差分バックアップコマンドのコマンドの構文例です:

BACKUP DATABASE efy

TO DISK = N’C:\Backup\efy.bak’

WITH DIFFERENTIAL

  1. ログバックアップ

実際にデータベースページをコピーしない唯一のタイプのバックアップは、ログバックアップです。ログバックアップは、データベースのトランザクションログをコピーします。ログをコピーした後、バックアップはアクティブなトランザクションやトランザクションレプリケーションでは不要なログの部分を切り捨てます。

ログをバックアップする構文例を次に示します:

BACKUP LOG efy

TO DISK = N’C:\Backup\efy.bak’

メンテナンスプランを使用した日次データベースバックアップのスケジュール設定

日次データベースバックアップのスケジュール設定手順:

  1. スタートメニューから、Microsoft SQL Server 2008フォルダに移動します。
  2. SQLサーバー管理スタジオで、SQLサーバーマネージャーを開きます。
  3. Managementの下で、Maintenance Plansを右クリックし、New Maintenance Planを選択します。
  4. Back Up Database Taskダイアログボックス(下記参照)で、バックアップの種類とバックアップするデータベースの種類と、バックアップファイルを保存する場所のパスを指定します。
  5. カレンダーボタンをクリックしてタスクをスケジュールし、タスクを保存します。

上記の手順では、データベース自動バックアップのスケジュールを作成しました。

(注)この記事はあくまでも参考としての投稿で、それを保証するものではありません。

タグ: ,

[DBMoto]暗号化したデータを復号し保存するデータ連携方法

こちらの記事では、データを暗号化しレプリケーションする方法をご紹介しました。本記事では、この暗号化したデータを復号してデータ連携を行う手法を3ステップでご紹介します。手順1. 復号関数の作成

暗号化によるレプリケーションを紹介した時と同様に、DBMotoのグローバルスクリプトに復号を行うDecrypt関数を設定します。下記はAES方式の復号を行う関数を実装するスクリプトです。

[c language=”#”]
using System;
using System.Data;
using DBMotoPublic;
using DBMotoScript;

using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace DBRS{

public class GlobalScript : IGlobalScript{
public static string Decrypt(string cipher, string iv, string key){
using (RijndaelManaged myRijndael = new RijndaelManaged()){
myRijndael.BlockSize = 128;
myRijndael.KeySize = 128;
myRijndael.IV = Encoding.UTF8.GetBytes(iv);
myRijndael.Key = Encoding.UTF8.GetBytes(key);

ICryptoTransform decryptor = myRijndael.CreateDecryptor(myRijndael.Key, myRijndael.IV);

string plain = string.Empty;
using (MemoryStream mStream = new MemoryStream(System.Convert.FromBase64String(cipher))){
using (CryptoStream ctStream = new CryptoStream(mStream, decryptor, CryptoStreamMode.Read)){
using (StreamReader sr = new StreamReader(ctStream)){
plain = sr.ReadLine();
}
}
}
return plain;
}
}
}
}
[/c]

手順2. マッピングの設定

レプリケーションを作成する際のマッピング設定にて、グローバルスクリプトに記載したDecrypt関数を使用するよう設定します。

もし、シンクロナイゼーションのレプリケーションモードで、複製先から複製元への逆方向の転送時に関数を設定したい場合には、下記画像の赤枠のアイコンをクリックします。これにより逆方向のマッピングが設定できます。

手順3. レプリケーションの実行

関数を設定したレプリケーションを実行します。Decrypt関数を設定したカラムのデータが複製先テーブルで復号されていることが確認できます。

このように関数を使用することで、暗号化されたデータを復号しデータベースに保存することが可能です。また、双方向差分転送モードのシンクロナイゼーションを利用することで、複製元では平文でデータを、複製先では暗号化したデータを保存するような運用も可能です。個人情報や大切なデータを保管したデータベースのデータ移行や連携等で、ぜひDBMotoをご検討ください。

コメントする -->