Kiểm traSQLServer bằng Windows
PowerShell – Phần 6
Phần 1 của loạt bài này đã giới thiệu về kiểmtra đầu tiên trên SQLServer – các ping một host.
Phần 2 là giới thiệu về cách kiểmtra tất cả các dịch vụ của Windows có liên quan đến SQL
Server, phần 3 là cách kiểmtra các thông tin phần cứng và phần mềm, phần 4 là giới thiệu về
cách thu thập các thông tin về card mạng và ổ đĩa cứng từ máy chủ. Trong phần 5 chúng tôi đã
giới thiệu cách kiểmtra xem có thể kết nối với SQLServer hay không và xem chúng ta có thể
truy vấn một số thuộc tính liên quan đến SQL Server. Phần 6 này sẽ giới thiệu tiếp cho các bạn
cách kiểmtra tất cả các cơ sở dữ liệu hiện có trong SQLServer instance và truy vấn các thuộc
tính cơ sở dữ liệu.
Bước 1
Đánh hoặc copy và pasta đoạn 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
Gắn vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã sau.
. ./checkdatabases.ps1
Lúc này file C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ gồm có pinghost, checkservices,
checkhardware, checkOS, checkHD, checknet, checkinstance, Checkconfiguration và
checkdatabases như thể hiện 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 cập nhật với nguồn dẫn của các kịch bản mới, chẳng hạn
như checkdatabases.ps1.
Bước 3
Gắn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn mã sau.
#Objective: To check various status of SQLServer
#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 SQLServer "
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 SQLServer databases "
Write-host "Checking Database status and size "
Write-host " "
checkdatabases $instancename |format-table
}
Lưu ý: File CheckSQLServer.ps1 sẽ được cập nhật các điều kiện mới và các tham số mới trong
các phần tiếp theo của loạt bài này.
Nguồn dẫn cơ bản sẽ load các hàm được liệt kê trong file kịch bản và làm cho nó hiện hữu trong
toàn bộ PowerShell session. Trong trường hợp này, chúng tôi dấn nguồn một kịch bản, nhưng
kịch bản này lại lấy nguồn từ nhiều kịch bản khác.
Bước 4
Lúc này chúng ta hãy thực thi kịch bản CheckSQLServer.ps1 bằng cách sử dụng
“PowerServer3” với tư cách một đối số như thể hiện bên dưới.
./CheckSQLServer.ps1 PowerServer3 PowerServer3\SQL2008
Bạn sẽ nhận được các kết quả như thể hiện bên dưới (tham khảo 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 thựcthi kịch bản trên máy tính không tồn tại, xem thể hiện bên dưới.
./CheckSQLServer.ps1 TestServer testserver
Các kết quả được thể hiện bên dưới (tham khảo hình 1.1)
Kết quả
Checking SQLServer
Arguments accepted : TestMachine
Pinging the host machine
TestMachine is NOT reachable
Hình 1.1
.
Kiểm tra SQL Server bằng Windows
PowerShell – Phần 6
Phần 1 của loạt bài này đã giới thiệu về kiểm tra đầu tiên trên SQL Server – các ping. CheckSQLServer.ps1 bằng cách sử dụng
“PowerServer3” với tư cách một đối số như thể hiện bên dưới.
./CheckSQLServer.ps1 PowerServer3 PowerServer3 SQL2 008