1. Trang chủ
  2. » Công Nghệ Thông Tin

Microsoft SQL Server 2008 R2 Unleashed- P57 ppt

10 324 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 421,05 KB

Nội dung

ptg 504 Either during the initial installation of SQL 2008 or afterward while changing the installed features, you are able to add the SQL Server–specific PowerShell features by using the setup utility. The Management Tools-Basic feature must be added, as shown in Figure 17.3. CHAPTER 17 Administering SQL Server 2008 with PowerShell The Management Studio add-on is also required to get the PowerShell-specific features installed. This specific feature adds the following: . Management Studio—The graphical user interface for managing SQL Server 2008 . SQLCMD—The utility that SQL scripters should already be familiar with . SQL Server PowerShell provider—The PowerShell-specific extra functionality NOTE An added bonus is that you can install Management Studio by itself on either the serv- er or another remote system, and be able to administer your SQL Server database remotely. Consideration should be given to whether the SQL Server is set up for remote connections, and the appropriate firewall changes have been made to the network and on the database server, if applicable. FIGURE 17.3 Installing the PowerShell features. Download from www.wowebook.com ptg 505 PowerShell in SQL Server 2008 17 Accessing PowerShell Now that you have added the SQL Server–specific PowerShell features, you can access a SQL Server PowerShell session. NOTE From this point on, we make the distinction between PowerShell and SQL Server PowerShell. The details are discussed shortly, but for now PowerShell is the basic or default PowerShell console, and SQL Server PowerShell is a more restricted version of PowerShell that has all the SQL Server–specific PowerShell features packaged within it. SQL Server PowerShell can be accessed in either of two ways: . You can open SQL Server PowerShell via the SQL Server Management Studio by right-clicking on a particular object in the Object Explorer and selecting Start PowerShell, as shown in Figure 17.4. This way is handy because it provides a prompt in the SQL provider (which is discussed shortly) in the location of the object that was right-clicked. . You also can open SQL Server PowerShell directly from regular DOS or a regular PowerShell console by simply navigating to the appropriate location, as shown in Figure 17.5. FIGURE 17.4 Accessing PowerShell via SSMS. Download from www.wowebook.com ptg 506 CHAPTER 17 Administering SQL Server 2008 with PowerShell NOTE When you first open the shell, some errors may appear on the screen, which simply indicates that PowerShell execution policy should be set. This topic was covered near the beginning of the chapter. The execution policy for SQL Server PowerShell should also be RemoteSigned, at least. SQL Server PowerShell When you first get into SQL Server PowerShell, you might notice that this is a restricted version of the default PowerShell console. In other words, several of the core cmdlets are not available in SQL Server PowerShell, and others might not work exactly the same way. For example, invoking the Get-Command cmdlet alone with no other arguments does not list all the available commands. NOTE Running Get-Command in SQL Server PowerShell without any parameters might gener- ate the following message: Get-Command : Object reference not set to an instance of an object. FIGURE 17.5 Accessing PowerShell using sqlps.exe. Download from www.wowebook.com ptg 507 PowerShell in SQL Server 2008 17 However, other invocations of this command work fine (such as the other examples of Get-Command in this section). Microsoft has identified this issue but as of this writing has not released a fix for it. Because the error occurs only within the SQL provider, the current workaround is to switch from the SQL Server provider to a different drive (such as C:\) before running Get-Command: PS SQLSERVER:\> cd c:\ PS C:\> Get-Command <output deleted> PS C:\> cd SQLSERVER: PS SQLSERVER:\> NOTE Profiles were discussed earlier in this chapter. The SQL Server PowerShell minishell also has its own profile, and you can manage it by simply typing notepad $profile in SQL Server PowerShell. A prompt may come up that the file cannot be found and ask- ing whether it should be created. SQL Provider Earlier in this chapter, the term provider was briefly introduced. The SQL team decided to implement a SQL Server provider. What this provides is a layout of the SQL object struc- ture, which resembles that of a regular file system. You use the SQL provider when accessing SQL Server PowerShell via SQL Ser ver Management Studio: depending on what object you right-click to access SQL Server PowerShell, a prompt opens in the context of that particular object. Basically, the way certain commands work is also affected by the current location within the SQL Server provider. Here are two different examples of being placed in different locations within the SQL Server provider. In the first example, the AdventureWorks2008R2 database was right- clicked within SSMS, as shown in Figure 17.6. In the second example, a specific table (Person.Address) within the AdventureWorks2008R2 database was right-clicked, as shown in Figure 17.7. When you start the SQL Server PowerShell minishell by simply invoking sqlps.exe as seen earlier, a prompt opens at the root of the SQL Server provider. NOTE Some of the core cmdlets like Get-Item, Remove-Item, and New-Item are typically used within providers to retrieve, remove, and create items, respectively. Within the SQL Server provider, creating items using the New-Item cmdlet is currently not support- ed. Other methods are required to actually create items. Download from www.wowebook.com ptg 508 CHAPTER 17 Administering SQL Server 2008 with PowerShell FIGURE 17.6 SQL Server provider at the database level. FIGURE 17.7 SQL Server provider at the table level. NOTE Four SQL-based providers are actually available in SQL Server 2008 and six in SQL Server 2008 R2. We look only at the SQL provider that provides functionality for the database engine itself in any detail in this chapter. Refer to the SQL Server Books Online documentation for more information on the other providers (SQLPolicy, SQLRegistration, DataCollection, Utility, and DAC). The Utility and DAC providers are available only in SQL Server 2008 R2. SQL Cmdlets A number of cmdlets available in SQL Server PowerShell are part of the basic PowerShell functionality. However, within SQL Server PowerShell, five additional cmdlets are available only after the minishell is started (or if the snap-in is loaded manually, which is not covered in any detail here): . Invoke-PolicyEvaluation—A cmdlet that evaluates a SQL Server Policy-Based Management policy (or policies) against a target server. . Invoke-SqlCmd—A cmdlet that runs any regular T-SQL command and any languages and commands supported by the sqlcmd utility, which may be more familiar to most users. Download from www.wowebook.com ptg 509 Step-By-Step Examples 17 . Encode-SqlName—A cmdlet that helps to encode SQL Server identifiers into a format that PowerShell can use. . Decode-SqlName—A cmdlet that helps to return the original SQL Server identifiers from a value previously given by the Encode-SqlName cmdlet. . Convert-UrnToPath—A cmdlet that converts the SMO Uniform Resource Name to a SQL Server provider path. Later, examples of using the core cmdlets are provided, as well as the first two cmdlets introduced in the preceding list. NOTE For more details on the three other cmdlets not discussed here, see the built-in help for more information and examples. NOTE The intent is to ship more cmdlets as part of SQL-PowerShell in the future after more database users become more familiar with SQL Server PowerShell. SQL Server Agent Support PowerShell has been integrated into the SQL Server Agent subsystem. In other words, you can create jobs that call PowerShell-specific commands to run. Consult SQL Server Books Online for more details on incorporating PowerShell into your SQL Server Agent job steps. Step-By-Step Examples The following sections provide examples of using PowerShell both for general tasks and for SQL Server 2008–specific tasks. We expand on some of the basic concepts introduced earlier with SQL Server 2008–specific examples. General Tasks Often you might be required to send out emails containing particular reports and/or output from commands run. To do so, you use features from the .NET Framework via PowerShell to send out emails, as shown in here: Function Send-Mail { param([string]$To,[string]$From,[string]$Subject, ` Download from www.wowebook.com ptg 510 CHAPTER 17 Administering SQL Server 2008 with PowerShell [string]$Body,[string]$File,[string]$SmtpServer) If($SmtpServer -eq ““){ $SmtpServer = “FQDN of your SMTP server here” } $Smtp = New-Object System.Net.Mail.SMTPclient($SmtpServer) $Message = New-Object System.Net.Mail.MailMessage($From,$To,$Subject,$Body) If ($File -ne ““) { $Attach = New-Object System.Net.Mail.Attachment $File $Message.Attachments.Add($Attach) } $smtp.Send($message) } You can enter the preceding code into a script or directly to the console. If you type the code in the console, you must press the Enter key twice (once to close the function and another time on an empty line) before the PowerShell prompt returns. In the preceding code listing, functionality from the .NET Framework is used to get SMTP functionality. A function is used so that this code could be easily copied as required into new scripts, and so on. Calling the function is then easy, and passing the command-line arguments is shown here (the PowerShell prompt can vary depending on whether the default PowerShell is used or the new SQL minishell): PS>Send-Mail -To “end_user@user.com “ -From “user@user.com” –Subject “Automated Email” -Body “Testing” -File “C:\reports\report.txt” NOTE You mig ht n eed to co nfigure some antivirus program s to allow th e PowerShell.exe process (or sqlps.exe) to “talk” over the SMTP protocol port (TCP 25). Scheduling Scripts From time to time, it may be useful to have a method to schedule PowerShell scripts to run automatically based on a particular schedule (when the SQL Server Agent isn’t avail- able locally, for example). You can easily view the method to call PowerShell scripts by simply typing powershell.exe /? from a PowerShell session, as shown here: PS>powershell.exe /? PowerShell -Command “& {Get-EventLog -LogName security}” Download from www.wowebook.com ptg 511 Step-By-Step Examples 17 Only a very small section of the text displayed is shown in this example. The powershell.exe can be used for scheduling regular PowerShell scripts. sqlps.exe works similarly, and you can also access its help by passing a slash and question mark (/?) to the command: PS SQLSERVER:\> sqlps.exe /? sqlps [ [ [-NoLogo] [-NoExit] [-NoProfile] [-OutputFormat {Text | XML}] [-InputFormat {Text | XML}] ] [-Command { - | <string> [ <command_parameters> ] | <script_block> [ -args <argument_array> ] } ] ] [ -Help | -?] -NoLogo Do not display the copyright banner on startup. -NoExit Keep running after completing all startup commands. -NoProfile Do not load a user profile. -OutputFormat Format the output of all objects as either text strings (Text) or in a serialized CLIXML format (XML). -InputFormat The input from stdin is formatted as either text strings (Text) or in a serialized CLIXML format (XML). -Command sqlps runs the commands specified and then exits, unless -NoExit is also specified. Do not specify other characters after the -Command switch, they will be read as command arguments. - Read input commands from the keyboard by using stdin. <string> [ <command_parameters> ] Specifies a string containing the PowerShell commands to be run. Use the format “&{<command>}”. The quotation marks identify a string and the invocation operator (&) causes sqlps to run the command. <script_block> [ -args <argument_array> ] Specifies a block of PowerShell commands to be run. Use the format {<script_block>}. -Help | -? Show the syntax summary help. Download from www.wowebook.com ptg 512 CHAPTER 17 Administering SQL Server 2008 with PowerShell NOTE How do you know whether to use powershell.exe or sqlps.exe when scheduling jobs? If you’re using anything relating to SMO and/or the SQL cmdlets in the script, sqlps.exe would seem to be easier to use because all the prerequisites to using SMO and the SQL cmdlets are already loaded, which can save several lines in a script. As a reminder, the SQL minishell is limited in its functionality, so powershell.exe may be required in particular if you need to load some PowerShell functionality from another application, such as Exchange. As discussed briefly earlier, SQL Server Agent can also be used to run scheduled PowerShell commands. Common OS-Related Tasks Now let’s look at some more OS-related tasks, while keeping our focus on SQL Server–related tasks. Let’s check the status of the SQL Server service using the Get-Service cmdlet in the regular PowerShell console: PS>Get-Service “mssqlserver” Status Name DisplayName Stopped MSSQLSERVER SQL Server (MSSQLSERVER) PS> NOTE When multiple instances are in use, the service name is something like MSSQL$INSTANCE01. To start such an instance from PowerShell or even the SQL min- ishell, you would have to use the following syntax for the service name: MSSQL`$INSTANCE01. The dollar sign ($) character is escaped so that PowerShell does- n’t try to interpret this as the beginning of a variable when the string is parsed. The service is stopped. When you use the pipeline feature of PowerShell, the service is started: PS>Get-Service “mssqlserver”|Start-Service WARNING: Waiting for service ‘SQL Server (SQLSERVER) Download from www.wowebook.com ptg 513 Step-By-Step Examples 17 (MSSQLSERVER)’ to finish starting WARNING: Waiting for service ‘SQL Server (SQLSERVER) (MSSQLSERVER)’ to finish starting PS> This example demonstrates using the pipeline to chain commands together. Alternatively, you could use Start-Service directly: PS>Start-Service “mssqlserver” The difference between the two methods demonstrates some of the power in PowerShell. When you use Get-Service, a service object is retrieved. When you use the pipeline, this object is passed to Start-Service. Start-Service is built to basically accept input from the pipeline and autofills its parameters based on what was input; thus, it knows to start the SQL Server service. NOTE You could us e SQL Ser ver PowerShell, but be cause SQL Ser ver wasn’t star ted, Management Studio would not have been able to connect, and you could not open SQL Server PowerShell by right-clicking. You could use PowerShell to start sqlps.exe, though, and then you could use the Get-Service and Start-Service cmdlets to start SQL Server. If you use SQL Server PowerShell by calling sqlps.exe directly from within a default PowerShell console, the SQL Server could still be started, but a con- nection wouldn’t be automatically made to the default instance of the database. Most administrators have probably already used the Windows Task Manager to look at the SQL Server processes. Perhaps it was to determine whether SQL seemed to be using too much memory or some other issue. PowerShell provides the Get-Process cmdlet, shown here, to look at running processes: PS>Get-Process sqlservr Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName 318 45 64156 44288 1554 2.03 572 sqlservr PS> Another common OS-related task is to look for events in the Windows application event log: PS>Get-EventLog Application -New 10 PS>Get-EventLog Application -New 10| ` Download from www.wowebook.com . in SQL Server 2008 and six in SQL Server 2008 R2. We look only at the SQL provider that provides functionality for the database engine itself in any detail in this chapter. Refer to the SQL Server. of the SQL Server service using the Get-Service cmdlet in the regular PowerShell console: PS>Get-Service “mssqlserver” Status Name DisplayName Stopped MSSQLSERVER SQL Server (MSSQLSERVER). providers (SQLPolicy, SQLRegistration, DataCollection, Utility, and DAC). The Utility and DAC providers are available only in SQL Server 2008 R2. SQL Cmdlets A number of cmdlets available in SQL Server

Ngày đăng: 05/07/2014, 02:20

TỪ KHÓA LIÊN QUAN