Kiểm tra SQL Server bằng Windows PowerShell – Phần 6
Qun Trị Mạng - Phần 1 của loạt bài y đã giới thiệu về kiểm tra đầu tiên trên
SQL Server – các ping một host. Phần 2 là giới thiệu về cách kiểm tra tất c
các dịch vụ của Windows liên quan đến SQL Server, phần 3 là cách kim
tra các thông tin phần cứng và phn mềm, phần 4 là gii thiệu về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ểm tra xem có thể kết nối với SQL Server 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.
Phn 6 này s giới thiệu tiếp cho các bạn cách kiểm tra tất cả các cơ sở dữ liệu
hiện có trong SQL Server instance và truy vn các thuộcnh 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
Gn vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã sau.
. ./checkdatabases.ps1
Lúc y file C:\CheckSQLServer\CheckSQL_Lib.ps1 s gồm pinghost,
checkservices, checkhardware, checkOS, checkHD, checknet, checkinstance,
Checkconfiguration 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
Gn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn 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 cập nhậtc đ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.
Ngun dẫn bản sẽ load các m được liệt kê trong file kch bản và làm cho
hin hữu trong toàn bPowerShell 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 tnhiều kịch
bản khác.
Bước 4
Lúc y chúng tay 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
Bn sẽ nhận được các kết qunhư thể hin 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
------------- ------------- ------------------ ------