我正在尝试在 SQL Server 实例上运行此 SQL 脚本,以将测试数据库恢复到实时数据库的较新副本。
RESTORE FILELISTONLY
FROM disk = '\\staging_server\path\to\db_backup.bak'
-- Restore the files for
RESTORE DATABASE Test_DB
FROM disk = '\\staging_server\path\to\db_backup.bak'
WITH replace,
MOVE 'Test_DB' TO 'D:\R2_BIN\Test_DB.mdf',
MOVE 'Test_DB_log' TO 'D:\R2_BIN\Test_DB_log.ldf',
stats = 5
GO
Run Code Online (Sandbox Code Playgroud)
但是,在运行脚本时,我收到以下错误。
消息 3101,级别 16,状态 1,第 5 行
,无法获得独占访问权限,因为数据库正在使用中。
消息 3013,级别 16,状态 1,第 5 行
RESTORE DATABASE 异常终止。
有什么方法可以强制执行此操作,并终止完成它所需的任何连接?我试图关闭任何可能连接到数据库的应用程序,但我根本无法识别一些连接。我的用户名中有几个,但我只打开了一个 SQL Server Management Studio 实例。
无论如何,有没有办法杀死与特定数据库的所有连接?这个实例上运行着相当多的数据库,所以如果我能帮上忙,我不想只是关闭并重新启动实例。
我正在尝试使用一个看起来很糟糕的应用程序,它连接到我指定的 SQL Server 数据库。
如果不使用逗号指定端口,我似乎无法连接到我希望使用的 SQL Server 实例,例如 DBServer\DBInstance,<port_number>
现在,这导致的问题,以及为什么我认为应用程序写得不好,是由于某种原因,应用程序认为端口号是数据库的名称,而服务器\实例名称是DBServer\DBInstance. 我相信它不会期望必须处理这样的端口号。
现在,我以前使用过不需要指定端口号的 SQL Server 实例。我知道这一定是 SQL Server 配置管理器中 TCP/IP 设置下的一些设置,我尝试将端口设置为默认 1433 以及打开动态端口,但这些都不起作用。
我对 SQL Server 还是很陌生,如果有人能指出我正确的方向,我将不胜感激。
编辑
按照 Ste Bov 的回答解决了问题后,我现在也知道为什么应用程序无法处理指定的端口。在内部,应用程序将其数据存储在一个临时的 csv 文件中,并没有费心检查逗号的输入或将其括在引号中,因此当它来到 csv 中的端口时,它认为它是下一个应该的字段是数据库名称。
所以是的,确实是一个写得很糟糕的应用程序!