Удалить таблицу перед восстановлением с помощью SMO
Я использую Microsoft.SqlServer.Management.Smo
Чтобы восстановить базу данных prod для dev. Но эта таблица очень большая и занимает много времени
Мой код выглядит так:
public void Restore(string path, string restore_name, RestoreOption restoreOption)
{
try
{
InitConnexion();
if (!_smoServer.Databases.Contains(restore_name))
{
var database = new Database(_smoServer, restore_name);
database.Create();
}
_targetDatabase = _smoServer.Databases[restore_name];
_targetDatabase.RecoveryModel = RecoveryModel.Simple;
_targetDatabase.Alter();
Restore restore = new Restore();
var backupDeviceItem = new BackupDeviceItem(path, DeviceType.File);
restore.Devices.Add(backupDeviceItem);
restore.Database = restore_name;
restore.ReplaceDatabase = true;
restore.NoRecovery = false;
restore.Action = RestoreActionType.Database;
var fileList = restore.ReadFileList(_smoServer);
var dataFile = new RelocateFile();
dataFile.LogicalFileName = fileList.Rows[0][0].ToString();
dataFile.PhysicalFileName = _smoServer.Databases[restore_name].FileGroups[0].Files[0].FileName;
var logFile = new RelocateFile();
logFile.LogicalFileName = fileList.Rows[1][0].ToString();
logFile.PhysicalFileName = _smoServer.Databases[restore_name].LogFiles[0].FileName;
restore.RelocateFiles.Add(dataFile);
restore.RelocateFiles.Add(logFile);
var backupHeaderInfo = restore.ReadBackupHeader(_smoServer);
_smoServer.KillAllProcesses(restore_name);
restore.Complete += Restore_Complete;
restore.PercentComplete += Restore_PercentComplete;
restore.SqlRestoreAsync(_smoServer);
restore.Information += Restore_Information;
restore.Wait();
}
internal void InitConnexion()
{
if (String.IsNullOrWhiteSpace(_sqlAccess.usernameSql))
{
_sqlConnection = new ServerConnection(_sqlAccess.uriSql);
}
else
{
_sqlConnection = new ServerConnection(_sqlAccess.uriSql, _sqlAccess.usernameSql, _sqlAccess.passwordSql);
}
_sqlConnection.StatementTimeout = 6000;
_smoServer = new Server(_sqlConnection);
}
Работает нормально. Но у меня было два стола, которые слишком велики. Как 60Go, 90% базы данных. И мне это не нужно... Я ищу способ удалить эту таблицу из восстановления, чтобы ускорить.
Я могу манипулировать объектом базы данных после восстановления и удалить таблицу... Но я хочу сделать это до восстановления.
Есть ли способ сделать это? Любая команда, которую я не знаю о Smo, которая помогает игнорировать конкретную таблицу?