Назад | Перейти на главную страницу

как мы можем управлять несколькими серверами из центра

Пожалуйста, позвольте мне объяснить, как мы можем управлять несколькими серверами из центра. на самом деле мне нужно приложение, которое работает на нескольких серверах с той же базой данных. Теперь я хочу центрировать свою базу данных из одного места. пожалуйста, позвольте мне предложить. Разработчики использовали 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». Теперь, пожалуйста, проверьте, что вставлено в тестовую таблицу: