停止、恢复并重新启动MS SQL服务器



我在本地部署了一个构建,可以使用https://localhost:8443/dashboard访问应用程序。现在,作为我的junits的一部分,我应该备份该应用程序使用的数据库,并将其恢复到其早期状态,因为作为测试的一部分该应用程序在多个表中插入一些数据。因此,我需要在测试运行之前恢复数据库。现在,我可以使用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.

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

我已经回答了,你只需要通过以下方式将数据库设置为离线:

alter database myDB set offline with rollback immediate

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

您需要执行以下步骤:

  1. 备份数据库

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

  2. 终止现有连接

    USE master;

    声明@kill varchar(8000(;SET@kill=''
    SELECT@kill=@kill+'kill'+CONVERT(varchar(5(,spid(+';'
    FROM master。。sysprocesses
    WHERE dbid=db_id("存储"(

    EXEC(@kill(;

  3. 然后运行恢复脚本。

最新更新