我在本地部署了一个版本,并且可以使用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.
答案 0 :(得分:1)
我已经在使用BACKUP和RESTORE命令。 RESTORE命令 由于正在使用数据库而导致错误。
我已经回答了,您只需要以这种方式将数据库设置为脱机:
alter database myDB set offline with rollback immediate
这样做,您将断开所有用户与数据库的连接,现在您可以创建一个RESTORE
答案 1 :(得分:0)
您需要执行以下步骤:
备份数据库
BACKUP DATABASE [存储]到磁盘= N'“ + backuppath +”'与NOFORMAT,NOINIT, NAME ='demodb-full',跳过,NOREWIND,NOUNLOAD,STATS = 10“;
杀死现有连接
USE master;
DECLARE @kill varchar(8000); SET @kill ='';
SELECT @kill = @kill +'kill'+ CONVERT(varchar(5),spid)+';'
从master..sysprocesses
在哪里dbid = db_id('Store')
EXEC(@kill);
然后运行还原脚本。