|
|
Cộng đồng tin học |
Chủ nhật, 2024-12-22, 7:14 AM |
|
|
Khung tán gẫu |
Xóm 'bà Tám' |
|
CHUYÊN TRANG GAME ONLINE GIẢI TRÍ
Kiểm tra SQL Server bằng Windows PowerShell
| |
Hung@info | Date: Thứ 2, 2009-05-25, 2:35 PM | Bài viết # 1 |
Trung úy
Nhóm: Quản trị viên
Bài viết: 994
Uy tín: 10
Hiện tại: Offline
| Kiểm tra SQL Server bằng Windows PowerShell – Phần 1 Loạt bài này chúng tôi sẽ giới thiệu cho các bạn về các phương pháp và các thủ tục để kiểm tra trạng thái hiện hành của hệ điều hành, các trường hợp của SQL Server và cơ sở dữ liệu,… bằng Windows PowerShell. Thay vì sử dụng Vbscript, các file bat, hay các thực thi sql client,… chúng tôi sẽ giới thiệu cho các bạn về sức mạnh bên của Windows PowerShell trong vấn đề kiểm tra trạng thái của SQL Servers. Các điều kiện tiên quyết Cài đặt .Net 2.0 Trên máy khách, bạn cần cài đặt Windows PowerShell 1.0. Đăng nhập của bạn cần có quyền tạo các thư mục và file trong máy khách. Trước khi đi vào kiểm tra thực SQL Server, chúng tôi muốn giới thiệu một chút nền tảng và xây dựng các thư mục, thư viện,… Phần cuối của loạt bài này, sẽ có một thư viện Powershell với nhiều hàm được dùng làm nguồn cho bất kỳ kịch bản PowerShell nào. Một , nhiều hoặc tất cả các hàm này đều có thể được gọi từ bất kỳ kịch bản PowerShell nào khi thư viện được dùng làm nguồn. Bước 1 Khởi chạy Windows PowerShell bằng cách thực thi lệnh bên dưới (Hình 1.0) %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe Hình 1.0: Khởi chạy PowerShell Bước 2 Hãy tạo một thư mục bằng cách sử dụng lệnh PowerShell bên dưới. Thư mục này sẽ được dùng chuyên dụng cho các kịch bản, các thư viện và các hàm của PowerShell có liên quan đến việc kiểm tra SQL Server. Thực thi lệnh được cho bên dưới (xem hình 1.1) New-Item -Path C:\ -Name CheckSQLServer -Type directory Bạn có thể thấy kết quả của việc thực hiện lệnh bên dưới. Về cơ bản, thư mục CheckSQLServer đã được tạo thành công. Hình 1.1 Tạo thư mục mới Bước 3 Hãy điều hướng đến thư mục CheckSQLServer và sau đó tạo các file khác bằng lệnh PowerShell sau (xem trong hình 1.3) set-location C:\CheckSQLServer Notepad CheckSQL_Lib.ps1 Notepad CheckSQLServer.ps1 Notepad Pinghost.ps1 Bạn có thể thấy rằng vị trí được thay đổi thành C:\CheckSQLServer và cũng đã mở ba cửa sổ notepad để có thể soạn thảo các file CheckSQL_Lib.sql, CheckSQLServer.Ps1 và PingHost.ps1. Hình 1.2: Tạo kịch bản và thư vịện PowerShell Lưu ý: Notepad là một trình soạn thảo mà chúng tôi sử dụng cho việc soạn thảo các kịch bản PowerShell. Bạn hòan toàn có thể tùy chọn các trình soạn thảo khác ưa thích đối với cá nhân bạn. Bước 4 Đánh hoặc copy/paste đoạn mã sau vào trình soạn thảo notepad đã mở PingHost.ps1 như dưới đây (xem hình 1.3) Function Pinghost ([string] $Hostname ) { $status=get-wmiobject win32_pingstatus -Filter "Address='$Hostname'" | Select-Object statuscode if($status.statuscode -eq 0) {write-host $Hostname is REACHABLE -background "GREEN" -foreground "BLACk"} else {write-host $Hostname is NOT reachable -background "RED" -foreground "BLACk"} } Hình 1.3: File kịch bản PingHost.ps1 Lưu file Pinghost.ps1 và thoát khỏi notepad. Bước 5 Đánh hoặc copy/paste đoạn mã sau vào trình soạn thảo notepad đã mở CheckSQL_Lib.ps1 như dưới đây (xem hình 1.4) #Source all the functions relate to CheckSQL . ./PingHost.ps1 Hình 1.4: CheckSQL_Lib.ps1 Lưu file CheckSQL_Lib.ps1 và thoát khỏi notepad. Lưu ý: CheckSQL_Lib.ps1 này sẽ được cập nhật với nguồn của các kịch bản mới như PingHost.PS1 Về cơ bản nguồ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ộ session của PowerShell. Bước 6 Đánh hoặc copy/paste đoạn mã sau vào trình soạn thảo notepad đã mở CheckSQLServer.ps1 như dưới đây (xem hình 1.5) #Objective: To check various status of SQL Server #Host, instances and databases. #Author: MAK #Date Written: June 5, 2008 param ( [string] $Hostname ) . ./CheckSQL_Lib.ps1 PingHost $Hostname Hình 1.5: CheckSQLServer.ps1 Lưu file CheckSQLServer.ps1 và thoát khỏi notepad Lưu ý: File CheckSQLServer.ps1 này sẽ được cập nhật các điều kiện mới và các tham số trong các phần sau của loạt bài này. Nguồn sẽ load các chức năng được liệt kê trong file kịch bản và làm cho nó hiện hữu toàn bộ session PowerShell. Trong trường hợp này, chúng tôi sẽ lấy nguồn một kịch bản có sử dụng nhiều nguồn từ các kịch bản khác. Bước 7 Thực thi CheckSQLServer.ps1 như dưới đây (xem hình 1.6) ./CheckSQLServer.ps1 PowerMachine ./CheckSQLServer.ps1 TestServer Chúng ta sẽ thấy các kết quả, dựa vào đó bạn sẽ biết được máy tính đó có khả năng ping hay không. Nếu máy đó có thể thăm dò bằng cách ping, thì thông báo sẽ được đánh dấu màu xanh còn không sẽ được đánh dấu màu đỏ. Hình 1.6: Ping máy chủ Mặc định, các kịch bản PowerShell không thể được thực thi trên máy nếu bạn sử dụng nó lần đầu tiên. Nếu bạn gặp phải thông báo lỗi dưới đây như thể hiện trong hình 1.7, hãy thực thi lệnh để kích hoạt sự thực thi kịch bản không bị hạn chế của PowerShell. Hình 1.7: Lỗi trong quá trình thực thi kịch bản PowerShell set-executionpolicy unrestricted Lưu ý: Bạn không phải thực thi lệnh trên nhiều lần mà chỉ thực thi một lần. Bạn có thể kiểm tra chính sách thực thi của cấu hình PowerShell hiện hành bằng cách thực thi lệnh dưới đây (xem thể hiện trong hình 1.8) get-executionpolicy Hình 1.8: Chính sách thực thi Kết luận Đây là phần đầu tiên của loạt bài này. Phần đầu tiên này đã giới thiệu được cho các bạn về cách tạo một kịch bản PowerShell để ping đến một máy chủ. Trong đó nó cũng giới thiệu cách sử dụng nguồn hàm PowerShell và cách gọi hàm. Trong các phần sau của loạt bài này, chúng tôi sẽ tiếp tục đi sâu hơn nữa về các tính năng khác của Windows PowerShell trong việc kiểmt ra trạng thái của SQL Server.
--== Cộng đồng tin học ==--
|
|
| |
Hung@info | Date: Thứ 2, 2009-05-25, 2:44 PM | Bài viết # 2 |
Trung úy
Nhóm: Quản trị viên
Bài viết: 994
Uy tín: 10
Hiện tại: Offline
| Kiểm tra SQL Server bằng Windows PowerShell – Phần 2 Phần 1 của loạt bài này chúng tôi đã giới thiệu cho các bạn cách ping đến host, đó chính là kiểm tra đầu tiên trên SQL Server. Kiểm tra quan trọng thứ hai ở mức hệ điều hành là xem xem tất cả các dịch vụ Windows có liên quan đến SQL Server trên host hiện có đang hoạt động hay không và báo cáo về trạng thái của hệ thống. Phần 2 này sẽ giới thiệu cho các bạn cách truy cập vào dịch vụ Windows trên máy từ xa bằng cách sử dụng Windows PowerShell và WMI-Object. Bước 1 Đánh hoặc copy và paste đoạn mã dưới đây vào file C:\CheckSQLServer\CheckServices.ps1. # Function to check windows services related to SQL Server Function checkservices ([string] $Hostname ) { $Services=get-wmiobject -class win32_service http://www.databasejournal.com/img/return.gif-computername $hostname| http://www.databasejournal.com/img/return.gifwhere {$_.name -like '*SQL*'}| select-object Name,state,status,Started,Startname,Description foreach ( $service in $Services) { if($service.state -ne "Running" -or $service.status -ne "OK" http://www.databasejournal.com/img/return.gif-or $service.started -ne "True" ) { $message="Host="+$Hostname+" " +$Service.Name +" http://www.databasejournal.com/img/return.gif "" +$Service.state +" +$Service.status +" http://www.databasejournal.com/img/return.gif " +$Service.Started +" " +$Service.Startname write-host $message -background "RED" -foreground "BLACk" } else { $message="Host="+$Hostname+" " +$Service.Name +" http://www.databasejournal.com/img/return.gif " +$Service.state +" " +$Service.status +" http://www.databasejournal.com/img/return.gif " +$Service.Started +" " +$Service.Startname write-host $message -background "GREEN" -foreground "BLACk" } } } Bước 2 Bổ sung thêm vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã dưới đây: . ./checkservices.ps1 Lúc này C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ có cả pinghost và dịch vụ kiểm tra (checkservices) như thể hiện bên dưới. #Source all the functions relate to CheckSQL . ./PingHost.ps1 . ./checkservices.ps1 Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật nguồn của các kịch bản bản mới giống như checkservices.PS1 Bước 3 Gắn vào file C:\CheckSQLServer\CheckSQLServer.ps1 bằng cách copy và paste đoạn mã dưới đây. checkservices $Hostname Lúc này file C:\CheckSQLServer\CheckSQLServer.ps1 sẽ có cả pinghost và checkservices như thể hiện bên dưới. Chúng ta đã thêm vào một số tuyên bố để hiện toàn bộ quá trình. #Objective: To check various status of SQL Server #Host, instances and databases. #Author: MAK #Date Written: June 5, 2008 param ( [string] $Hostname ) . ./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 Write-host "Checking windows services on the host related to SQL Server" write-host "..........................................................." checkservices $Hostname Lưu ý: CheckSQLServer.ps1 này sẽ được cập nhật các điều kiện mới và cũng như các tham số trong các cài đặt sau của loạt bài này. Nguồn dẫn cơ bản load các chức năng đượ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 ta đang dẫn nguồn cho một kịch bản. Bước 4 Hãy thực thi kịch bản CheckSQLServer.ps1 bằng việc chuyển host “Powerpc” như một đối số, xem thể hiện bên dưới. ./CheckSQLServer.ps1 PowerPC Bạn sẽ có được các kết quả như thể hiện bên dưới (xem hình 1.0) Checking SQL Server..... ........................ Arguments accepted : PowerPC ........................ Pinging the host machine ........................ PowerPC is REACHABLE Checking windows services on the host related to SQL Server ........................................................... Host=PowerPC msftesql$SQL2008 Stopped OK False .\mak Host=PowerPC MSSQL$NY0QD1 Running OK True .\mak Host=PowerPC MSSQL$SQL2008 Stopped OK False .\mak Host=PowerPC MSSQLServerADHelper100 Stopped OK False NT AUTHORITY\NETWORK SERVICE Host=PowerPC SQLAgent$NY0QD1 Stopped OK False .\mak Host=PowerPC SQLAgent$SQL2008 Stopped OK False .\mak Host=PowerPC SQLBrowser Stopped OK False NT AUTHORITY\LOCAL SERVICE Host=PowerPC SQLWriter Running OK True LocalSystem Hình 1.0 Từ kết quả bạn có thể thấy được rằng bất kỳ SQL Server nào có liên quan tới dịch vụ đều không được khởi tạo hoặc được đánh dấu trạng thái “OK” màu đỏ và tất cả các dịch vụ liên quan đến SQL Server đang hoạt động được đánh dấu màu xanh. Bước 5 Chúng ta hãy thực thi kịch bản trên máy tính không tồn tại như thể hiện bên dưới. ./CheckSQLServer.ps1 TestMachine Khi đó bạn sẽ nhận được kết quả như thể hiện dưới đây (xem hình 1.1) Kết quả Checking SQL Server..... ........................ Arguments accepted : TestMachine ........................ Pinging the host machine ........................ TestMachine is NOT reachable Checking windows services on the host related to SQL Server ........................................................... Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) At C:\checksqlserver\checkservices.ps1:5 char:24 + $Services=get-wmiobject <<<< -class win32_service -computername $hostname| where {$_.name -like '*SQL*'}| select-obj ect Name,state,status,Started,Startname,Description Host=TestMachine Hình 1.1 Nếu bạn bắt gặp lỗi “Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)” thì nguyên nhân có thể là một số lý do dưới đây: *Host không hiện hữu (ví dụ: bước 5) *Tường lửa khóa chặn tính năng quản trị từ xa Nếu bạn muốn vô hiệu hóa tường lửa, hãy thực thi lệnh dưới đây tại nhắc lệnh: netsh.exe firewall set service type=REMOTEADMIN mode=ENABLE scope=ALL Nếu muốn giữ các thiết lập tường lửa và chỉ cho phép các cổng được yêu cầu đối với quản trị từ xa, hãy thực thi đoạn mã dưới đây: netsh firewall add portopening protocol=tcp port=135 name=DCOM_TCP135 *Dịch vụ Windows Management Instrumentation không hoạt động Thiết lập dịch vụ WMI chạy tự động và sau đó khởi tạo dịch vụ *Add người dùng hiện hành vào DCOM users. Kết luận Phần thứ hai này chúng ta đã được giới thiệu về cách truy cập dịch vụ Windows Service trên máy từ xa bằng Windows PowerShell và WMI-Object. Trong phần tiếp theo của loạt bài, chúng tôi sẽ bổ sung thêm các kiểm tra khác để chúng ta không phải thực hiện tất cả các kiểm tra nếu ping bị thất bại. Thêm vào đó chúng tôi sẽ giới thiệu cách capture một số thông tin phần cứng và hệ điều hành.
--== Cộng đồng tin học ==--
|
|
| |
Hung@info | Date: Thứ 2, 2009-05-25, 2:53 PM | Bài viết # 3 |
Trung úy
Nhóm: Quản trị viên
Bài viết: 994
Uy tín: 10
Hiện tại: Offline
| Kiểm tra SQL Server bằng Windows PowerShell – Phần 3 Phần 1 của loạt bài này đã giới thiệu cho các bạn kiểm tra đầu tiên về SQL Server—cách ping một host. Trong 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 có liên quan với SQL Server. Trong phần 3 này chúng tôi sẽ giới thiệu về cách tìm một số thông tin về phần cứng và hệ điều hành từ máy host. Bước 1 Đánh hoặc Copy và paste đoạn mã bên dưới vào file C:\CheckSQLServer\Checkhardware.ps1. #Function to check Hardware information from a host Function checkhardware([string] $Hostname ) { $computer=get-wmiobject -class win32_computersystem -computername $hostname -errorvariable errorvar $errorvar.size if (-not $errorvar) { $message="Host="+$Hostname write-host $message -background "GREEN" -foreground "BLACk" $message="Description=" +$computer.Description write-host $message -background "GREEN" -foreground "BLACk" $message="NumberOfLogicalProcessors="+ $computer.NumberOfLogicalProcessors write-host $message -background "GREEN" -foreground "BLACk" $message="NumberOfProcessors="+ $computer.NumberOfProcessors write-host $message -background "GREEN" -foreground "BLACk" $message="TotalPhysicalMemory=" +$computer.TotalPhysicalMemory write-host $message -background "GREEN" -foreground "BLACk" $message="Model=" +$computer.Model write-host $message -background "GREEN" -foreground "BLACk" $message="Manufacturer=" +$computer.Manufacturer write-host $message -background "GREEN" -foreground "BLACk" $message="PartOfDomain="+ $computer.PartOfDomain write-host $message -background "GREEN" -foreground "BLACk" $message="CurrentTimeZone=" +$computer.CurrentTimeZone write-host $message -background "GREEN" -foreground "BLACk" $message="DaylightInEffect="+$computer.DaylightInEffect write-host $message -background "GREEN" -foreground "BLACk" } } Bước 2 Đánh hoặc Copy và paste đoạn mã bên dưới vào file C:\CheckSQLServer\CheckOS.ps1. #Function to check the OS information on the host machine Function checkOS([string] $Hostname ) { $os=get-wmiobject -class win32_operatingsystem -computername $hostname -errorvariable errorvar if (-not $errorvar) { $message= "OSArchitecture="+$os.OSArchitecture write-host $message -background "GREEN" -foreground "BLACk" $message= "OSLanguage="+$os.OSLanguage write-host $message -background "GREEN" -foreground "BLACk" $message= "OSProductSuite="+$os.OSProductSuite write-host $message -background "GREEN" -foreground "BLACk" $message= "OSType="+$os.OSType write-host $message -background "GREEN" -foreground "BLACk" $message= "BuildNumber="+$os.BuildNumber write-host $message -background "GREEN" -foreground "BLACk" $message= "BuildType="+$os.BuildType write-host $message -background "GREEN" -foreground "BLACk" $message= "Version="+$os.Version write-host $message -background "GREEN" -foreground "BLACk" $message= "WindowsDirectory="+$os.WindowsDirectory write-host $message -background "GREEN" -foreground "BLACk" $message= "PlusVersionNumber="+$os.PlusVersionNumber write-host $message -background "GREEN" -foreground "BLACk" $message= "FreePhysicalMemory="+$os.FreePhysicalMemory write-host $message -background "GREEN" -foreground "BLACk" $message= "FreeSpaceInPagingFiles="+$os.FreeSpaceInPagingFiles write-host $message -background "GREEN" -foreground "BLACk" $message= "FreeVirtualMemory="+$os.FreeVirtualMemory write-host $message -background "GREEN" -foreground "BLACk" $message= "PAEEnabled="+$os.PAEEnabled write-host $message -background "GREEN" -foreground "BLACk" } } Bước 3 Gắn thêm vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã bên dưới. . ./checkhardware.ps1 . ./checkOS.ps1 Lúc này file C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ có pinghost, checkservices, checkhardware và checkOS như thể hiện bên dưới. #Source all the functions relate to CheckSQL . ./PingHost.ps1 . ./checkservices.ps1 . ./checkhardware.ps1 . ./checkOS.ps1 Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật từ các kịch bản mới như checkhardware.ps1 và checkOS.ps1 Bước 4 Gắn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn mã dưới đây. checkhardware $Hostname checkOS $Hostname Lúc này file C:\CheckSQLServer\CheckSQLServer.ps1 sẽ có cả checkhardware và checkOS như bên dưới, Chúng tôi đã thêm môt tuyên bố write-host để hiện toàn bộ quá trình. #Objective: To check various status of SQL Server #Host, instances and databases. #Author: MAK #Date Written: June 5, 2008 param ( [string] $Hostname ) . ./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 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 Lưu ý: File CheckSQLServer.ps1 này sẽ được cập nhật các điều kiện và các tham số mới trong các phần sau của loạt bài. Nguồn dẫ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, kịch bản này sẽ lại lấy nguồn từ nhiều kịch bản khác. Bước 5 Lúc này chúng ta hãy thực thi kịch bản, CheckSQLServer.ps1 bằng cách passing “Powerpc” host với tư cách một đối số như thể hiện bên dưới. ./CheckSQLServer.ps1 PowerServer2 Khi đó kết quả cho ra sẽ như sau (tham khảo hình 1.0) Checking SQL Server..... ........................ Arguments accepted : PowerServer2 ........................ Pinging the host machine ........................ PowerServer2 is REACHABLE Checking windows services on the host related to SQL Server ........................................................... Host=PowerServer2 MSSQLSERVER Running OK True .\Administrator Host=PowerServer2 MSSQLServerADHelper100 Stopped OK False NT AUTHORITY\NETWORK SERVICE Host=PowerServer2 MSSQLServerOLAPService Stopped OK False .\Administrator Host=PowerServer2 SQLBrowser Stopped OK False NT AUTHORITY\LOCAL SERVICE Host=PowerServer2 SQLSERVERAGENT Stopped OK False .\Administrator Host=PowerServer2 SQLWriter Stopped OK False LocalSystem Checking hardware Information..... ........................ Host=PowerServer2 Description=AT/AT COMPATIBLE NumberOfLogicalProcessors=2 NumberOfProcessors=1 TotalPhysicalMemory=2145738752 Model=OptiPlex GX270 Manufacturer=Dell Computer Corporation PartOfDomain=True CurrentTimeZone=-240 DaylightInEffect=True Checking OS Information..... ........................ OSArchitecture=32-bit OSLanguage=1033 OSProductSuite=274 OSType=18 BuildNumber=6001 BuildTy pe=Multiprocessor Free Version=6.0.6001 WindowsDirectory=C:\Windows PlusVersionNumber= FreePhysicalMemory=1511144 FreeSpaceInPagingFiles=2402648 FreeVir tualMemory=3966452 PAEEnabled=False Hình 1.0 Từ kết quả nhận được, bạn có thể thấy được các thông tin về phần cứng và hệ điều hành. Bước 6 Hãy thực thi kịch bản trên máy không tồn tại như dưới đây. ./CheckSQLServer.ps1 TestMachine Khi đó kết quả nhận được sẽ như sau (xem hình 1.1) Kết quả Checking SQL Server..... ........................ Arguments accepted : TestMachine ........................ Pinging the host machine ........................ TestMachine is NOT reachable Checking windows services on the host related to SQL Server ........................................................... Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) At C:\checksqlserver\checkservices.ps1:5 char:24 + $Services=get-wmiobject <<<< -class win32_service -computername $hostname| where {$_.name -like '*SQL*'}| select-obj ect Name,state,status,Started,Startname,Description Host=TestMachine Checking hardware Information..... ........................ Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) At C:\checksqlserver\checkhardware.ps1:5 char:24 + $computer=get-wmiobject <<<< -class win32_computersystem -computername $hostname -errorvariable errorvar Checking OS Information..... ........................ Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) At C:\checksqlserver\checkOS.ps1:5 char:18 + $os=get-wmiobject <<<< -class win32_operatingsystem -computername $hostname -errorvariable errorvar Hình 1.1 Bước 7 Chúng ta không phải tiếp tục với checkservices, checkhardware và checkos nếu ping bị thất bại. Chính vì vậy hãy cập nhật pinghost.ps1 như thể hiện bên dưới. Function Pinghost ([string] $Hostname ) { $status=get-wmiobject win32_pingstatus -Filter "Address='$Hostname'" | Select-Object statuscode if($status.statuscode -eq 0) { write-host $Hostname is REACHABLE -background "GREEN" -foreground "BLACk" } else { $global:errorvar="host not reachable" write-host $Hostname is NOT reachable -background "RED" -foreground "BLACk" } } Hãy cập nhật checksqlserver.ps1 như thể hiện bên dưới. #Objective: To check various status of SQL Server #Host, instances and databases. #Author: MAK #Date Written: June 5, 2008 param ( [string] $Hostname ) $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 } Lúc này hãy thực thi kịch bản bằng cách passing tên máy “testmachine”, tên thực sự không tồn tại với tư cách một đối số. ./CheckSQLServer.ps1 TestMachine Kết quả Checking SQL Server..... ........................ Arguments accepted : TestMachine ........................ Pinging the host machine ........................ TestMachine is NOT reachable Lưu ý bạn có thể download các đọan mã mới nhất trong phần ba Tại đây. Kết luận Đây là phần thứ ba của loạt bài này. Trong phần thứ ba này chúng tôi đã giới thiệu được cho các bạn cách truy cập các thông tin phần cứng và hệ điều hành bằng Windows PowerShell và WMI-Object. Trong phần tiếp theo, chúng tôi sẽ bổ sung thêm một số kiểm tra khác và giới thiệu cách capture một số thông tin phần cứng và hệ điều hành.
--== Cộng đồng tin học ==--
|
|
| |
Hung@info | Date: Thứ 2, 2009-05-25, 3:10 PM | Bài viết # 4 |
Trung úy
Nhóm: Quản trị viên
Bài viết: 994
Uy tín: 10
Hiện tại: Offline
| Kiểm tra SQL Server bằng Windows PowerShell – Phần 4 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 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 có liên quan đến SQL Server và phần ba là cách kiểm tra các thông tin phần cứng và phần mềm. Trong phần tiếp theo này, chúng tôi sẽ giới thiệu cho các bạn các thu thập các thông tin về card mạng và ổ đĩa cứng từ máy chủ. Bước 1 Đánh hoặc copy và paste đoạn mã dưới đây vào C:\CheckSQLServer\Checkhd.ps1. #Function to check the HDD information on the host machine Function checkHD([string] $Hostname ) { $drives=get-wmiobject -class Win32_LogicalDisk -computername $hostname -errorvariable errorvar if (-not $errorvar) { foreach ($drive in $drives) { if ($drive.drivetype -eq "3" ) { $message= "DeviceID="+$drive.Deviceid+" Size="+ $drive.size/1048576+"MB Free Space="+ http://www.databasejournal.com/img/return.gif$drive.freespace/1048576 +"MB Percentage Used=" + http://www.databasejournal.com/img/return.gif (($drive.Size/1048576)-($drive.freespace/1048576))/ http://www.databasejournal.com/img/return.gif ($drive.Size/1048576) *100+"% " write-host $message -background "GREEN" -foreground "BLACk" } } } } Bước 2 Đánh hoặc copy và paste đoạn mã dưới đây vào C:\CheckSQLServer\Checknet.ps1. #Function to check the Network netadapter information on the http://www.databasejournal.com/img/return.gifhost machine Function checknet([string] $Hostname ) { $netadapter=get-wmiobject -class win32_networkadapter http://www.databasejournal.com/img/return.gif-computername $hostname -errorvariable errorvar if (-not $errorvar) { foreach ($netadapter in $netadapter) { write-host "---------------------------------------------------" http://www.databasejournal.com/img/return.gif-background "Blue" -foreground "BLACk" #$message= "netadapter Enabled="+$netadapter.Enable #write-host $message -background "GREEN" -foreground "BLACk" $message= "netadapterType="+$netadapter.netadapterType write-host $message -background "GREEN" -foreground "BLACk" $message= "Description="+$netadapter.Description write-host $message -background "GREEN" -foreground "BLACk" $message= "Manufacturer="+$netadapter.Manufacturer write-host $message -background "GREEN" -foreground "BLACk" $message= "NetworkAddresses="+$netadapter.NetworkAddresses write-host $message -background "GREEN" -foreground "BLACk" $message= "PermanentAddress="+$netadapter.PermanentAddress write-host $message -background "GREEN" -foreground "BLACk" $message= "Physicalnetadapter="+$netadapter.Physicalnetadapter write-host $message -background "GREEN" -foreground "BLACk" $message= "ProductName="+$netadapter.ProductName write-host $message -background "GREEN" -foreground "BLACk" $message= "ServiceName="+$netadapter.ServiceName write-host $message -background "GREEN" -foreground "BLACk" $message= "StatusInfo="+$netadapter.StatusInfo write-host $message -background "GREEN" -foreground "BLACk" $message= "Speed="+$netadapter.Speed write-host $message -background "GREEN" -foreground "BLACk" $message= "Status="+$netadapter.Status write-host $message -background "GREEN" -foreground "BLACk" } } } Bước 3 Gán vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã dưới đây. . ./checkhd.ps1 . ./checknet.ps1 Lúc này C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ có pinghost, checkservices, checkhardware, checkOS, checkHD và checknet 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 Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật với nguồn dẫn của các kịch bản mới như checkhd.ps1 và checknet.ps1. Bước 4 Gắn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn mã dưới đây. Write-host "Checking HDD Information....." Write-host "............................." checkHD $Hostname Write-host "Checking Network Adapter Information....." Write-host "........................................." checknet $Hostname Lúc này C:\CheckSQLServer\CheckSQLServer.ps1 sẽ có cả checkhd và checknet như thể hiên dưới. Chúng tôi đã thêm một số tuyên bố write-host để hiện toàn bộ quá trình. #Objective: To check various status of SQL Server #Host, instances and databases. #Author: MAK #Date Written: June 5, 2008 param ( [string] $Hostname ) $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 } Lưu ý: 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 sau của loạt bài này. Nguồn dẫn cơ bản load các hàng được liệt kê trong file kịch bản và làm cho nó trở lê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, kịch bản này lại lấy nguồn từ nhiều kịch bản khác. Bước 5 Chúng ta hãy thực thi kịch bản CheckSQLServer.ps1 bằng cách passing “Powerpc” host như một đối số, xem thể hiện dưới đây. ./CheckSQLServer.ps1 PowerServer2 Các kết quả bạn thu được như thể hiện bên dưới (tham khảo hình 1.0) Checking SQL Server..... ........................ Arguments accepted : PowerServer2 ........................ Pinging the host machine ........................ PowerServer2 is REACHABLE Checking windows services on the host related to SQL Server ........................................................... Host=PowerServer2 MSSQLSERVER Running OK True .\Administrator Host=PowerServer2 MSSQLServerADHelper100 Stopped OK False NT AUTHORITY\NETWORK SERVICE Host=PowerServer2 MSSQLServerOLAPService Stopped OK False .\Administrator Host=PowerServer2 SQLBrowser Stopped OK False NT AUTHORITY\LOCAL SERVICE Host=PowerServer2 SQLSERVERAGENT Stopped OK False .\Administrator Host=PowerServer2 SQLWriter Stopped OK False LocalSystem Checking hardware Information..... .................................. Host=PowerServer2 Description=AT/AT COMPATIBLE NumberOfLogicalProcessors=2 NumberOfProcessors=1 TotalPhysicalMemory=2145738752 Model=OptiPlex GX270 Manufacturer=Dell Computer Corporation PartOfDomain=True CurrentTimeZone=-240 DaylightInEffect=True Checking OS Information..... ............................. OSArchitecture=32-bit OSLanguage=1033 OSProductSuite=274 OSType=18 BuildNumber=6001 Bu ildType=Multiprocessor Free Version=6.0.6001 WindowsDirectory=C:\Windows PlusVersionNumber= FreePhysicalMemory=1492684 FreeSpaceInPagingFiles=2402648 FreeVir tualMemory=3948148 PAEEnabled=False ServicePackMajorVersion=0 ServicePackMinorVersion=0 Checking HDD Information..... ............................. DeviceID=C: Size=38143.99609375MB Free Space=23761.51953125MB Percentage Used=37.7057414937619 Checking Network Adapter Information..... ......................................... --------------------------------------------------- netadapterType= Descripti on=WAN Miniport (SSTP) Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=WAN Miniport (SSTP) ServiceName=RasSstp StatusInfo= Speed= Status= --------------------------------------------------- netadapterType= Description =WAN Miniport (L2TP) Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=WAN Miniport (L2TP) ServiceName=Rasl2tp StatusInfo= Speed= Status= --------------------------------------------------- netadapterType= Description =WAN Miniport (PPTP) Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=WAN Miniport (PPTP) ServiceName=PptpMiniport StatusInfo= Speed= Status= --------------------------------------------------- netadapterType= Descri ption=WAN Miniport (PPPOE) Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=WAN Miniport (PPPOE) ServiceName=RasPppoe StatusInfo= Speed= Status= --------------------------------------------------- netadapterType= Descripti on=WAN Miniport (IPv6) Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=WAN Miniport (IPv6) ServiceName=NdisWan StatusInfo= Speed= Status= --------------------------------------------------- netadapterType= Description =WAN Miniport (Network Monitor) Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=WAN Miniport (Network Monitor) ServiceName=NdisWan StatusInfo= Speed= Status= --------------------------------------------------- netadapterType= Descripti on=Intel® PRO/1000 MT Network Connection Manufacturer=Intel NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=Intel® PRO/1000 MT Network Connection ServiceName=E1G60 StatusInfo= Speed=100000000 Status= --------------------------------------------------- netadapterType= D escription=Microsoft ISATAP Adapter Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=Microsoft ISATAP Adapter ServiceName=tunnel StatusInfo= Speed=100000 Status= --------------------------------------------------- netadapterType= Descr iption=WAN Miniport (IP) Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=WAN Miniport (IP) ServiceName=NdisWan StatusInfo= Speed= Status= --------------------------------------------------- netadapterType= Description=M icrosoft Tun Miniport Adapter Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=Microsoft Tun Miniport Adapter ServiceName=tunmp StatusInfo= Speed=1073741824 Status= --------------------------------------------------- netadapterType= De scription=RAS Async Adapter Manufacturer=Microsoft NetworkAddresses= PermanentAddress= Physicalnetadapter= ProductName=RAS Async Adapter ServiceName=AsyncMac StatusInfo= Speed= Status= Hình 1.0 Từ các kết quả thu được, bạn có thể thấy được các thông tin về ổ đĩa cứng và card mạng. Bước 6 Chúng ta hãy thực thi kịch bản trên máy không có ổ đĩa cứng hay card mạng. ./CheckSQLServer.ps1 TestMachine Kết quả mà bạn nhận được được thể hiện bên dưới (tham khảo hình 1.1) Kết quả Checking SQL Server..... ........................ Arguments accepted : TestMachine ........................ Pinging the host machine ........................ TestMachine is NOT reachable Hình 1.1 Lưu ý: bạn có thể download mã cho phần 3 mới nhất Tại đây. Kết luận Phần 4 này đã giới thiệu cho các bạn cách truy cập để thu thập các thông tin về ổ đĩa cứng và card mạng bằng Windows PowerShell và WMI-Object
--== Cộng đồng tin học ==--
|
|
| |
Hung@info | Date: Thứ 2, 2009-05-25, 3:20 PM | Bài viết # 5 |
Trung úy
Nhóm: Quản trị viên
Bài viết: 994
Uy tín: 10
Hiện tại: Offline
| Kiểm tra SQL Server bằng Windows PowerShell – Phần 5 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 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 có liên quan đến SQL Server, phần 3 là cách kiểm tra 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 này chúng ta sẽ 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. Bước 1 Đánh hoặc copy và paste đoạn mã dưới đây vào file C:\CheckSQLServer\Checkinstance.ps1. function checkinstance( [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 $SqlConnection.ConnectionString = "Server=$servername;Database=master;Integrated Security=True" $SqlCmd.CommandText = " create table #serverproperty (property varchar(100), value varchar(100)) insert into #serverproperty values ('MachineName',convert(varchar(100), SERVERPROPERTY ('Machinename'))) insert into #serverproperty values ('Servername',convert(varchar(100), SERVERPROPERTY ('ServerName') )) insert into #serverproperty values ('InstanceName',convert(varchar(100), SERVERPROPERTY ('ServerName') )) insert into #serverproperty values ('Edition',convert(varchar(100),SERVERPROPERTY ('Edition') )) insert into #serverproperty values ('EngineEdition',convert(varchar(100), SERVERPROPERTY ('EngineEdition')) ) insert into #serverproperty values ('BuildClrVersion',convert(varchar(100), SERVERPROPERTY ('Buildclrversion')) ) insert into #serverproperty values ('Collation', convert(varchar(100),SERVERPROPERTY ('Collation')) ) insert into #serverproperty values ('ProductLevel',convert(varchar(100), SERVERPROPERTY ('ProductLevel')) ) insert into #serverproperty values ('IsClustered',convert(varchar(100),SERVERPROPERTY ('IsClustered') )) insert into #serverproperty values ('IsFullTextInstalled',convert(varchar(100),SERVERPROPERTY ('IsFullTextInstalled ') )) insert into #serverproperty values ('IsSingleuser',convert(varchar(100), SERVERPROPERTY ('IsSingleUser ') )) set nocount on select * from #serverproperty drop table #serverproperty " $SqlCmd.Connection = $SqlConnection $SqlAdapter.SelectCommand = $SqlCmd $SqlAdapter.Fill($DataSet) $DataSet.Tables[0] $SqlConnection.Close() } Bước 2 Đánh hoặc copy và paste đoạn mã sau vào file C:\CheckSQLServer\Checkconfiguration.ps1. function checkconfiguration( [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 $SqlConnection.ConnectionString = "Server=$servername;Database=master;Integrated Security=True" $SqlCmd.CommandText = " exec master.dbo.sp_configure 'show advanced options',1 reconfigure " $SqlCmd.Connection = $SqlConnection $SqlAdapter.SelectCommand = $SqlCmd $SqlAdapter.Fill($DataSet) $SqlCmd.CommandText = " set nocount on create table #config (name varchar(100), minimum bigint, maximum bigint, config_value bigint, run_value bigint) insert #config exec ('master.dbo.sp_configure') set nocount on select * from #config as mytable drop table #config " $SqlCmd.Connection = $SqlConnection $SqlAdapter.SelectCommand = $SqlCmd $SqlAdapter.Fill($DataSet) $SqlConnection.Close() $DataSet.Tables[0].rows } Bước 3 Gắn vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã sau. . ./checkinstance.ps1 . ./checkconfiguration.ps1 Lúc này file C:\CheckSQLServer\CheckSQL_Lib.ps1 có có pinghost, checkservices, checkhardware, checkOS, checkHD, checknet, checkinstance và Checkconfiguration 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 Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật với nguồn dẫn từ các file kịch bản mới, chẳng hạn như checkinstance.ps1 and checkconfiguration.ps1 Bước 4 Gắn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn mã sau. Write-host "Checking Instance property Information....." Write-host "............................." checkinstance $instancename Write-host "Checking Configuration information....." Write-host "........................................." checkconfiguration $instancename Lúc này file sẽ có cả hai kịch bản checkinstance và checkconfiguration như thể hiện bên dưới. Chúng tôi đã thêm vào một vài lệnh write-host để hiện thị toàn bộ quá trình. Các bạn cũng cần lưu rằng chúng tôi đã thêm $instancename với tư cách là một tham số bổ sung cho kịch bản checksqlserver. #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 } Lưu ý: File CheckSQLServer.ps1 này 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 sau này của loạt bài. Việc load về cơ bản sẽ tải các chức năng được liệt kê trong các kịch bản và làm cho nó trở lên hiện hữu trong suốt 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, kịch bản này lại lấy nguồn từ nhiều kịch bản khác. Bước 5 Lúc này chúng ta hãy thực thi kịch bản, CheckSQLServer.ps1, bằng cách passing “PowerServer3” host với tư cách một đối số như thể hiện bên dưới. ./CheckSQLServer.ps1 PowerServer3 PowerServer3\SQL2008 Chúng ta sẽ gặp kết quả như thể hiện dưới đây (Hình 1.0) ..... .... .... two digit year cutoff 1753 9999 2049 user connections 0 32767 0 user options 0 32767 0 xp_cmdshell 0 1 0 Checking Instance property Information..... ............................. 11 property value -------- ----- MachineName POWERSERVER3 Servername POWERSERVER3\SQL2008 InstanceName POWERSERVER3\SQL2008 Edition Enterprise Evaluation Edition EngineEdition 3 BuildClrVersion v2.0.50727 Collation SQL_Latin1_General_CP1_CI_AS ProductLevel RTM IsClustered 0 IsFullTextInstalled 1 IsSingleuser 0 .... .... Hình 1.0 Hình 1.1 Bước 6 Lúc này chúng ta hãy thực thi kịch bản trên máy không tồn tại như thể hiện bên dưới. ./CheckSQLServer.ps1 TestMachine Kết quả thu được sẽ như bên dưới (tham khảo hình 1.3) Kết quả Checking SQL Server..... ........................ Arguments accepted : TestMachine ........................ Pinging the host machine ........................ TestMachine is NOT reachable Hình 1.3 Kết luận Phần 5 của loạt bài này đã giới thiệu cho các bạn cách truy cập các thuộc tính instance của SQL Server và các chi tiết về cấu hình của nó bằng cách sử dụng Windows PowerShell. DOWNLOAD kịch bản cho bài này.
--== Cộng đồng tin học ==--
|
|
| |
Hung@info | Date: Thứ 2, 2009-05-25, 3:46 PM | Bài viết # 6 |
Trung úy
Nhóm: Quản trị viên
Bài viết: 994
Uy tín: 10
Hiện tại: Offline
| 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 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 có liên quan đến SQL Server, phần 3 là cách kiểm tra 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ể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. Phần 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 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 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ậ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ực thi 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 SQL Server..... ........................ Arguments accepted : TestMachine ........................ Pinging the host machine ........................ TestMachine is NOT reachable Hình 1.1 Kết luận Đây là phần 6 của lọat bài này. Trong phần 6 này chúng tôi đã giới thiệu cho các bạn đươc các truy cập trạng thái của cơ sở dữ liệu và các thông tin kích thước bằng Windows PowerShell. Download kịch bản cho phần này.
--== Cộng đồng tin học ==--
|
|
| |
Hung@info | Date: Thứ 2, 2009-05-25, 4:14 PM | Bài viết # 7 |
Trung úy
Nhóm: Quản trị viên
Bài viết: 994
Uy tín: 10
Hiện tại: Offline
| Kiểm tra SQL Server bằng Windows PowerShell – Phần 7 Trong phần sáu chúng tôi đã giới thiệu cho các bạn cách kiểm tra trạng thái cơ sở dữ liệu các thông tin về kích thước của cơ sở dữ liệu, còn trong phần này chúng tôi sẽ giới thiệu cho các bạn về cách lấy được các thông tin đó trên TOP 10 các truy vấn dựa trên hiệu suất CPU. Bước 1 Đánh hoặc copy và paste đoạn mã dưới đây vào file C:\CheckSQLServer\Checktopqueries.ps1. function checktopqueries( [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 $SqlConnection.ConnectionString = "Server=$servername;Database=master;Integrated Security=True" $SqlCmd.CommandText = " If LEFT(convert(varchar(100), SERVERPROPERTY('productversion')),1) in ('9','1') begin select Top 10 case when sql_handle IS NULL then ' ' else ( substring(st.text,(qs.statement_start_offset+2)/2, (case when qs.statement_end_offset = -1 then len(convert(nvarchar(MAX),st.text))*2 else qs.statement_end_offset end - qs.statement_start_offset) /2 ) ) end as query_text ,creation_time, last_execution_time ,rank() over(order by (total_worker_time+0.0)/ execution_count desc, sql_handle,statement_start_offset ) as row_no , (rank() over(order by (total_worker_time+0.0)/ execution_count desc, sql_handle,statement_start_offset ))%2 as l1 , (total_worker_time+0.0)/1000 as total_worker_time , (total_worker_time+0.0)/(execution_count*1000) as [AvgCPUTime] , total_logical_reads as [LogicalReads] , total_logical_writes as [LogicalWrites] , execution_count , total_logical_reads+total_logical_writes as [AggIO] , (total_logical_reads+total_logical_writes)/ (execution_count+0.0) as [AvgIO] , db_name(st.dbid) as db_name , st.objectid as object_id from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(sql_handle) st where total_worker_time > 0 order by (total_worker_time+0.0)/(execution_count*1000) end else begin print 'Server version is not SQL Server 2005 or above. Can''t query TOP queries' end" $SqlCmd.Connection = $SqlConnection $SqlAdapter.SelectCommand = $SqlCmd $SqlAdapter.Fill($DataSet)|out-null $dbs =$DataSet.Tables[0] $dbs $SqlConnection.Close() } Bước 2 Gắn thêm vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã sau. . ./checktopqueries.ps1 Lúc này file C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ 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 . ./checktopqueries.ps1 Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật từ nguồn các kịch bản mới, chẳng hạn như checktopqueries.ps1. Bước 3 Gắn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn mã sau. Write-host "Checking Top 10 Queries based on CPU Usage." Write-host "............................." checktopqueries $instancename |select-object query_text, AvgCPUTime |format-table CheckSQLServer.ps1 sẽ trở thành #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 Write-host "Checking Top 10 Queries based on CPU Usage." Write-host "............................." checktopqueries $instancename |select-object query_text, AvgCPUTime |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 sau của loạt bài này. Nguồn dẫn sẽ load các chức năng được liệt kê trong file kịch bản và làm cho nó trở thành hiện hữu trong suốt toàn bộ PowerShell session. Trong trường hợp này, chúng ta lấy nguồn từ một kịch bản, kịch bản đó lại được dẫn 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” như một đối số và Powerserver3\SQL2008 như một đối số thứ hai như thể hiện bên dưới. ./CheckSQLServer.ps1 PowerServer3 PowerServer3\SQL2008 Chúng ta sẽ thu được các kết quả như thể hiên bên dưới (tham khảo hình 1.0) Kết quả ... ... ... ... Checking Top 10 Queries based on CPU Usage. ............................. WARNING: column "AvgCPUTime" does not fit into the display and was removed. query_text ---------- select top 2... select top 2... UPDATE [Notifications] WITH (TABLOCKX)... select name from master.dbo.sysdatabases select @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))... select @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))... select @configcount = count(*)... UPDATE [Event] WITH (TABLOCKX)... select @confignum = configuration_id, @prevvalue = convert(int, isnull(value, value_in_use))... Update [Notifications] set [ProcessStart] = NULL, [ProcessHeartbeat] = NULL, [Attempt] = [Attemp... Hình 1.0 Bước 5 Chúng ta hãy thực thi kịch bản trên máy tính không tồn tại như thể hiện bên dưới. ./CheckSQLServer.ps1 TestServer testserver Các kết quả nhận được như thể hiện bên dưới (tham khảo hình 1.1) Hình 1.1 Kết luận Phần bảy này chúng tôi đã minh chứng cho các bạn được cách truy vấn Top 10 các truy vấn được thực thi trên SQL Server instance về hiệu suất CPU. Download các kịch bản cho phần này. (Databasejournal)
--== Cộng đồng tin học ==--
|
|
| |
|
|
|