使用 SQL Server 2008 从 .bak 中分离并恢复具有相同名称的数据库
Detach & Restore Database with same Name from .bak Using SQL Server 2008
我有一个 ASP.NET
网络表单,其中包含三个按钮 Backup、Reset 和 Restore数据库。
当我单击 BackUp 时,它开始备份数据库并创建一个 .bak 文件。 重置 按钮截断所有表格。但是 Restore 数据库将充当撤消操作,即当我单击 Restore 时,它将再次从 .bak 文件恢复相同的数据库。
目前,当我点击恢复时,它说数据库正在使用中,我无法恢复它。为此,我想先分离数据库,然后从 .bak 文件中以相同的名称恢复它。
我的想法是连接到 master
数据库,然后从那里分离我的数据库,然后从 .bak 文件恢复它。但我不确定,这是个好主意还是会奏效。
我使用以下方法恢复数据库,但我想用相同的名称恢复它。
SQLcon.ConnectionString = "Data Source=" + servername + ";Initial Catalog=master;pwd=" + pwd + ";user=" + user + ";"
SQLcon.Open()
Try
SQLCmd = New SqlCommand("Restore database MyDatabaseNew from disk='E:\MyDatabase.bak' WITH MOVE 'MyDatabase_Data' TO 'D:\DATA\MyDatabase .mdf', MOVE 'MyDatabase_Log' TO 'D:\DATA\MyDatabaseLog.ldf',REPLACE,STATS=10", SQLcon)
SQLCmd.CommandTimeout = CInt(CommandTimeout)
SQLCmd.ExecuteNonQuery()
Response.Write("restore database successfully")
我将如何实现这一目标?任何建议将不胜感激。
我在 master 数据库中执行了以下操作并且成功了。我仍然不确定这是否是一个好方法。
SET @str = 'ALTER DATABASE [' + @DBName + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE EXEC master.dbo.sp_detach_db @dbname = ''' + @DBName + ''''
exec (@Str)
Print 'Alter Done'
SET @StrRes = 'Restore database ' + @DBName +' from disk = ''' + @BkPath +''' WITH MOVE ''MyDB_Data'' TO '''+ @ResPathData +''' , MOVE ''MyDB_Log'' TO '''+ @ResPathLog +''' , REPLACE,STATS=10 '
exec (@StrRes)
Print 'Restore Done'
我有一个 ASP.NET
网络表单,其中包含三个按钮 Backup、Reset 和 Restore数据库。
当我单击 BackUp 时,它开始备份数据库并创建一个 .bak 文件。 重置 按钮截断所有表格。但是 Restore 数据库将充当撤消操作,即当我单击 Restore 时,它将再次从 .bak 文件恢复相同的数据库。
目前,当我点击恢复时,它说数据库正在使用中,我无法恢复它。为此,我想先分离数据库,然后从 .bak 文件中以相同的名称恢复它。
我的想法是连接到 master
数据库,然后从那里分离我的数据库,然后从 .bak 文件恢复它。但我不确定,这是个好主意还是会奏效。
我使用以下方法恢复数据库,但我想用相同的名称恢复它。
SQLcon.ConnectionString = "Data Source=" + servername + ";Initial Catalog=master;pwd=" + pwd + ";user=" + user + ";"
SQLcon.Open()
Try
SQLCmd = New SqlCommand("Restore database MyDatabaseNew from disk='E:\MyDatabase.bak' WITH MOVE 'MyDatabase_Data' TO 'D:\DATA\MyDatabase .mdf', MOVE 'MyDatabase_Log' TO 'D:\DATA\MyDatabaseLog.ldf',REPLACE,STATS=10", SQLcon)
SQLCmd.CommandTimeout = CInt(CommandTimeout)
SQLCmd.ExecuteNonQuery()
Response.Write("restore database successfully")
我将如何实现这一目标?任何建议将不胜感激。
我在 master 数据库中执行了以下操作并且成功了。我仍然不确定这是否是一个好方法。
SET @str = 'ALTER DATABASE [' + @DBName + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE EXEC master.dbo.sp_detach_db @dbname = ''' + @DBName + ''''
exec (@Str)
Print 'Alter Done'
SET @StrRes = 'Restore database ' + @DBName +' from disk = ''' + @BkPath +''' WITH MOVE ''MyDB_Data'' TO '''+ @ResPathData +''' , MOVE ''MyDB_Log'' TO '''+ @ResPathLog +''' , REPLACE,STATS=10 '
exec (@StrRes)
Print 'Restore Done'