- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了十几个不同的博客,并通读了 msdn 示例,但它们对我不起作用。
最终我想做的是自动将数据库从我们的生产实例移动到我们的开发实例,或其他方向。
我采取的方法是:
我卡在 1 上了,我不明白为什么。我读过的所有内容都声称这应该有效。
注意:我已将 dbName
设置为我要恢复到的数据库。我还设置了 restore.Database = dbName
,其中 restore
是 smo
中的 Restore
类的一个实例命名空间。
mdf.LogicalFileName = dbName;
mdf.PhysicalFileName = String.Format(@"{0}\{1}.mdf", server.Information.MasterDBPath, dbName);
ldf.LogicalFileName = dbName + "_log";
ldf.PhysicalFileName = String.Format(@"{0}\{1}.ldf", server.Information.MasterDBPath, dbName);
restore.RelocateFiles.Add(mdf);
restore.RelocateFiles.Add(ldf);
restore.SqlRestore(server);
这是我遇到的异常:
The file 'D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.mdf' cannot be overwritten. It is being used by database 'MIQDesignTest2'.
File 'MIQDesign' cannot be restored to 'D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.mdf'. Use WITH MOVE to identify a valid location for the file.
The file 'D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.ldf' cannot be overwritten. It is being used by database 'MIQDesignTest2'.
File 'MIQDesign_log' cannot be restored to 'D:\MSSQL.MIQ_Dev\MSSQL.2\MSSQL\Data\MIQDesign2Detach.ldf'. Use WITH MOVE to identify a valid location for the file.
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
RESTORE DATABASE is terminating abnormally.
为什么要覆盖原来的mdf? RelocateFiles
不是应该指定您希望将其保存到不同 物理文件名吗?
最佳答案
这是有效的。
public class DatabaseManager
{
public Action<int, string> OnSqlBackupPercentComplete;
public Action<int, string> OnSqlRestorePercentComplete;
public Action<SqlError> OnSqlBackupComplete;
public Action<SqlError> OnSqlRestoreComplete;
public bool IsConnected { get; private set; }
private ServerConnection _connection;
public void Connect(string userName, string password, string serverName, bool useInteratedLogin)
{
if (useInteratedLogin)
{
var sqlCon = new SqlConnection(string.Format("Data Source={0}; Integrated Security=True; Connection Timeout=5", serverName));
_connection = new ServerConnection(sqlCon);
_connection.Connect();
IsConnected = true;
}
else
{
_connection = new ServerConnection(serverName, userName, password);
_connection.ConnectTimeout = 5000;
_connection.Connect();
IsConnected = true;
}
}
public void BackupDatabase(string databaseName, string destinationPath)
{
var sqlServer = new Server(_connection);
databaseName = databaseName.Replace("[", "").Replace("]", "");
var sqlBackup = new Backup
{
Action = BackupActionType.Database,
BackupSetDescription = "ArchiveDataBase:" + DateTime.Now.ToShortDateString(),
BackupSetName = "Archive",
Database = databaseName
};
var deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File);
sqlBackup.Initialize = true;
sqlBackup.Checksum = true;
sqlBackup.ContinueAfterError = true;
sqlBackup.Devices.Add(deviceItem);
sqlBackup.Incremental = false;
sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;
sqlBackup.PercentCompleteNotification = 10;
sqlBackup.PercentComplete += (sender, e) => OnSqlBackupPercentComplete(e.Percent, e.Message);
sqlBackup.Complete += (sender, e) => OnSqlBackupComplete(e.Error);
sqlBackup.FormatMedia = false;
sqlBackup.SqlBackup(sqlServer);
}
public DatabaseCollection GetDatabasesList()
{
if (IsConnected)
{
var sqlServer = new Server(_connection);
return sqlServer.Databases;
}
return null;
}
public void RestoreDatabase(string databaseName, string filePath)
{
var sqlServer = new Server(_connection);
databaseName = databaseName.Replace("[", "").Replace("]", "");
var sqlRestore = new Restore();
sqlRestore.PercentCompleteNotification = 10;
sqlRestore.PercentComplete += (sender, e) => OnSqlRestorePercentComplete(e.Percent, e.Message);
sqlRestore.Complete += (sender, e) => OnSqlRestoreComplete(e.Error);
var deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = databaseName;
DataTable dtFileList = sqlRestore.ReadFileList(sqlServer);
int lastIndexOf = dtFileList.Rows[1][1].ToString().LastIndexOf(@"\");
string physicalName = dtFileList.Rows[1][1].ToString().Substring(0, lastIndexOf + 1);
string dbLogicalName = dtFileList.Rows[0][0].ToString();
string dbPhysicalName = physicalName + databaseName + ".mdf";
string logLogicalName = dtFileList.Rows[1][0].ToString();
string logPhysicalName = physicalName + databaseName + "_log.ldf";
sqlRestore.RelocateFiles.Add(new RelocateFile(dbLogicalName, dbPhysicalName));
sqlRestore.RelocateFiles.Add(new RelocateFile(logLogicalName, logPhysicalName));
sqlServer.KillAllProcesses(sqlRestore.Database);
Database db = sqlServer.Databases[databaseName];
if (db != null)
{
db.DatabaseOptions.UserAccess = DatabaseUserAccess.Single;
db.Alter(TerminationClause.RollbackTransactionsImmediately);
sqlServer.DetachDatabase(sqlRestore.Database, false);
}
sqlRestore.Action = RestoreActionType.Database;
sqlRestore.ReplaceDatabase = true;
sqlRestore.SqlRestore(sqlServer);
db = sqlServer.Databases[databaseName];
db.SetOnline();
sqlServer.Refresh();
db.DatabaseOptions.UserAccess = DatabaseUserAccess.Multiple;
}
public void Disconnect()
{
if (IsConnected)
_connection.Disconnect();
IsConnected = false;
}
}
关于SMO:恢复到不同的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627145/
我正在尝试使用 SMO 通过 Powershell 恢复数据库,但是当我尝试定义和使用服务器对象时,出现以下错误: Cannot convert argument "srv", with value:
我已经阅读了十几个不同的博客,并通读了 msdn 示例,但它们对我不起作用。 最终我想做的是自动将数据库从我们的生产实例移动到我们的开发实例,或其他方向。 我采取的方法是: 备份/恢复到临时数据库 分
我使用这个 SMO 来恢复备份: Server myServer = new Server(@"PC-1\Instance1"); Restore restoreDB
我已经编写了一个 C# 代码来使用 SMO 在两个远程服务器之间传输表,我想知道的是无论如何都可以检查目标服务器中是否已经存在具有确切模式、列名、数据类型的表,约束和一切。这样我就不必每次都删除现有表
我正在考虑使用 C# SMO 库以编程方式创建当前数据库结构(不含数据)的副本。我已经成功地移动了模式、表、存储过程和外部资源,但是我很难这样做。我正在考虑使用这样提供的表对象: TableColle
我在 C# 中使用 SMO 从数据库生成整个模式的脚本。 这是我使用的代码: // Instanciando Server srv = new Server(con); // Refere
我正在做一个使用 smo 对象(服务器、数据库)的 C# 项目。 我包括了 using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlS
我有一个集成测试,它创建了一个 Microsoft.SqlServer.Management.Smo.Database 类型的数据库: var defaultConnectionConnectionS
我使用 SQL Server SMO 将 .bak 恢复到新数据库,但没有成功。 sql server是2012,smo object版本来自最新的sdk version 11.0 文件 .bak 是
我正在向数据库中插入大量行并尝试在其上建立主键。如果我创建表并立即建立一个键,即使使用 SQLBulkCopy 命令,插入数据也需要 10 倍的时间。所以这不是一个可行的选择。我现在要做的是插入数据,
WEKA 的 SMO 与 LIBSVM 不同吗? 我问是因为它在 LIBSVM 的 site 上说那:it implements an SMO-type algorithm proposed in t
我使用 vb.net 备份 sql '05 - '08 数据库。它在较小的数据库上效果很好。但当涉及大型数据库时,它会在 30% 或 40% 时失败并出现错误:备份或恢复已中止。 Di
我在尝试恢复 SQL Server 2008 R2 数据库时遇到错误: Restore failed for Server 'KIMO-PC'. 使用的代码: Server myServer
我使用 SQL Server 已经有几年了。我听说过SMO,但我对此一无所知。使用它有什么好处?我应该在我的 SQL Server 项目(主要是数据仓库开发)中学习并开始使用 SMO 吗?为什么? 最
如何与 SMO 服务器连接共享交易?共享连接就这么简单 var connection = new SqlConnection(); var serverConnection = new ServerC
如何使用 SMO 重命名物理 .mdf .ndf .ldf 文件。 This这篇文章很有帮助,但我需要使用 C# SMO 对象。 使用 SMO 服务器对象,我可以检索数据库,然后获取对数据文件对象的访
我有一个系统可以在两个具有相同模式的数据库之间传输数据(用于开发目的)。 SMO dependency walker 除了触发器外工作得很好。如果我得到一个依赖项列表,我不关心触发器是否引入了对另一个
我能够使用 SMO 构建类似于 SSMS 中的“查找备份文件”对话框的 TreeView 。我可以列出服务器上的文件夹,如果有备份设备,它们也会被列出。我似乎无法复制的一件事是如何浏览备份文件以恢复最
我已将 Microsoft.SqlServer.Management.Smo.dll 引用添加到我的项目中,但它仍然给我以下错误。引用的dll在C:\Program Files\Microsoft S
我是 Weka 的新手。我想在 WEKA 中使用顺序最小优化。谁能告诉我如何继续?这是我的 Java 代码,但它不起作用: public class SVMTest { public void tes
我是一名优秀的程序员,十分优秀!