SQL सर्वर से बात करने के लिए मुझे किस PowerShell तकनीक का उपयोग करना चाहिए?


29

मैं अंततः पुराने KornShell स्क्रिप्ट्स को SQL उदाहरण मॉनिटर के लिए उपयोग करने के लिए PowerShell का उपयोग करना चाहूंगा। हालाँकि, मुझे मुश्किल समय आ रहा है, फिर भी मेरे दिमाग को अलग-अलग तरीकों से मिल रहा है जो कि PowerShell वास्तव में SQL सर्वर से बात कर सकते हैं। यकीन नहीं है कि यह उन सभी में से एक है, लेकिन यहां 5 पूरी तरह से अलग तरीके हैं जो मैं एक SQL सर्वर के संस्करण को क्वेरी कर सकता हूं:

1. SQLConnection .NET क्लास

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "Select @@version as SQLServerVersion"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]

2. WMI प्रदाता

$sqlProperties = Get-WmiObject 
    -computerName "MyServer"
    -namespace root\Microsoft\SqlServer\ComputerManagement10
    -class SqlServiceAdvancedProperty
    -filter "ServiceName = 'MSSQLSERVER'"
$sqlProperties.VERSION

3. एस.एम.ओ.

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$smo-var = New-Object ('Microsoft.SqlServer.Management.Smo.Server') 'MyServer\instancename'
$smo-var.VersionString

4. PSDrive

Set-Location SQLSERVER:\SQL\MyServerName\
$server = Get-Item Default
$server.get_VersionString()

5. चालान-SQLCMD

Invoke-Sqlcmd -Query "SELECT @@version" -ServerInstance "MyServer"

विभिन्न परिदृश्यों के लिए मुझे इनमें से कौन सी तकनीक का उपयोग करना है, यह तय करने के लिए मुझे कैसे जाना चाहिए। क्या प्रत्येक के पक्ष / विपक्ष हैं? क्या इनमें से कुछ पॉवरशेल 1.0 तकनीकें 2.0 में सुपरक्यूटेड थीं? क्या उनमें से कुछ SQL 2000 या 2005 सर्वर के साथ संचार करने के लिए काम नहीं करेंगे?

एक स्तर पर, मुझे यकीन है कि उत्तर "जो भी काम करता है" का उपयोग करें, लेकिन किसी के लिए Powershell के लिए नया, इसके बहुत सारे उदाहरणों को देखने के लिए भ्रमित करना जैसे # 1 ऊपर, जब वह सबसे लंबा है और (मेरे दिमाग में) कम से कम "powerhell-like" उदाहरण।

यदि यह प्रासंगिक है, तो थोड़ी अधिक जानकारी: SQL सर्वर जो वास्तव में मॉनिटर स्क्रिप्ट चला रहा है, SQL 2005 है, लेकिन इसका उपयोग SQL 2000 से 2008R2 तक कई उदाहरणों से कनेक्ट करने के लिए किया जाता है।


1
सबसे पहले, महान सवाल और बहुत गहन। +1। मैं शायद इस सूची को उनमें से दो तक सीमित करूंगा: ADO.NET (आपका पहला एक), और एसएमओ। WMI थोड़ा अनाड़ी हो सकता है और, भले ही यह कम कीस्ट्रोक्स हो, यह पहली नज़र में इतना "स्पष्ट" नहीं है कि क्या होगा।
थॉमस स्ट्रिंगर

जवाबों:


7

जाहिर है, इस का एक बहुत सरल व्यक्तिगत विकल्प के लिए devours है। यहां मेरे अपने, व्यक्तिगत, युक्तिकरण हैं।

मैं PSH v 1.0 के बाद से SQL SQL के साथ Powershell का उपयोग कर रहा हूं, और इससे पहले कि SQL Server ने आधिकारिक तौर पर इसे एकीकृत करना शुरू कर दिया। (जब मैंने PSH के साथ शुरुआत की, तो मैं SQL Server 2000 और 2005 सर्वर का प्रशासन कर रहा था।) इसलिए, मैंने SMO के साथ सीखा (या यह थोड़ा पुराना अवतार है, जिसका नाम फिलहाल मुझसे बच जाता है) और .Net और मैं इसका उपयोग करता हूं। उन्हें। मैं आम तौर पर एसएमओ की ओर झुकता हूं, क्योंकि यह कुछ चीजों को बहुत आसान बनाता है, जैसे ऑब्जेक्ट्स को स्क्रिप्ट करना। मेरा अपना कोड एसएमओ का कुछ समय और .नेट का कुछ समय का उपयोग करता है। मुझे लगता है कि उदाहरण के लिए, सरल परिणाम सेट प्राप्त करने के लिए .Net का उपयोग करना आसान है।

