停止,还原和重新启动MS SQL Server

时间:2018-07-26 08:24:44

标签: java sql-server database

我在本地部署了一个版本,并且可以使用https://localhost:8443/dashboard访问该应用程序。现在,作为我的工作的一部分,我应该备份此应用程序使用的数据库,并将其恢复到以前的状态,因为该应用程序在测试中将数据跨多个表插入。因此,我需要在测试运行之前还原数据库。现在,我可以使用java程序(junit)备份和还原它,但是当服务器运行时问题就来了。它说DB is already in use and can't restore。有没有办法断开应用程序中使用的数据库连接(用户),进行还原,然后再重新连接,这样我就不必关闭服务器并手动重新启动它。

使用与以下类似的命令-

  BACKUP DATABASE [Store] TO DISK = N'"+backuppath+"' WITH NOFORMAT, NOINIT, 
NAME = 'demodb-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10";

RESTORE DATABASE  ["+dbName+"] FROM DISK='"+database_backup_location+"' WITH
 REPLACE, MOVE '"+mdfLogicalName+"' TO 
'"+getPropertyByKey("databse.dbfiles.location")+mdfLogicalName+".mdf', MOVE 
'"+ldfLogicalName+"' TO 
'"+getPropertyByKey("databse.dbfiles.location")+ldfLogicalName+".ldf';

我遇到的错误-

    org.springframework.jdbc.UncategorizedSQLException: StatementCallback;
 uncategorized SQLException for SQL [RESTORE DATABASE ....error code [3101]; 
Exclusive access could not be obtained because the database is in use.; nested 
exception is com.microsoft.sqlserver.jdbc.SQLServerException: Exclusive access 
could not be obtained because the database is in use.

2 个答案:

答案 0 :(得分:1)

  

我已经在使用BACKUP和RESTORE命令。 RESTORE命令   由于正在使用数据库而导致错误。

我已经回答了,您只需要以这种方式将数据库设置为脱机:

alter database myDB set offline with rollback immediate

这样做,您将断开所有用户与数据库的连接,现在您可以创建一个RESTORE

答案 1 :(得分:0)

您需要执行以下步骤:

  1. 备份数据库

    BACKUP DATABASE [存储]到磁盘= N'“ + backuppath +”'与NOFORMAT,NOINIT, NAME ='demodb-full',跳过,NOREWIND,NOUNLOAD,STATS = 10“;

  2. 杀死现有连接

    USE master;

    DECLARE @kill varchar(8000); SET @kill ='';
    SELECT @kill = @kill +'kill'+ CONVERT(varchar(5),spid)+';'
    从master..sysprocesses
    在哪里dbid = db_id('Store')

    EXEC(@kill);

  3. 然后运行还原脚本。