接觸過(guò)UNIX或者Linux 的朋友都知道此類(lèi)系統(tǒng)有著功能強(qiáng)大、無(wú)所不能的殼程序,稱(chēng)之為Shell。微軟公司于2006年第四季度正式發(fā)布PowerShell,它的出現(xiàn)標(biāo)志著, 微軟公司向服務(wù)器領(lǐng)域邁出了重要的一步, 不僅提供簡(jiǎn)便的圖形化操作界面,同時(shí)提供類(lèi)似于Unix, Linux等
接觸過(guò)UNIX或者Linux 的朋友都知道此類(lèi)系統(tǒng)有著功能強(qiáng)大、無(wú)所不能的殼程序,稱(chēng)之為Shell。微軟公司于2006年第四季度正式發(fā)布PowerShell,它的出現(xiàn)標(biāo)志著, 微軟公司向服務(wù)器領(lǐng)域邁出了重要的一步, 不僅提供簡(jiǎn)便的圖形化操作界面,同時(shí)提供類(lèi)似于Unix, Linux等操作系統(tǒng)中強(qiáng)大的Shell管理模式。
經(jīng)過(guò)幾年的努力,微軟已逐步開(kāi)發(fā)各服務(wù)器端產(chǎn)品對(duì)PowerShell 的支持。不懂PowerShell必將會(huì)被淘汰,今天我們就來(lái)看看SQL Server對(duì)PowerShell的支持。從實(shí)質(zhì)上來(lái)說(shuō),SQL Server 2008應(yīng)該是第一個(gè)支持Powershell的SQL Server版本,但是其功能不完善,極少有DBA會(huì)用到此功能。在SQL Server 2012中增加了更多的cmdlet,功能趨于完善,本文的目的就是介紹在SQL Server 2012環(huán)境下如何通過(guò)Powershell來(lái)實(shí)現(xiàn)對(duì)SQL Server服務(wù)器的管理。
筆者在測(cè)試環(huán)境Windows Server 2008 R2 SP1上部署的SQL Server 2012,更新PowerShell版本到V3,見(jiàn)之前的博文在 Windows 7 和 Windows Server 2008 R2 上安裝 Windows PowerShell 3.0,在PowerShell環(huán)境下,輸入:
Get-PSDrive
你可以看到類(lèi)似下面的截屏:
注意:沒(méi)有對(duì)于SQL Server的PSDrive。
微軟雖然針對(duì)不同的產(chǎn)品都有各自的Shell,但是這些產(chǎn)品都有相同的shell環(huán)境,而不同之處只是導(dǎo)入了不同的PS模塊或者說(shuō)是PowerShell插件。針對(duì)SQL Server 2012的管理也是如此,從PowerShell 管理 SQL Server 的方法是將 SQL Server的管理模塊sqlps 模塊導(dǎo)入到 Windows PowerShell環(huán)境中。 該模塊將加載并注冊(cè) SQL Server 管理單元和管理程序集。
首先,以系統(tǒng)管理員身份啟動(dòng)PowerShell,點(diǎn)擊PowerShell圖標(biāo),右鍵點(diǎn)擊“Run as Administrator”,我們需要使用 Set-ExecutionPolicy cmdlet 設(shè)置相應(yīng)的腳本執(zhí)行策略。為了防止惡意腳本的執(zhí)行,PowerShell有一個(gè)執(zhí)行策略,默認(rèn)情況下,這個(gè)執(zhí)行策略被設(shè)為受限的也就是Restricted,意味著PowerShell腳本無(wú)法執(zhí)行。我們可以使用Get-ExecutionPolicy查看當(dāng)前的執(zhí)行策略,如下圖所示:
默認(rèn)情況下PowerShell腳本是不允許執(zhí)行的,我們可以根據(jù)需要進(jìn)行相應(yīng)的人修改,可供選擇的參數(shù)有:Restricted、RemoteSigned、AllSigned、Unrestricted。其中Restricted就是默認(rèn)設(shè)置,腳本不能運(yùn)行; RemoteSigned的意思是本地創(chuàng)建的腳本可以運(yùn)行,但從網(wǎng)上下載的腳本不能運(yùn)行,除非它們擁有由受信任的發(fā)布者簽署的數(shù)字簽名; AllSigned的意思是僅當(dāng)腳本由受信任的發(fā)布者簽名才能運(yùn)行。Unrestricted則指腳本執(zhí)行不受限制,不管來(lái)自哪里,也不管它們是否有簽名,這是個(gè)完全放開(kāi)的策略。我們?cè)诖耸菧y(cè)試環(huán)境,我就直接放開(kāi),但方便的同時(shí),就要面臨一定的安全風(fēng)險(xiǎn)。如下圖所示:
接下來(lái)就可以加載SQLPS模塊了,在此,我們使用 Import-Module cmdlet,默認(rèn)情況下,會(huì)顯示與 Encode-Sqlname 和 Decode-Sqlname 有關(guān)的警告,如果不希望顯示此類(lèi)警告信息,可以使用 DisableNameChecking 參數(shù),如下圖所示:
此時(shí)就成功將 SQL Server 組件導(dǎo)入到 Windows PowerShell環(huán)境中。
Sqlps 模塊加載兩個(gè)Windows PowerShell 管理單元來(lái)實(shí)現(xiàn)相應(yīng)的管理功能。 其中一個(gè)稱(chēng)為SQL Server PowerShell provider,它允許使用將SQL Server當(dāng)成一個(gè)驅(qū)動(dòng)器來(lái)使用,就像我們使用的文件系統(tǒng)路徑一樣,在該路徑中,驅(qū)動(dòng)器與 SQL Server 管理對(duì)象模型關(guān)聯(lián),節(jié)點(diǎn)基于對(duì)象模型類(lèi),如下圖所示,使用Get-PSDrive可以列出驅(qū)動(dòng)器信息,在此圖中可以看到多出SQLSERVER驅(qū)動(dòng)器。
用戶可以使用諸如 dir、cd、del、ren熟悉的命令在命令提示符窗口中定位文件夾以及針對(duì)路徑中的節(jié)點(diǎn)執(zhí)行操作。 有了SQL Server驅(qū)動(dòng)器后就可以像訪問(wèn)文件系統(tǒng)那樣訪問(wèn)SQL Server對(duì)象,如實(shí)例名、數(shù)據(jù)庫(kù)、表、關(guān)系等。我們還可以通過(guò)dir或者是get-chilitem來(lái)查看SQLSERVER驅(qū)動(dòng)器中的內(nèi)容。如下圖所示:
甚至說(shuō),我們可以使用dir命令列出本實(shí)例上的所有數(shù)據(jù)庫(kù)信息,如下圖所示:
可以看到,當(dāng)前實(shí)例中有AdventureWorks、AdventureWorks2012、demo、ReportServer、ReportServerTempDB五個(gè)數(shù)據(jù)庫(kù),如果不確定可以和圖形界面中的結(jié)果進(jìn)行對(duì)比,如下圖所示:
至于顯示其他對(duì)象,如審核、可用性組、作業(yè)、登錄、郵件、觸發(fā)器等對(duì)象的操作方法是一樣的,在此不再介紹。
除了SQL Server PowerShell provider程序之外,還可以使用 cmdlet命令進(jìn)行相應(yīng)的SQL Server管理, SQL Server cmdlet 支持各種操作,如運(yùn)行包含 Transact-SQL 或 XQuery 語(yǔ)句的 sqlcmd 腳本。 由于命令較多,大家可以在使用的過(guò)程中隨時(shí)通過(guò)Get-Help cmdlet 了解每個(gè) cmdlet 的幫助信息。例如,需要查看Invoke-sqlcmd的幫助信息,就可以如下圖所示:
Get-Help 返回各種信息,如語(yǔ)法、參數(shù)定義、輸入和輸出類(lèi)型以及 cmdlet 所執(zhí)行操作的說(shuō)明。在此,還可以加上-Examples 參數(shù)列出相應(yīng)的示例:
在前面的內(nèi)容中我們了解到SQL Server的擴(kuò)展插件添加到PowerShell后,SQL Server PowerShell的許多功能以驅(qū)動(dòng)器的形式出現(xiàn)。SQL Server PowerShell provider使得SQL Server看起來(lái)更像是一個(gè)大磁盤(pán)驅(qū)動(dòng)器,像分析服務(wù)和數(shù)據(jù)庫(kù)引起這些各種組件都像“文件夾”一樣。配置設(shè)定以“文件”形式展現(xiàn),用戶使用專(zhuān)門(mén)的PowerShell命令集如Set-ItemProperty和Get-ItemProperty來(lái)操縱這些設(shè)定。此外還提供了“動(dòng)詞-名詞”形式的Windows PowerShell cmdlet單函數(shù)命令來(lái)執(zhí)行相應(yīng)的Transact-SQL 腳本。下面我們就來(lái)看3個(gè)小示例:
示例1:顯示當(dāng)前SQL Server的服務(wù)器名以及SQL Server的版本號(hào)。使用的cmdlet是Invoke-sqlcmd -Query "select @@version,@@servername;"在此,我把結(jié)果暫存于變量a中,如下圖所示:
一般情況下,輸出結(jié)果立即被使用,但有時(shí)候,用戶可能需要將輸入結(jié)果進(jìn)行保存下來(lái),以便后期可以再次使用。
示例2:列出SQLSERVER: 路徑中的 Databases 節(jié)點(diǎn)下的集合子項(xiàng)。Databases節(jié)點(diǎn)下存放的是用戶數(shù)據(jù)庫(kù)的信息,我們前面通過(guò)cd、dir命令簡(jiǎn)單進(jìn)行了查看,下面我們換一種方式。先使用Set-Location SQLSERVER:\SQL\localhost\DEFAUlt\Databases切換到目標(biāo)路徑下,再通過(guò)Get-ChildItem列出其中的內(nèi)容。如下圖所示:
在此界面中可以看到,列出的數(shù)據(jù)庫(kù)信息包括了數(shù)據(jù)庫(kù)的名稱(chēng)、狀態(tài)、恢復(fù)模式以及排序字符等。
示例3:顯示指定數(shù)據(jù)庫(kù)中的表的信息。在此我使用的數(shù)據(jù)庫(kù)是demo,在此數(shù)據(jù)庫(kù)中有一個(gè)四個(gè)表。如下圖所示,首先還是使用:
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\demo\Tables切換到目標(biāo)節(jié)點(diǎn)下,然后使用Get-ChildItem列出相應(yīng)的表信息。如下圖所示:
如果在此只希望列出dbo架構(gòu)的表怎么辦?命令改為:Get-ChildItem | where {$_.Schema -eq "dbo"} 即可,到了V3版本可以修改為:Get-ChildItem | where Schema –eq “dbo”即可,如下圖所示:
示例4:使用cmdlet對(duì)當(dāng)前實(shí)例中的demo數(shù)據(jù)庫(kù)進(jìn)行完全備份,并將備份文件存放到網(wǎng)絡(luò)路徑\\192.168.18.235\dbbak下,文件名為demo.bak。
首先,我們需要打開(kāi)“對(duì)象資源管理器”。切換要進(jìn)行處理的對(duì)象的節(jié)點(diǎn),在此切換到“數(shù)據(jù)庫(kù)”節(jié)點(diǎn)即可。右鍵單擊該對(duì)象,然后選擇“啟動(dòng) PowerShell”。如下圖所示:
接著,我們就可以使用backup-sqldatabase命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份,此命令功能較強(qiáng),在此只演示如何進(jìn)行完全備份。如下圖所示:
看到如上所示的結(jié)果,就說(shuō)明操作成功了,當(dāng)然用戶也可以到目標(biāo)路徑中查看文件是否存在,整個(gè)命令還是相當(dāng)簡(jiǎn)潔明了的。好了,我們的演示就到此結(jié)束。
SQL Server開(kāi)發(fā)團(tuán)隊(duì)已經(jīng)把PowerShell廣泛地集成到該產(chǎn)品中。管理員需要認(rèn)真學(xué)習(xí)PowerShell,這對(duì)未來(lái)的發(fā)展是有益的。親愛(ài)的朋友,千萬(wàn)不要輕視PowerShell,不僅僅是在SQL Server 2012產(chǎn)品中,其他微軟服務(wù)器也是如此,因?yàn)镻owerShell是微軟服務(wù)器管理方式的發(fā)展方向,一起努力吧!
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com