ゲスト作成者:Sander Stad(@sqlstad)
PSDatabaseCloneは、データベース(「クローン」)のイメージを作成し、それらのクローンを1つ以上のホストに配布する機能を備えたPowerShellモジュールです。
このモジュールを使用する理由
データベース管理者、そして実際にデータプロビジョニングを処理する必要のある人には、データベースを操作したいユーザーがいます。これには、新しいソリューションの開発、ETLプロセスのデータの抽出、パフォーマンスの問題のシミュレート、レポート用のデータの取得などが含まれます。
他の場所へのデータのプロビジョニングは非常に面倒な作業になる可能性があり、私たちのほとんどはその作業を実行するために多くの時間とリソースを費やしています。
データをプロビジョニングするための既知の解決策は、データベースを復元するか、この問題を解決するための広範なスクリプトを開発することです。これらのソリューションは、データをプロビジョニングするための最も効率的な方法であるとは限らず、かなりの時間がかかる可能性があります。
他の場所にデータを取得するのにかかる時間に加えて、多くのディスクスペースもかかる可能性があります。
データのプロビジョニングにかかる時間を短縮し、同時に必要なリソースの量を削減する方法があったとしたらどうでしょうか。これに対する解決策があり、PSDatabaseCloneと呼ばれています。
モジュールのインストール方法
モジュールのインストールは、いくつかの方法で実行できます。
PowerShellGallery
最も簡単な方法は、コマンドInstall-Module
を使用することです。 。このコマンドは、PowerShellギャラリーでモジュールを検索します。次のコードを実行して、PowerShellギャラリーを使用してモジュールをインストールします。
Install-Module PSDatabaseClone
この方法を使用すると、新しいバージョンがリリースされたときにモジュールを更新するのも簡単になります。 Update-Module
を使用するだけです 以下のようなコマンドを実行して、最新バージョンに更新します。
Update-Module PSDatabaseClone
リポジトリのクローン作成
モジュールをインストールする別の方法は、Gitリポジトリをローカルマシンに複製することです。プロジェクトに貢献したい人には、この方法を使用することをお勧めします。
次のコマンドを実行します。
git clone https://github.com/sanderstad/PSDatabaseClone.git
これにより、リポジトリ全体がローカルマシンにダウンロードされ、そこからモジュールを使用したり、モジュールの新機能を開発したりできます。
モジュールはどのように機能しますか?
画像
モジュールの目標は、可能な限り最小限の外部アプリケーションを使用することでした。これにより、誰もが余分なものをインストールすることなくモジュールを使用できます。このモジュールは、Windowsのネイティブテクノロジを使用して仮想ハードディスク(VHD)を作成することで機能します。 VHDは、ハードディスクを表すファイル形式であり、ボリューム、パーティションを含めることができ、パーティションにはファイルやフォルダーを含めることができます。 VHDは、外部USBドライブを接続するのと同じように、他のホストに配布して追加のディスクとしてマウントできます。接続すると、ホストはシステム上の他のディスクと同じようにファイルやフォルダにアクセスできます。
このモジュールは、いわゆるイメージとなるVHDを作成します。イメージには、データベースに必要なすべてのファイルとフォルダーが含まれます。
イメージの作成プロセス中に、モジュールは指定したデータベースからバックアップを取得し、データベースをVHDに復元します。
復元後、VHDは閉じられてマウント解除され、データベースのクローン作成に必要なすべてのファイルが含まれるようになります。
図1:画像を作成するプロセス
クローン
クローンを作成するために、モジュールは親ディスクと同じファイルとフォルダーを含む「差分ディスク」を作成しますが、親と子の間のデルタのみを保存します。
元のデータベースサイズのごく一部のみがクローンに使用されるため、この機能によりディスクスペースがすぐに節約されます。
もう1つの利点は、クローンが変更のデルタを保存するため、イメージ自体が変更の影響を受けないことです。これは、他のクローンも影響を受けないことを意味します。
クローンを作成するプロセスは、作成されたイメージ(親ディスク)内に差分ディスクを作成することです。クローンがマウントされ、クローン内のデータベースがインスタンスに接続されます。
その瞬間から、データベースは元のデータベースと同じように動作します。これには、同じオブジェクト、データ、および動作が含まれています。すべてのオブジェクトは元のデータベースと同じようにデータベース内にあるため、クエリプランとクエリ統計は同じように機能します。
これにより、ユーザーまたは開発者は、本番環境でも開発システムと同じように実行されるクエリを作成できるようになり、非効率的なクエリを実行するリスクが軽減されます。
イメージとクローンの作成
画像を作成する
プロセスの最初のステップは、イメージを作成することです。イメージを作成するには、次の前提条件があります。
- ソースインスタンス
- 宛先インスタンス(ソースインスタンスと同じにすることができます)
- データベース
- ネットワークパス
- バックアップ
イメージを作成するコマンドは次のとおりです。New-PSDCImage
。
他のホストがイメージを見つけてそれを使用してクローンを作成できるようにするには、イメージへのネットワークパスを使用することが非常に重要です。
次のコマンドを実行した場合:
New-PSDCImage -SourceInstance SQLDB1 -DestinationInstance SQLDB1 -ImageNetworkPath \\sqldb1\psdatabaseclone\images -Database DB1 -CreateFullBackup
次の結果が得られます:
このコマンドは2018-07-24の午後9時頃に実行されました。これは、画像の日付を説明しています。
この例では、コマンドは特定のデータベースのインスタンスSQLDB1を調べ、同じインスタンスを使用してイメージを作成しようとします。最新のデータを取得するための新しい完全バックアップが作成されます。
結果は、ネットワーク共有\\sqldb1\psdatabaseclone\images
にあるイメージです。 DB1_20180724214146.vhdx
と呼ばれます 。
イメージ名の数字は、イメージが作成された時点のタイムスタンプです。
クローンの作成
クローンはイメージに依存しており、特定のデータベースからクローンを作成する最も簡単な方法は、モジュールにそれを理解させることです。
次のコマンドを実行します:
New-PSDCClone -SqlInstance SQLDB3 -Database DB1 -CloneName DB1_Clone2 -LatestImage
以下のような同様の結果が作成されます:
このコマンドは、別のインスタンスに差動ディスクを作成しました。クローンはデータベースDB1の最新のイメージに基づいており、クローンの名前は「DB1_Clone2」になります。
宛先を指定しなかったため、コマンドはSQLServerインスタンスのデフォルトのデータの場所を検索します。
そのディレクトリ内に、「クローン」と呼ばれるサブディレクトリが作成されます。クローンはそのフォルダー内に配置されます。
情報の取得
モジュールのセットアップ中に、すべてのクローンを見つけることができる場所を割り当てました。これはデータベースまたはディレクトリのいずれかであり、より具体的には、構成ファイルが書き込まれる共有でした。
情報を取得するには、コマンドGet-PSDCImage
を使用できます およびGet-PSDCClone
。これらのコマンドは、インフォメーションストアから情報を取得し、ユーザーに返します。
画像情報
画像情報を取得するには、コマンドGet-PSDCCimage
を使用する必要があります 。これにより、次のような結果が得られます。
同じデータベースから複数の画像があり、それぞれが異なるデータを持っている可能性があることがわかります。
クローン情報
画像情報の取得と同様に、クローン情報を取得できます。コマンドGet-PSDCCloneを使用すると、次のような結果が得られます。
次は?!
PSDatabaseCloneの次の機能は、イメージ内のデータを難読化して、エンタープライズ環境に適したものにすることです。最近のデータ漏えい事件については誰もが知っています。少なくともオンプレミスにないデータは、誰もそれをどうするかわからないようにマスクされていることを確認したいと思います。
どのようにお手伝いできますか?
PSDatabaseCloneはオープンソースのPowerShellモジュールであり、興味のある人は誰でもモジュールの改善に役立てることができます。 PowerShell関数やモジュールの開発に精通している場合は、新機能の開発を支援したり、バグを修正したりできます(どこかにバグがあると確信しています)。コードの開発に不安がある場合でも、心配する必要はありません。やるべきことはたくさんあります。
さまざまな機能をテストし、それらを壊そうとするのを手伝うことができます。私は一人として、ここまでしか行けず、ほとんどの場合、プログラムの幸せな流れをテストしています。あなたはおそらく別の方法でテストし、私が思いもよらなかった他の結果を得るでしょう。これにより、モジュールが改善されます。
また、現在のソリューションに追加する新機能を考えるのに役立ちます。自分では考えられなかった新機能のアイデアが浮かぶかもしれません。
新機能のアイデアがある場合、またはバグを見つけた場合は、githubページに移動して、機能リクエストまたはバグレポートを作成してください。よろしくお願いします。
情報
ウェブサイト:https://psdatabaseclone.org
Github:https://github.com/sanderstad/PSDatabaseClone
作者について
Sanderはバージョン2000からSQLServerを使用しています。彼はさまざまな業界で働いています。 、農業、金融業界、ヘルスケアから。
彼はバージョン1からPowerShellを使用しており、可能な場合は自動化を採用しています。