Kim tra SQL Server bng Windows PowerShell – Phn 6
Phn 6 này s gii thiu tiếp cho các bn cách kim tra tt c các
cơ s d liu hin có trong SQL Server instance và truy vn các
thuc tính cơ s d liu.
Bước 1
Đánh hoc copy và pasta đon mã dưới đây vào file
C:\CheckSQLServer\Checkdatabases.ps1.
function checkdatabases(
[string] $servername
)
{
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$DataSet = New-Object System.Data.DataSet
$DataSet2 = New-Object System.Data.DataSet
$DataSet3 = New-Object System.Data.DataSet
$DataSet4 = New-Object System.Data.DataSet
$SqlConnection.ConnectionString =
"Server=$servername;Database=master;Integrated Security=True"
$SqlCmd.CommandText = "select name from master.dbo.sysdatabases"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter.SelectCommand = $SqlCmd
$SqlAdapter.Fill($DataSet)|out-null
$dbs =$DataSet.Tables[0]
#$dbs
foreach ($db in $dbs)
{
#$db.name
$SqlCmd.CommandText = $db.name+"..sp_spaceused "
$SqlCmd.Connection = $SqlConnection
$SqlAdapter.SelectCommand = $SqlCmd
$SqlAdapter.Fill($DataSet2) |out-null
}
$DataSet2.Tables[0]| format-table -autosize
foreach ($db in $dbs)
{
#$db.name
$SqlCmd.CommandText = "
select '"+$db.name+"' as Dbname,
DATABASEPROPERTY('"+$db.name+"','IsInRecovery') as Inrecovery,
DATABASEPROPERTY('"+$db.name+"','IsInLoad') as InLoad,
DATABASEPROPERTY('"+$db.name+"','IsEmergencyMode') as
InEmergency,
DATABASEPROPERTY('"+$db.name+"','IsOffline') as Isoffline,
DATABASEPROPERTY('"+$db.name+"','IsReadOnly') as IsReadonly,
DATABASEPROPERTY('"+$db.name+"','IsSingleUser') as IsSingleuser,
DATABASEPROPERTY('"+$db.name+"','IsSuspect') as IsSuspect,
DATABASEPROPERTY('"+$db.name+"','IsInStandBy') as IsStandby,
DATABASEPROPERTY('"+$db.name+"','Version') as version,
DATABASEPROPERTY('"+$db.name+"','IsTruncLog') as IsTrunclog
"
#$SqlCmd.CommandText
$SqlCmd.Connection = $SqlConnection
$SqlAdapter.SelectCommand = $SqlCmd
$SqlAdapter.Fill($DataSet4) |out-null
}
$DataSet4.Tables[0]| format-table -autosize
$SqlCmd.CommandText = "DBCC SQLPERF(LOGSPACE) WITH NO_INFOMSGS "
$SqlCmd.Connection = $SqlConnection
$SqlAdapter.SelectCommand = $SqlCmd
$SqlAdapter.Fill($DataSet3)|out-null
$DataSet3.Tables[0] | format-table -autosize
$SqlConnection.Close()
}
Bước 2
Gn vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đon mã sau.
. ./checkdatabases.ps1
Lúc này file C:\CheckSQLServer\CheckSQL_Lib.ps1 s gm có pinghost, checkservices,
checkhardware, checkOS, checkHD, checknet, checkinstance, Checkconfiguration và
checkdatabases như th hin bên dưới.
#Source all the functions relate to CheckSQL
. ./PingHost.ps1
. ./checkservices.ps1
. ./checkhardware.ps1
. ./checkOS.ps1
. ./checkHD.ps1
. ./checknet.ps1
. ./checkinstance.ps1
. ./checkconfiguration.ps1
. ./checkdatabases.ps1
Lưu ý: File CheckSQL_Lib.ps1 s được cp nht vi ngun dn ca các kch bn mi, chng hn
như checkdatabases.ps1.
Bước 3
Gn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đon mã sau.
#Objective: To check various status of SQL Server
#Host, instances and databases.
#Author: MAK
#Date Written: June 5, 2008
param (
[string] $Hostname,
[string] $instancename
)
$global:errorvar=0
. ./CheckSQL_Lib.ps1
Write-host "Checking SQL Server....."
Write-host "........................"
Write-host " "
Write-host "Arguments accepted : $Hostname"
write-host "........................"
Write-host "Pinging the host machine"
write-host "........................"
pinghost $Hostname
if ($global:errorvar -ne "host not reachable")
{
Write-host "Checking windows services on the host related to SQL
Server"
write-host
"..........................................................."
checkservices $Hostname
Write-host "Checking hardware Information....."
Write-host ".................................."
checkhardware $Hostname
Write-host "Checking OS Information....."
Write-host "............................."
checkOS $Hostname
Write-host "Checking HDD Information....."
Write-host "............................."
checkHD $Hostname
Write-host "Checking Network Adapter Information....."
Write-host "........................................."
checknet $Hostname
Write-host "Checking Configuration information....."
Write-host "........................................."
checkconfiguration $instancename |format-table
Write-host "Checking Instance property Information....."
Write-host "............................."
checkinstance $instancename |format-table
Write-host "Checking SQL Server databases....."
Write-host "Checking Database status and size....."
Write-host "............................."
checkdatabases $instancename |format-table
}
Lưu ý: File CheckSQLServer.ps1 s được cp nht các điu kin mi và các tham s mi trong
các phn tiếp theo ca lot bài này.
Ngun dn cơ bn s load các hàm được lit kê trong file kch bn và làm cho nó hin hu trong
toàn b PowerShell session. Trong trường hp này, chúng tôi dn ngun mt kch bn, nhưng
kch bn này li ly ngun t nhiu kch bn khác.
Bước 4
Lúc này chúng ta hãy thc thi kch bn CheckSQLServer.ps1 bng cách s dng
“PowerServer3” vi tư cách mt đối s như th hin bên dưới.
./CheckSQLServer.ps1 PowerServer3 PowerServer3\SQL2008
Bn s nhn được các kết qu như th hin bên dưới (tham kho hình 1.0)
Kết qu
database_name database_size unallocated space
------------- ------------- -----------------
master 5.00 MB 1.28 MB
tempdb 8.75 MB 6.70 MB
model 1.75 MB 0.16 MB
msdb 11.00 MB 0.46 MB
ReportServer$SQL2008 9.38 MB 0.55 MB
ReportServer$SQL2008TempDB 3.00 MB 1.02 MB
AdventureWorksDW2008 71.06 MB 0.00 MB
AdventureWorksLT2008 10.31 MB 3.20 MB
AdventureWorks2008 182.06 MB 0.00 MB
Dbname Inrecovery InLoad InEmergency Isoffline IsReadonly
IsSingleuser I
------ ---------- ------ ----------- --------- ----------
------------ -
master 0 0 0 0 0
0
tempdb 0 0 0 0 0
0
model 0 0 0 0 0
0
msdb 0 0 0 0 0
0
ReportServer$SQL2008 0 0 0 0 0
0
ReportServer$SQL2008TempDB 0 0 0 0 0
0
AdventureWorksDW2008 0 0 0 0 0
0
AdventureWorksLT2008 0 0 0 0 0
0
AdventureWorks2008 0 0 0 0 0
0
test 0 0 1 0
0
Database Name Log Size (MB) Log Space Used (%) Status
------------- ------------- ------------------ ------
master 0.9921875 50.3937 0
tempdb 0.7421875 63.68421 0
model 0.4921875 59.52381 0
msdb 0.4921875 61.90476 0
Hình 1.0
Bước 5
Lúc này chúng ta hãy thcthi kch bn trên máy tính không tn ti, xem th hin bên dưới.
./CheckSQLServer.ps1 TestServer testserver
Các kết qu được th hin bên dưới (tham kho hình 1.1)