運用・保守作業では、繰り返し動作の多くが発生します。シングルサーバの場合は反復作業は処理の仕事に定期的に達成することができ、同じサーバに複数のを必要とするために、我々は複数のサーバに同じバッチ処理で一括操作を実行するための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は、非常に便利なすべてのサーバー・ノードに関する情報を取得することができます実行している中央サーバーに!