मुझे लगता है कि यदि आपके पास मौजूदा TSQL स्क्रिप्ट बहुत हैं, तो Invoke-SQLCMD अधिक समझ में आता है। यदि आप स्ट्रिंग्स बना रहे हैं और उन्हें -Query के माध्यम से निष्पादित कर रहे हैं, तो यह गड़बड़ होने वाला है। यदि आपके पास एक अच्छी समझ है कि Powershell .Net और SMO के साथ कैसे काम करती है, तो इन्वोक-एसक्यूसीएमडी का उपयोग करके, जब आपके पास चलाने के लिए एक स्क्रिप्ट फ़ाइल होती है, तो यह आसान होता है।

मैंने हमेशा PSDrive को क्लिंक पाया है और महसूस किया है कि उन्होंने इसे लागू किया है क्योंकि वे "सब कुछ एक फाइल सिस्टम" विचार की तरह देख सकते हैं। मुझे पता है कि * निक्स लोग प्यार करते हैं \ proc और ऐसे, लेकिन मुझे लगता है कि इस निहितार्थ की तरह लगता है मजबूर। मुझे लगता है कि PSDrive ठीक है, शायद अच्छा भी हो अगर आप यूआई से नफरत करते हैं, चीजों की खोज के लिए, लेकिन मैंने कभी ऐसी स्क्रिप्ट नहीं लिखी है जो इसका उपयोग करती हो।

मैंने कभी किसी को WMI प्रदाता का उपयोग करते नहीं देखा। तो, यह मेरी आखिरी पसंद होगी।

इसलिए, मैं एसएमओ के साथ नेतृत्व करूंगा और जब यह हैंडियर होगा तब .Net पर वापस आ जाएगा।


1
कुछ के साथ ध्यान में रखना है Invoke-SQLCmdकि यह बहुत इनायत से कनेक्शन संभाल नहीं है। यदि आपके पास बहुत से अलग प्रश्नों के साथ एक स्क्रिप्ट है, तो कनेक्शन कायम / पुन: उपयोग किया जा सकता है या बस गिराया नहीं जा सकता है, जिसके कारण अनपेक्षित समस्याएँ हो सकती हैं, जिसमें #TEMPतालिकाएँ, या संसाधन समस्याएँ हैं।
JNK

3

नए काम के लिए 4, मौजूदा स्क्रिप्ट या स्थानों के पुन: उपयोग के लिए 5 T-SQL ऑब्जेक्ट-आधारित / पॉश शैली कोड की तुलना में अधिक समझ में आता है। मुझे वे सबसे अच्छे लगते हैं क्योंकि वे स्पष्ट और सरल हैं।


2

मैं SQLPS का उपयोग करने के लिए अगर मैं कर सकता हूँ की ओर झुकाव करते हैं। यह सरल है और अगर मैं इसे लिपियों में उपयोग करता हूं तो यह पढ़ना बहुत आसान है और एसएमओ का उपयोग करने की तुलना में कम टाइपिंग। एसएमओ के पास इसका स्थान है कि इसमें शक्ति का एक अच्छा हिस्सा है, लेकिन अगर आप इसके साथ अपरिचित हैं तो इसका उपयोग करने के लिए कई बार भ्रमित हो सकते हैं।

मुझे लगता है कि SQL सर्वर संस्करण रिलीज़ होते ही SQLPS को बेहतर बनाया जाएगा। विशेष रूप से चूंकि SQL Server 2012 SQLPS एक स्नैपिन होने के बजाय मॉड्यूलर नहीं है। यह Microsoft को सर्विस पैक या हॉटफिक्सेस के माध्यम से SQLPS के साथ सुधार या सुधार को धकेलने की अनुमति देने जा रहा है, शायद CUs भी।

फिर SQLPSX की तरह सामुदायिक प्रसाद भी हैं , जिसमें उस SMO कोड का एक बहुत कुछ है जो पहले से ही cmdlets और फ़ंक्शन के रूप में आपके लिए तैयार है। जो मैं पहिया का फिर से आविष्कार नहीं करने के बारे में हूँ :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.