日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

为什么这个SQL Server DBA学习PowerShell--SQL任务

發(fā)布時(shí)間:2023/12/4 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么这个SQL Server DBA学习PowerShell--SQL任务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?我開始學(xué)習(xí)PowerShell,是因?yàn)槲以趯ふ乙环N快速和高效的方式收集有關(guān)我的SQL Servers的信息和更好地管理我的服務(wù)器工作負(fù)載的方式。我以為,我正在學(xué)習(xí)是另一門新的腳本語言,它能幫我做到前面提到的設(shè)想。實(shí)際上,我發(fā)現(xiàn)學(xué)習(xí) PowerShell,不僅提供了一種強(qiáng)大的手段去實(shí)現(xiàn)許多常規(guī)和重復(fù)性的服務(wù)器任務(wù)和健康檢查;也是一個(gè)提高我其它方面技能的有用的跳板。例如,在我學(xué) 習(xí)PowerShell時(shí),我發(fā)現(xiàn):

? 提高了我關(guān)于.NET的認(rèn)識,這樣我就能夠更好地與我所支持的應(yīng)用程序開發(fā)人員交流。

??學(xué)會(huì)了如何使用?Server Management Objects (SMO) 來實(shí)現(xiàn)數(shù)據(jù)庫相關(guān)任務(wù)的自動(dòng)化執(zhí)行。

? 學(xué)會(huì)了?Windows Management Instrumentation (WMI)相關(guān)的知識,它能允許我只使用一條信息就查詢多一臺或者多臺服務(wù)器。

? 更加適應(yīng)OOP.

?

? ? ? 在這篇文章里,我描述了一些使用PowerShell的例子,同時(shí)希望這些對DBA有用。我的腳本將會(huì)演示在一臺或多服務(wù)器如何執(zhí)行SQL查詢,WMI查 詢和SMO代碼,以及幫助您更好的管理多臺數(shù)據(jù)庫服務(wù)器。所有腳本均在SQL Server 2005中測試通過。

? ? ? 本文的目的不是寫成一份PowerShell教程。我假設(shè)您已經(jīng)熟知以下內(nèi)容:基本的PowerShell語法,如何使用cmdlets獲取幫助,命令行 是如何工作的,如何運(yùn)行腳本,命名管道是什么,別名是什么等等。如果您不知道這些內(nèi)容,你可以在各種線上文章,新聞組和博客中找到大量的幫助(文章結(jié)尾引 用章節(jié)中列出了部分資源)。這篇文章中的部分腳本來源于我閱讀這些資源時(shí)遇到的。

使用PowerShell管理多臺服務(wù)器

???????? 使用PowerShell管理多臺服務(wù)器的核心就是一份簡單的服務(wù)器清單,它包括您希望在其上執(zhí)行常規(guī)任務(wù)和健康檢查的服務(wù)器名字。

???????? 在我的例子中,我使用一個(gè)簡單的包含我的服務(wù)器的清單AllServers.txt。格式如下:

???????? Server1

???????? Server2

???????? Server3

???????? ……

? ? ? 我將演示的例子中,我使用一個(gè)Foreach循環(huán)對這個(gè)清單里列出的每臺服務(wù)器執(zhí)行一個(gè)任務(wù)。這個(gè)簡單的服務(wù)器列表構(gòu)成了完成重復(fù)任務(wù)的基石。我主要的工 作是在Microsoft的環(huán)境里,我發(fā)現(xiàn)使用PowerShell執(zhí)行重復(fù)任務(wù)要比之前用Python快。例如,Python需要多行語句讀取,打開和 關(guān)閉一個(gè)文件,但是PowerShell中Get-Content cmdlet讀取一個(gè)文件只使用一行代碼。

get-content

?? 如果你感覺要打過多的字,你可以通過它的別名來調(diào)用Get-Content cmdlet。

gc?"C:\AllServers.txt"

為了便于閱讀而定義的最佳實(shí)踐是在命令行中使用別名和在腳本中完成cmdlet。您可以使用Get-Alias cmdlet列出所有PowerShell中的別名:

get-alias?|?sort?nameget-alias?|?sort?definition

PowerShell即是交互式命令行也是腳本環(huán)境。我剛開始著手解決一個(gè)問題是通過在命令行中執(zhí)行命令。當(dāng)我已經(jīng)確定了命令的正確順序時(shí),我把它們保存為一個(gè)以.ps1擴(kuò)展名的腳本文件,當(dāng)需要時(shí)再執(zhí)行。

?

自動(dòng)化重復(fù)任務(wù)

??? ??PowerShell 使得為我所有的服務(wù)器實(shí)現(xiàn)自動(dòng)化常規(guī)的和重復(fù)性任務(wù)變得更容易,使得用一些關(guān)于服務(wù)器的位信息(bit of information)便能快速和高效處理看似層出不窮的即席請求。接下來的章節(jié)只是描述一些我已經(jīng)寫好的,用來實(shí)現(xiàn)自動(dòng)化重復(fù)性任務(wù)的腳本。這些例子 的進(jìn)步來自:我發(fā)現(xiàn)那些曾經(jīng)花了很多精力解決才解決的問題,轉(zhuǎn)換成Powershell來處理則變得非常簡單。

