Пожалуйста, позвольте мне объяснить, как мы можем управлять несколькими серверами из центра. на самом деле мне нужно приложение, которое работает на нескольких серверах с той же базой данных. Теперь я хочу центрировать свою базу данных из одного места. пожалуйста, позвольте мне предложить. Разработчики использовали sql server для моего приложения
Одна из функций, которые мне больше всего нравятся в 2008 году, - это центральный сервер управления. CMS знакомит нас с управлением несколькими серверами. Однако он показывает только результаты в SSMS и не сохраняет набор результатов. Чтобы получить набор результатов в таблице SQL Server, вам нужен только удобный сценарий Power Shell. Позвольте мне объяснить этот сценарий на простом примере.
У меня есть экземпляр ISILEFE01 по умолчанию, зарегистрированный как центральный сервер управления, и два экземпляра, зарегистрированные как участники, с именем ISILEFE01\ISIL and ISILEFE01\EFE.
Теперь давайте запустим очень простой запрос, чтобы получить версии всех экземпляров SQL-сервера, зарегистрированных в CMS.
Это все, на что способна CMS. Далее пойдем с Powershell. Просмотрите приведенный ниже сценарий PowerShell:
$CentralManagementServer = “ISILEFE01”
$HistoryDatabase = “PSDatabase”
function ResultInsert($sqlServerVariable, $sqlDatabaseVariable, $EvaluatedServer, $EvaluatedResult)
{
$sqlQueryText = “INSERT INTO dbo.test (servername1,servername2) VALUES(‘$EvaluatedServer’, ‘$EvaluatedResult’)”
write-output $sqlQueryText
Invoke-Sqlcmd -ServerInstance $sqlServerVariable -Database $sqlDatabaseVariable -Query $sqlQueryText
}
$sconn = new-object System.Data.SqlClient.SqlConnection(“server=$CentralManagementServer;Trusted_Connection=true”);
$q = “select name from [msdb].[dbo].[sysmanagement_shared_registered_servers_internal];”
$sconn.Open()
$cmd = new-object System.Data.SqlClient.SqlCommand ($q, $sconn);
$cmd.CommandTimeout = 0;
$dr = $cmd.ExecuteReader();
while ($dr.Read()) {
$ServerName = $dr.GetValue(0);
$sqlQueryText = “select @@version”
$selectResult=Invoke-Sqlcmd -ServerInstance $ServerName -Query $sqlQueryText
[string]$a=$selectResult.column1
ResultInsert $CentralManagementServer $HistoryDatabase $ServerName $a;
}
$dr.Close()
$sconn.Close()
Согласно сценарию, я хотел бы получить результаты в таблице сервера sql в моем экземпляре по умолчанию, ISILEFE01. Я создал базу данных под названием «PSDatabase» и таблицу под названием «test» в моем экземпляре по умолчанию, ISILEFE01.
Важным моментом здесь является то, что имена экземпляров SQL Server, зарегистрированных в CMS, записываются в таблицу с именем «[msdb]. [Dbo]. [Sysmanagement_shared_registered_servers_internal]». Выполнив запрос выбора к этой таблице, я могу получить имена экземпляров sql-сервера, а затем в простом цикле запустить любой запрос T-SQL для всех экземпляров, зарегистрированных в CMS.
Наконец, в моей основной функции я вызываю функцию для вставки значений, которые я получаю, в «тестовую» таблицу в «PSDatabase». Теперь, пожалуйста, проверьте, что вставлено в тестовую таблицу: