2014-12-27 6 views
1

У меня есть сотни серверов и вы хотите проверить наличие на них баз данных не-системного SQL Server. Они могут быть разнообразными версиями: 2005, 2008, 2012, Express.Как получить имя базы данных SQL Server без входа?

Я не был уверен, были ли имена базы данных сохранены в определенном реестре (хотя я не мог найти его) или файл/имя файла (на диске C:) и мог вытащить информацию таким образом. Я хотел бы иметь возможность сделать это из сценария Powershell, если это возможно, но я могу бросить его в пакет.

ответ

2

Предполагая, что у вас есть привилегии, T-SQL и использование объектов управления SQL Server (SMO) могут быть наилучшим выбором. Ссылки изобилуют запуском T-SQL или использованием SMO от PowerShell, including this one.

Пример использования T-SQL

# Download and dot source Invoke-Sqlcmd2 
# source - https://raw.githubusercontent.com/RamblingCookieMonster/PowerShell/master/Invoke-Sqlcmd2.ps1 
. "\\Path\To\Invoke-Sqlcmd2.ps1" 

#Run sp_databases, among other options, against your SQL servers. 
"Server1", "Server2\NamedInstance" | 
    Invoke-Sqlcmd2 -query "Sp_databases" -AppendServerInstance 

Пример использования SQL SMO

#Download, install components from SQL feature pack: 
    # SQLSysClrTypes, SharedManagementObjects, optionally PowerShellTools 
    # http://www.microsoft.com/en-us/download/details.aspx?id=42295 

#One of several ways to load one of the SMO binaries 
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") 

#Connect to the server with integrated Windows auth 
$Connection = New-Object "Microsoft.SqlServer.Management.Smo.Server" -ArgumentList Server1   

#List the databases 
$Connection.Databases 

#List the names of the databases 
$Connection.Databases | Select -ExpandProperty Name 

Наконец, это звучит, как вы связаны с открытием. Прежде чем искать отдельные базы данных, вы можете рассмотреть возможность поиска экземпляров SQL, которые затем можно было бы расследовать в каждом конкретном случае. Boe Prox написал Get-SQLInstance, который требует только привилегий реестра и будет переплевывать имена экземпляров SQL, версию SQL и другую полезную информацию.

1

Базы данных экземпляра SQL Server не хранятся в реестре или в плоских файлах в любом месте системы. Он хранится в основной базе данных в системных таблицах.

Единственное место, где вы можете получить данные в зависимости от ваших прав доступа к серверу, - через WMI. См. Этот ответ on StackOverflow. Значения в WMI не сохраняются в системе, но SQL Server говорит об этом через интерфейс провайдера, данные по-прежнему поступают из экземпляра SQL Server.

Это действительно ваши два варианта, войдите в сервер и запустите TSQL Query или используйте WMI.

+0

Я исследую это! Я не мог найти это, когда искал. Спасибо. – krmarshall87

Смежные вопросы