我们的测试机器有一个PowerShell清理脚本:
<option value="**<%=(rsNtsC.Fields.Item("NotesCategoryID").Value)%>**">
通常它可以工作,但有时它无法删除数据库,因为似乎有一些打开的连接,并且构建任务无法删除正在使用的数据库。
这似乎也发生在&#34;某些时候&#34;或&#34;随机&#34;。
有关增强脚本的建议吗?
(使用lates TFS 2017 on prem和SQL Server 2014)
答案 0 :(得分:1)
如果您需要在没有警告的情况下切断所有用户,请在删除之前将数据库设置为脱机。
$commandText = @"
exec sp_msforeachdb 'IF ''?'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'')
BEGIN
alter database [?] set offline with rollback immediate;drop database [?];
END';
"@
答案 1 :(得分:0)
如果在这里找到一个脚本:
Drop all databases from server
-- drops all user databases
DECLARE @command nvarchar(max)
SET @command = ''
SELECT @command = @command
+ 'ALTER DATABASE [' + [name] + '] SET single_user with rollback immediate;'+CHAR(13)+CHAR(10)
+ 'DROP DATABASE [' + [name] +'];'+CHAR(13)+CHAR(10)
FROM [master].[sys].[databases]
where [name] not in ( 'master', 'model', 'msdb', 'tempdb');
SELECT @command
EXECUTE sp_executesql @command
它按预期工作,仍然感谢您的帮助
答案 2 :(得分:0)
我建议使用SMO吗?
push-location;
import-module sqlps -disablenamechecking;
pop-location
$serverName = '.';
$server = new-object microsoft.sqlserver.management.smo.server $servername;
foreach ($db in $server.Databases | where {$_.IsSystemObject -eq $false}) {
$server.killDatabase($db.Name);
}