SQLServerのは、SQLスクリプトを実行PowerShellのバッチを使用して複数のサーバーを達成します

  運用・保守作業では、繰り返し動作の多くが発生します。シングルサーバの場合は反復作業は処理の仕事に定期的に達成することができ、同じサーバに複数のを必要とするために、我々は複数のサーバに同じバッチ処理で一括操作を実行するためのPowerShellを使用することができるのに対し。本論文では、例として、単純なSQLスクリプトの場合には、このプログラムの実施に焦点を当てて、各サーバの特定の実装のためのSQLスクリプトでもつれていないので、中央サーバー上でPowerShellスクリプトを実行し、そのサーバーはすべてを収集することができます情報。定期的にタスクに似たレポートが、あなたはまた、PowerShellのスクリプトスケジュールされたタスクを設定することができます。

  まず、サーバは、テキストファイルServerlist.txtにバッチ操作を実行する必要があります。

  中央サーバー:10.120.100.101

  10.120.100.1

  10.120.100.2

  10.120.100.3

  以下に作成されたファイルとServerlist.txtはすべてのフォルダに配置する必要があります!

 

  書き込みSQLスクリプトの実装要件、およびファイル.SQLを保存します。

  1 - スクリプト(スクリプトファイル名1.Create_DB&Table.sql):各サーバー上のデータを収集するために、データベースとテーブルを作成します

  - デフォルトの設定では、情報を収集するための専用のデータベースを作成するには

  DATABASE [Info_stats] CREATE
   CONTAINMENT = NONE
   PRIMARY ON
  (NAME = N'Info_stats'、FILENAME = N'D:\のSQLServer \データ\ Info_stats.mdfを」、SIZE = 4096キロバイト、FILEGROWTH = 1024キロバイト)
   LOG ON
  (NAME = N'Info_stats_log 'FILENAME = N'D:\のSQLServer \データ\ Info_stats_log.ldf'、SIZE = 1024キロバイト、FILEGROWTH = 10%)
  GO

  - データベースでこの例を使用するには、テーブルの必要性を作成します。

  [Info_stats]使用します。

  表DBNAME作成
  (サーバーのデータ型はnvarchar(100)、
  DBNAMEのNVARCHAR(100))

  2-スクリプト(スクリプトファイル名2.Select_DBName.sql):すべてのユーザのデータベースクエリの名前と、サーバに保存されている[Info_stats] -dbNameテーブル

  (N'master 'N'model'、N'msdb 'N'tempdb'、N'distribution 'N'DWDiagnostics'、N'DWConfiguration'、N'DWQueue」、Nでの名前ではないのsysdatabasesから名前を選択'リソース'、N'ReportServer 'N'ReportServerTempDB')

  3 - スクリプト(Centre.sqlにスクリプトファイル名3.Copy情報):中央のサーバに同期サーバの情報をチェックアウト:

  NOCOUNTに設定します。
  【Info_stats]使用。
  【Info_stats]テーブルを切り捨てる[DBO] [DBNAME]。
  [Info_stats]に挿入[DBO] [DBNAME]。。
  。SELECT * FROM  
  (
  から上位1 *を選択
  OPENDATASOURCE(
           'SQLOLEDB'、
           '= 10.120.100.1データソース;統合セキュリティ= SSPI' 。。)[Info_stats]
           [DBO] 。[DBNAME] Check_DateのDESC)のCによって順序
  組合は
  SELECT * FROM  
  (
  選択トップ1 *から
  OPENDATASOURCE(
           'SQLOLEDB'、
           'データソース= 10.120.100.2;統合セキュリティ= SSPI'
           )[Info_stats] [DBO] [。。。 DBNAME] Check_Date DESC順)のC
  組合
  (
  SELECT * FROM(
  選択トップ1 *から
  OPENDATASOURCE(
           'SQLOLEDB'、
           'データソース= 10.120.100.3;統合セキュリティ= SSPI'
           。。。)[Info_stats] [DBO] Check_DateのDESCによって[DBNAME]順)Z)


  NOCOUNTオフ設定します。
  

  注意:あなたは、中央サーバにOPENDATASOURCEクエリの結果を使用する前に同期させるために、中央のサーバーで「アドホック分散クエリ」オプションを開く必要があります

  

  第2の開始PowerShellスクリプトの準備ができて:

  1.使用時に最初のパフォーマンスのためのPowerShellスクリプトの呼び出し(1.Create_DB&Table.sql)を作成します。

  スクリプト名:CREATE_DB&Table.ps1

  $ PSScriptRoot =分割経路-parent $ MyInvocation.MyCommand.Definition
  $ SERVERLIST = "$ PSScriptRoot \ Serverlist.txt"
  $ CREATE_TABLE = "$ PSScriptRoot \ 1.Create_DB&Table.sql"
  foreachの(GC $ SERVERLISTで$サーバ){
  Invoke- SQLCMD -ServerInstance $サーバ-inputfile $ CREATE_TABLE
  }
  2.创建调用(2.Select_DBName.sql)的PowerShellの脚本、用于收集数据:

  スクリプト名:QueryData.ps1

  スプリットPSScriptRootパス= $ $ -parent MyInvocation.MyCommand.Definition
  $ SERVERLIST = "$ PSScriptRoot \ serverlist.txt"
  $ ITSPCheck = "$ PSScriptRoot \ 2.Select_DBName.sql"
  foreachの(GCで$ $ SERVERLISTサーバー){
  Invoke-サーバー-inputfile $ $ -ServerInstance sqlcmdのITSPCheck
  }
  3.中央のサーバにデータを統合するためのPowerShellスクリプトの呼び出し(Centre.sqlに3.Copy情報)を作成します。

  スクリプト名:IntegrateResult.ps1

  $ PSScriptRoot =分割経路-parent $ MyInvocation.MyCommand.Definition
  "Centre.sqlする$ PSScriptRoot \ 3.Copy情報" $ IntegrateResult =
  $セルフチェック= "$ PSScriptRoot \ 2.Select_DBName.sql"
  を呼び出し、sqlcmdの-ServerInstance $ ENVを:COMPUTERNAME -inputfile $ IntegrateResult
  起動し、sqlcmdの-ServerInstanceの$ ENV:COMPUTERNAME -inputfile $セルフチェック
  4.创建统筹PowerShellの脚本、来按步骤调用以上のPowerShell脚本:

  スクリプト名:ExecPs.ps1

  $ PSScriptRoot =分割経路-parent $ MyInvocation.MyCommand.Definition
  たpowershell.exe "$ PSScriptRoot \ QueryData.ps1"
  たpowershell.exe "$ PSScriptRoot \ IntegrateResult.ps1"

  最初の実行は、マルチを作成するために、データベースとテーブルをステップインします。

  スクリプト名:ExecPs_FirstTime.ps1

  $ PSScriptRoot =分割経路-parent $ MyInvocation.MyCommand.Definition
  たpowershell.exe "$ PSScriptRoot \ CREATE_DB&Table.ps1"
  たpowershell.exe "$ PSScriptRoot \ QueryData.ps1"
  たpowershell.exe "$ PSScriptRoot \ IntegrateResult.ps1"

  

  最初の実行ExecPs_FirstTime.ps1、ExecPs.ps1は、中央サーバに情報を収集することができ、古いデータは、各サーバーノード上に保持されます実行した後に、判決によって収集された最新のデータにセンターサーバ:

  

  

  同様の要件のために、それはまた、本実施形態に係る拡張することができます。右ExecPs.ps1は、非常に便利なすべてのサーバー・ノードに関する情報を取得することができます実行している中央サーバーに!

 

おすすめ

転載: www.cnblogs.com/LC0507/p/11209327.html