0

我正在尝试审核网络,以查找和清理可能已经过测试和遗忘的旧数据库。

现在,我知道我可以SQLCMD -L用来查看服务器和实例。如果 Management Studio 连接到服务器,我可以使用 exec sp_helpdb 获取服务器名称、数据库名称、大小、所有者、创建和状态。

这两者本身都很棒,但是它们需要连接到 MGMT Studio 中的每个服务器,然后针对注册的服务器组运行以下查询。

我希望创建以下查询的循环以遍历所有SQLCMD -L找到的数据库,以便我可以发送审核结果进行清理,可能通过 SQLCMS/OSQL,以避免手动连接过程。我可能还必须为他们制定适当的登录帐户,所以如果在这个混乱中可以选择,那也很好(Sa、Win Auth、SQL Auth 等)

如果有人对将其作为自动化过程运行的解决方案有一些建议,将不胜感激。

create table #temp
(
name sysname
,db_size nvarchar(13)
,owner sysname
,dbid smallint
,created smalldatetime--nvarchar(11)
,status nvarchar(600)
,compatibility_level tinyint
)
go
insert into #temp
exec sp_helpdb

ALTER TABLE #temp
DROP COLUMN dbid
ALTER TABLE #temp
DROP COLUMN status
ALTER TABLE #temp
DROP COLUMN compatibility_level


select * from #temp
where name not like'master%'
AND name not like 'model%'
AND name not like 'msdb%'
AND name not like 'ems_master%'
AND name not like 'tempdb%'
AND name not like 'ReportServer%'
AND name not like 'HR'
AND name not like 'EMS_Personnel%'
order by created
drop table #temp 
4

2 回答 2

0
for /f "tokens=*" %%i in ('SQLCMD -L') do (
Echo Working on %%i
SQLCMD -E -S %%i -Q "exec sp_helpdb" -o "C:\Temp\BillieTest\ServerDatabases.csv" -s"," -W -w 999
Echo %%i Processed. 
)

我能够使用它来循环命令。它不能解决多个登录的问题,但我将努力获得一个统一的 Windows 身份验证登录来运行它。

感谢那些观看的人,我仍然欢迎这个过程的任何更好的选择!:)

于 2013-11-19T22:06:13.450 回答
0

如果将该查询另存为batch.sql,则可以打开一个 Powershell 窗口,cd 到所在的目录batch.sql,然后运行以下命令:

sqlcmd -L | ? {$_ -ne "Servers:"} | ? {$_ -ne ""} | % { sqlcmd -S $_ -b -i batch.sql}

这将为sqlcmd -L您运行,过滤掉不是服务器名称的行,然后连接到每个服务器并在batch.sql. 如果您需要添加用户名和密码,您可以在第二个命令中添加-U-P标志。sqlcmd

于 2013-11-19T17:34:54.367 回答