PowerShell 2.0 實踐(十二)管理 SQL Server 2008 R2(1)
DBA可以使用的工具很多,對于SQL Server來說,有查詢分析器、事件探查器、命令行工具等,其中SQL語句是重中之重,但是PowerShell的出現(xiàn)使得DBA又多了一種選擇。
本系列所有測試腳本均在Windows Server 2008 R2 DataCenter (PowerShell 2.0) + PowerGUI Script Editor Free Edition x64中測試通過。
SQL Server系列使用了SQL Server 2008 R2 DataCenter x64
轉(zhuǎn)載請注明出處:http://www.rzrgm.cn/brooks-dotnet/archive/2010/10/11/1848282.html
微軟對SQL Server提供了如下幾種PowerShell擴展,可以使用Get-PSSnapin -Registered查看:
SQL Server 2008 R2針對主數(shù)據(jù)服務還提供了一種擴展:MasterDataServicesSnapin,后續(xù)篇章測試主數(shù)據(jù)服務時再做討論。
微軟提供的PowerShell擴展包含的命令并不多,只能完成一些基礎(chǔ)操作,更高級的操作還是要借助SQL Server Management Object (SMO,SQL Server對象模型)。
CodePlex上有人發(fā)布了SQL Server的PowerShell擴展,提供了更多、更常用的命令,后續(xù)篇章我們來測試一下。
由于管理的對象是SQL Server 2008 R2,故首先回顧一下其新特性。
Microsoft SQL Server 2008 R2是SQL Server數(shù)據(jù)庫的最新版本, R2標志表示這是SQL Server的一個中間版本,而不是一個主版本,但R2版本一樣為DBA和開發(fā)人員提供了大量有趣的新功能。除了新功能外,也發(fā)布了兩個新版本:SQL Server 2008 R2 Datacenter(數(shù)據(jù)中心版)和SQL Server 2008 R2 Parallel Data Warehouse(并行數(shù)據(jù)倉庫版)。
- SQL Server 2008 R2 新特性
1、Report Builder 3.0
Report Builder是一個工具集,通過它可以開發(fā)出發(fā)布到Web上的報表,通過Report Builder可以創(chuàng)建包含圖像,圖表,表格和打印控件的報表,此外,Report Builder也支持下鉆和排序,如果你熟悉第三方報表工具,圖Crystal Reports(水晶報表),那么你一定會使用Report Builder。
SQL Server 2008 R2/Report Builder 3.0中的新特性包括:
1)地圖圖層,它可以容納空間和分析數(shù)據(jù),可以和微軟的虛擬地球(Microsoft Virtual Earth)無縫集成;
2)指示器,用于顯示一個值的狀態(tài);
3)報表部件,這個對象可以重復使用或在多個報表之間共享;
4)聚合計算(Aggregate Calculating),允許你計算其它聚合計算結(jié)果的匯總值。
2、SQL Server 2008 R2 Datacenter
SQL Server 2008 R2的數(shù)據(jù)中心版的目標是企業(yè)版用戶,他們要求更好的性能,新版本支持256顆邏輯處理器,更多的實例數(shù)和更多的內(nèi)存。
3、SQL Server 2008 R2 Parallel Data Warehouse
SQL Server 2008 R2的另一個新版本是并行數(shù)據(jù)倉庫版,正式代號是"Madison",它主要目標是處理非常大的數(shù)據(jù)量,它使用大規(guī)模并行處理功能將大表分散到多個SQL節(jié)點,這些節(jié)點通過微軟的專利技術(shù)Ultra Shared Nothing進行控制,它可以將查詢?nèi)蝿辗峙涞礁鱾€計算節(jié)點上,然后從各個節(jié)點收集計算結(jié)果。
4、StreamInsight
SQL Server 2008 R2中出現(xiàn)了一個新組件,叫做StreamInsight,這個有趣的組件允許在運行中分析流數(shù)據(jù),也就是直接從源數(shù)據(jù)流進行處理,然后再保存到數(shù)據(jù)表中。如果你的系統(tǒng)是一個實時系統(tǒng),這個功能就非常非常的有用,因為實時系統(tǒng)需要分析數(shù)據(jù),但又不能引起數(shù)據(jù)寫入時的延遲,一些常見的例子如股票交易數(shù)據(jù)流,Web點擊分析流和工業(yè)處理控制,可以同時監(jiān)控多個輸入數(shù)據(jù)流。
5、主數(shù)據(jù)服務
主數(shù)據(jù)服務(Master Data Services,MDS)既是一個概念又是一個產(chǎn)品,主數(shù)據(jù)服務的概念是對核心業(yè)務數(shù)據(jù)有一個集中的數(shù)據(jù)入口看守人,數(shù)據(jù)項如客戶賬單地址,雇員/客戶姓名,以及產(chǎn)品名稱應該集中管理,以便讓所有消費應用系統(tǒng)都具有相同的信息。微軟提供了一個示例,在customer表中記錄了一個顧客地址,但在mailing表中記錄了一個不同的地址。主數(shù)據(jù)服務應用程序可以保證所有表只有一個正確的地址,而一個MDS可以是一個本地應用程序,SQL Server 2008 R2包括一個應用程序和一個接口管理核心數(shù)據(jù)。
6、PowerPivot for SharePoint
PowerPivot是一個終端用戶工具,它與SharePoint,SQL Server 2008 R2和Excel 2010聯(lián)合使用,可以在幾秒內(nèi)處理大量數(shù)據(jù),PowerPivot的作用有點像Excel中的數(shù)據(jù)透視表,提供了分析功能。
7、數(shù)據(jù)層應用
數(shù)據(jù)層應用(Data-Tier Application,縮寫為DAC,不知道C代表什么含義,不要與Windows數(shù)據(jù)訪問組件混淆了,因為它的縮寫也是DAC)是一個對象,它可以為一個工程存儲所有需要的數(shù)據(jù)庫信息,如登錄,表和Visual Studio可以使用的存儲過程。通過創(chuàng)建一個數(shù)據(jù)層應用,SQL Server包版本和每個Visual Studio編譯版本一起保存,也就是可以將應用程序和數(shù)據(jù)庫構(gòu)建成一個統(tǒng)一的版本,方便后期維護和管理。
8、Unicode壓縮
SQL Server 2008 R2使用一個新的算法,為Unicode存儲提供了一個簡單的壓縮方案,通過Unicode壓縮,可以減少Unicode字符對空間的占用,它由SQL Server引擎自動管理,因此不需要修改現(xiàn)有應用程序,DBA也無須做任何干涉。
9、SQL Server Utility
新的SQL Server Utility是一個集中控制多個SQL Server實例的倉庫對象,性能數(shù)據(jù)和配置策略可以存儲在一個單一的Utility中,Utility也包括一個資源管理器工具,可以創(chuàng)建多個服務器儀表板。
10、多服務器儀表板
雖然SQL Server Management Studio也可以連接到多個服務器,但不能在一個集中的視圖上查看所有的數(shù)據(jù)庫,每個數(shù)據(jù)庫服務器需要獨立管理,在SQL Server 2008 R2中,可以創(chuàng)建同時顯示多個服務器的儀表板。
- SQL Server驅(qū)動器
當添加了微軟的PSSnapin后,就會添加SQL Server驅(qū)動器:
Add-PSSnapin -Name SqlServerProviderSnapin100
Add-PSSnapin -Name SqlServerCmdletSnapin100
Get-PSDrive
運行結(jié)果:
有了SQL Server驅(qū)動器后就可以像訪問文件系統(tǒng)那樣訪問SQL Server對象,如實例名、數(shù)據(jù)庫、表、關(guān)系等,非常方便。
如上圖所示,SQLSERVER:\是SQL Server驅(qū)動器的"根目錄",其"目錄結(jié)構(gòu)"如下:(摘自MSDN)
Folder | SQL Server object model namespace | Objects |
SQLSERVER:\SQL | Microsoft.SqlServer.Management.Smo Microsoft.SqlServer.Management.Smo.Agent | Database objects, such as tables, views, and stored procedures. |
SQLSERVER:\SQLPolicy | Policy-based management objects, such as policies and facets. | |
SQLSERVER:\SQLRegistration | Registered server objects, such as server groups and registered servers. | |
SQLSERVER:\Utility | Utility objects, such as managed instances of the Database Engine. | |
SQLSERVER:\DAC | Microsoft.SqlServer.Management.DAC | Data-tier application objects such as DAC packages, and operations such as deploying a DAC. |
SQLSERVER:\DataCollection | Data collector objects, such as collection sets and configuration stores. |
那么我們查看一下其子集:
Clear-Host
Set-Location SQLSERVER:\
Get-ChildItem
運行結(jié)果:
可以得到子集目錄的簡要描述。
獲取本機安裝的所有SQL Server實例的信息:
#將BrooksPC替換為你自己的機器名
Set-Location SQLSERVER:\SQL\BrooksPC
Get-ChildItem
運行結(jié)果:
可以得到很多數(shù)據(jù)庫的元數(shù)據(jù)信息,如默認實例名、字符集、.NET版本等,非常有用。
查詢本機默認實例上的所有數(shù)據(jù)庫和表:
Set-Location SQLSERVER:\SQL\BrooksPC\DEFAULT\Databases
Get-ChildItem | Select Name, Tables
運行結(jié)果:
可以看到和GUI中的一致,系統(tǒng)數(shù)據(jù)庫、系統(tǒng)表除外:
查詢本機安裝的數(shù)據(jù)庫的詳細版本信息:
注意PowerShell中的switch語句沒有case。
Set-Location SQLSERVER:\SQL\BrooksPC
$svr = Get-ChildItem | Select Edition, VersionString
switch ($svr.VersionString)
{
"8.194.0" {Write-Host $svr.VersionString "SQL Server 2000 RTM" $svr.Edition; break}
"8.384.0" {Write-Host $svr.VersionString "SQL Server 2000 SP1" $svr.Edition; break}
"8.534.0" {Write-Host $svr.VersionString "SQL Server 2000 SP2" $svr.Edition; break}
"8.760.0" {Write-Host $svr.VersionString "SQL Server 2000 SP3" $svr.Edition; break}
"8.00.2039" {Write-Host $svr.VersionString "SQL Server 2000 SP4" $svr.Edition; break}
"9.00.1399" {Write-Host $svr.VersionString "SQL Server 2005 RTM" $svr.Edition; break}
"9.00.2047" {Write-Host $svr.VersionString "SQL Server 2005 SP1" $svr.Edition; break}
"9.00.3042" {Write-Host $svr.VersionString "SQL Server 2005 SP2" $svr.Edition; break}
"9.00.4035" {Write-Host $svr.VersionString "SQL Server 2005 SP3" $svr.Edition; break}
"10.0.1600" {Write-Host $svr.VersionString "SQL Server 2008 RTM" $svr.Edition; break}
"10.0.2531" {Write-Host $svr.VersionString "SQL Server 2008 SP1" $svr.Edition; break}
"10.50.1600.1" {Write-Host $svr.VersionString "SQL Server 2008 R2 RTM" $svr.Edition; break}
default {Write-Host $svr.VersionString "version cannot be determined" $svr.Edition; break}
}
運行結(jié)果:
小結(jié):
本次對SQL Server 2008 R2有了一個大體的了解,練習了SQL Server驅(qū)動器下查詢信息的方法。后續(xù)篇章將開始深入涉及SMO(SQL Server Management Object),并測試其他PowerShell擴展,包含微軟及其第三方的。
相信PowerShell會是對SQL語句的一個有益補充而逐漸被SQL Server DBA所接受。

浙公網(wǎng)安備 33010602011771號