?SQL 任務(wù)

????? 把Python轉(zhuǎn)換成PowerShell最簡單的任務(wù)就是對多臺服務(wù)器執(zhí)行一條語句。在這些例子中基本的步驟如下:

  • 為每臺服務(wù)器讀取數(shù)據(jù)庫服務(wù)器清單

  • 創(chuàng)建一個(gè)表用于存儲結(jié)果

  • 建立與服務(wù)器的連接

  • 執(zhí)行查詢并格式化查詢結(jié)果

  • ?

    ?????檢查多臺服務(wù)器上的SQLServer版本

    ????????? 我運(yùn)行如下腳本來確定,所有服務(wù)器是否處于公司規(guī)定的補(bǔ)丁級別:

    #?SQLVer.ps1#?usage:?./SQLVer.ps1??#?Check?SQL?versionforeach?($svr?in?get-content?"C:\data\AllServers.txt"){$con?=?"server=$svr;database=master;Integrated?Security=sspi"$cmd?=?"SELECT?SERVERPROPERTY('ProductVersion')?AS?Version,?SERVERPROPERTY('ProductLevel')?as?SP"$da?=?new-object?System.Data.SqlClient.SqlDataAdapter?($cmd,?$con)$dt?=?new-object?System.Data.DataTable$da.fill($dt)?|?out-null$svr$dt?|?Format-Table?-autosize}

    下面的這個(gè)腳本遵循我用于對多臺服務(wù)器執(zhí)行SQL腳本的標(biāo)準(zhǔn)模板。它用foreach循環(huán)讀取服務(wù)器清單,連接到服務(wù)器和執(zhí)行一個(gè)返回用戶數(shù)據(jù)庫名稱的SQL查詢。為了這篇文章,我已經(jīng)編輯過例子的格式,注釋用綠色,PowerShell代碼用藍(lán)色,SQL用紅色。

    核對實(shí)際的數(shù)據(jù)庫目錄和內(nèi)部數(shù)據(jù)庫目錄

    每個(gè)月我都要核對實(shí)際的數(shù)據(jù)庫目錄和一個(gè)被其它應(yīng)用程序作為資源引用的內(nèi)部開發(fā)的數(shù)據(jù)庫目錄系統(tǒng)。

    #?inv.ps1#?usage:?./inv.ps1#?Database?inventoryforeach?($svr?in?get-content?"C:\data\AllServers.txt"){$con?=?"server=$svr;database=master;Integrated?Security=sspi"$cmd?=?"SELECT?name?FROM?master..sysdatabases?WHERE?dbid?>?4?AND?name?NOT?IN?('tracedb','UMRdb','Northwind','pubs','PerfAnalysis')?ORDER?BY?name"$da?=?new-object?System.Data.SqlClient.SqlDataAdapter?($cmd,?$con)$dt?=?new-object?System.Data.DataTable$da.fill($dt)?|?out-null$svr$dt?|?Format-Table?-autosize}

    這個(gè)查詢按服務(wù)器排序,返回非微軟(Non-Microsoft supplied,我猜想作者是指SqlServer 系統(tǒng)數(shù)據(jù)庫)提供的數(shù)據(jù)庫名稱。之后,我會(huì)將之與一份數(shù)據(jù)庫目錄系統(tǒng)產(chǎn)生的報(bào)表進(jìn)行對比。

    ?

    從SysAdmin角色中移除BULTIN\Administrator

    這個(gè)腳本定義了一個(gè)函數(shù)而不是foreach循環(huán),允許我在任何服務(wù)器上從SysAdmin角色中移除BULTIN\Administrator組。僅鍵入:

    rmba ServerName

    此函數(shù)接受一個(gè)參數(shù),與服務(wù)器建立連接,然后執(zhí)行sp_dropsrvrolememeber系統(tǒng)存儲過程。

    #?Remove?BUILTIN\Administrators?from?sysadmin?rolefunction?rmba?($s){$svr="$s"$cn?=?new-object?System.Data.SqlClient.SqlConnection"server=$svr;database=master;Integrated?Security=sspi"$cn.Open()$sql?=?$cn.CreateCommand()$svr$sql.CommandText?=?"EXEC?master..sp_dropsrvrolemember?@loginame?=?N'BUILTIN\Administrators',?@rolename?=?N'sysadmin';"$rdr?=?$sql.ExecuteNonQuery();}

    這個(gè)腳本節(jié)省我的時(shí)間,因?yàn)槲也槐匾D(zhuǎn)到SSMS去完成這個(gè)任務(wù)。在SMO章節(jié)中您會(huì)發(fā)現(xiàn)兩個(gè)其它我創(chuàng)建的函數(shù),它們用來列出BULTIN\Administrator和服務(wù)器本地管理員的成員。

    轉(zhuǎn)載于:https://blog.51cto.com/joetang/1607117

    總結(jié)

    以上是生活随笔為你收集整理的为什么这个SQL Server DBA学习PowerShell--SQL任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。