すべてのデータベースオブジェクトを既存の空のデータベースまたは新しいデータベースにコピーするc#SMOスクリプトがあります。
しかし、このアプローチには2つの問題があります
あるインスタンスから別のインスタンスに既存のデータベースのクローンを作成する必要があり、現在はデータベースオブジェクトのみをコピーできるため、私の質問は
私のスクリプトは次のようになります
Transfer transfer = new Transfer(databaseSource);
transfer.CopyAllObjects = true;
transfer.CopyAllUsers = true;
transfer.Options.WithDependencies = true;
transfer.DestinationServer = serverDestination.Name;
transfer.DestinationDatabase = databaseDestination.Name;
transfer.DestinationLoginSecure = true;
transfer.CopySchema = true;
transfer.CopyData = true;
transfer.Options.Permissions = true;
transfer.Options.ContinueScriptingOnError = true;
transfer.TransferData();
転送を実行する前に、_SELECT * FROM sys.databases d WHERE d.name = '<target_db_name>';
_を使用してデータベースの既存の設定を取得できます。結果をDataSet
に保存して、後で使用できるようにします。
データベースが存在しない場合、行は返されません。データベースが存在する場合は、最初のステップとして既存のデータベースを削除できます。
TransferData()
メソッドを実行した後、DataSet
の項目に基づいて必要な構成変更を適用できます。たとえば、_recovery_model_desc
_列の内容を使用して、次のコードを実行することにより、リカバリモデルを設定できます。_ALTER DATABASE <target_db_name> SET RECOVERY = 'xxx';
_ここで、xxx
は列に含まれる値です。