1

C# コードを使用して SQL データベースを復元しています。SQL サーバー管理スタジオを使用してバックアップを復元する場合、バックアップ セットを選択できます。 ここに画像の説明を入力

次のコードを使用しました

openFileDialog1.ShowDialog();
    string databaseName = "TempDb";
    Restore sqlRestore = new Restore();

    BackupDeviceItem deviceItem = new BackupDeviceItem(openFileDialog1.FileName, DeviceType.File);
    sqlRestore.Devices.Add(deviceItem);
    sqlRestore.Database = databaseName;

    DataConnection dataConnection = new DataConnection();
    ServerConnection connection = new ServerConnection(dataConnection.DataBaseConnection);
    Server sqlServer = new Server(connection);

    Database db = sqlServer.Databases[databaseName];
    sqlRestore.Action = RestoreActionType.Database;
    String dataFileLocation = db.FileGroups[0].Files[0].FileName;
    String logFileLocation = db.LogFiles[0].FileName;
    db = sqlServer.Databases[databaseName];
    sqlServer.ConnectionContext.Disconnect();
    RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);


    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
    sqlRestore.ReplaceDatabase = true;
    sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
    sqlRestore.PercentCompleteNotification = 10;
    sqlRestore.PercentComplete += new PercentCompleteEventHandler(sqlRestore_PercentComplete);
    sqlRestore.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();

上記のコードを使用すると、最初のセットのみが復元されます。

4

1 に答える 1

1

Use all backup sets to restore database with SMOを見ると、

重要なフィールドは、Restore オブジェクトの FileNumber です。デフォルト値は 1 です

Restore.ReadBackupHeaderメソッドを使用して、バックアップセットのリストを取得できます。

リンクからのVBコード

res.Devices.AddDevice("C:\AdventureWorks2012Backup.BAK", DeviceType.File)
dt = res.ReadBackupHeader(srv)

For Each r As DataRow In dt.Rows
   For Each c As DataColumn In dt.Columns
      Console.WriteLine(c.ToString + " = " + r(c).ToString())
   Next
Next

したがって、必要なバックアップセットがわかったら、設定できます

sqlRestore.FileNumber = YOUR_CHOSEN_SET;
于 2012-05-18T14:09:24.473 に答える