2013-11-18 2 views
0

Я пытаюсь проверить сеть, найти и очистить старые базы данных, которые, возможно, были протестированы и забыты.T-SQL - список всех баз данных на всех серверах в сети

Прямо сейчас, я знаю, что могу использовать SQLCMD -L, чтобы увидеть серверы и экземпляры. Я могу использовать exec sp_helpdb для получения имени сервера, имени db, размера, владельца, созданного и состояния, если Management Studio подключен к серверу (серверам).

Оба они сами по себе велики, но им необходимо подключиться к каждому серверу в 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 

ответ

0

Если вы сохраните этот запрос в качестве batch.sql, то вы можете открыть окно Powershell, компакт-диск в каталог, где batch.sql есть, а затем запустить это:

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

Это будет работать sqlcmd -L для вы отфильтровываете строки, которые не являются именами серверов, а затем подключаются к каждому серверу и запускают код T-SQL в batch.sql. Если вам нужно добавить имя пользователя и пароль, вы можете указать -U и -P флаги ко второй команде sqlcmd.

+0

Я должен был упомянуть, PowerShell не является вариантом в этой среде. –

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. 
) 

Я смог использовать это, чтобы закодировать команду. он не решает проблему с несколькими входами, но я буду работать над получением единого входа в auth login для запуска этого процесса.

Благодарим вас за тех, кто просмотрел, и я по-прежнему приветствую любые лучшие варианты для этого процесса! :)