[29] Window PowerShell DSC 学习系列----如何备份数据库和解决一个MS Server 2008上的大坑?

原创 2017年05月24日 20:34:29

有的时候我们需要定期的备份数据库,而DSC刚好就能非常好的做这个事情。DSC中有一个xSQLServer Module,里面提供了许多操作数据库的方法。但是里面没有任何一个DSC Resource能够备份数据库;所有只能通过另外一种比较委婉的方式:xSQLServerScript的DSC Resource来执行SQL语句而备份数据库。

xSQLServerScript提供了下面的参数:

      [Parameter(Mandatory = $true)]
        [System.String]
        $ServerInstance,

        [Parameter(Mandatory = $true)]
        [System.String]
        $SetFilePath,

        [Parameter(Mandatory = $true)]
        [System.String]
        $GetFilePath,

        [Parameter(Mandatory = $true)]
        [System.String]
        $TestFilePath,

        [System.Management.Automation.PSCredential]
        [System.Management.Automation.Credential()]
        $Credential,

        [System.String[]]
        $Variable

下面提供一个具体使用的例子:

<#
.EXAMPLE
    This example shows how to run SQL script using SQL Authentication.
#>

Configuration Example
{
    param(
        [Parameter(Mandatory = $true)]
        [PSCredential]
        $SqlCredential
    )

    Import-DscResource -ModuleName xSQLServer

    Node localhost
    {
        xSQLServerScript 'RunSQLScript'
        {
            ServerInstance = 'localhost\SQL2016'
            Credential = $SqlCredential

            SetFilePath = 'C:\DSCTemp\SQLScripts\Set-RunSQLScript.sql'
            TestFilePath = 'C:\DSCTemp\SQLScripts\Test-RunSQLScript.sql'
            GetFilePath = 'C:\DSCTemp\SQLScripts\Get-RunSQLScript.sql'
            Variable = @("FilePath=C:\temp\log\AuditFiles")
        }
    }
}

 备份SQL数据的脚本可以写在:Test-RunSQLScript.sql中,比如:

backup database  TestDSC to disk = 'device.bak'

恭喜你,你完成了数据库的备份。但是不要高兴的太早,上面生成的DSC MOF文件在MS SQL Server 2012 以及以上版本都能正常运行,但是在MS SQL Server 2008 R2版本以前是运行不成的。其会报出类似于下面的这些错误提示:

VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManage
r,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer sqlservername with user sid S-1-5-21-4070628030-840234078-891559575-1109.
VERBOSE: [sqlservername]: LCM: [ Start Set ]
VERBOSE: [sqlservername]: [DSCEngine] Importing the module C:\Program Files\WindowsPowerShell\Modules\xSQLServer\7.0.0.0\DscResour
ces\MSFT_xSQLServerScript\MSFT_xSQLServerScript.psm1 in force mode.
VERBOSE: [sqlservername]: LCM: [ Start Resource ] [[xSQLServerScript]BackUpDB]
VERBOSE: [sqlservername]: LCM: [ Start Test ] [[xSQLServerScript]BackUpDB]
VERBOSE: [sqlservername]: [[xSQLServerScript]BackUpDB] Importing the module MSFT_xSQLServerScript in force mode.
VERBOSE: [sqlservername]: [[xSQLServerScript]BackUpDB] 2017-05-05_10-54-03: Module SqlServer not found, trying to use older SQLPS
module.
Unable to find type [Microsoft.SqlServer.Management.PowerShell.SqlPowerShellSqlExecutionException].
+ CategoryInfo : InvalidOperation: (Microsoft.SqlSe...cutionException:) [], CimException
+ FullyQualifiedErrorId : TypeNotFound
+ PSComputerName : localhost


VERBOSE: [sqlservername]: LCM: [ End Test ] [[xSQLServerScript]BackUpDB] in 0.4060 seconds.
The PowerShell DSC resource '[xSQLServerScript]BackUpDB' with SourceInfo '::16::9::xSQLServerScript' threw one or more non-terminating errors while running
the Test-TargetResource functionality. These errors are logged to the ETW channel called Microsoft-Windows-DSC/Operational. Refer to this channel for more
details.
+ CategoryInfo : InvalidOperation: (:) [], CimException
+ FullyQualifiedErrorId : NonTerminatingErrorFromProvider
+ PSComputerName : localhost


VERBOSE: [sqlservername]: LCM: [ End Set ]
The SendConfigurationApply function did not succeed.
+ CategoryInfo : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException
+ FullyQualifiedErrorId : MI RESULT 1
+ PSComputerName : localhost


VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 4.183 seconds

问题的原因:

是因为安装了SQL Server 2008 R2之后,里面不支持Invoke-sqlcmd,而Invoke-sqlcmd属于sqlps模块。解决方式是安装sqlps模块并显式的导入sqlps模块,具体步骤如下:

@下载 Microsoft® SQL Server® 2012 Feature Pack(https://www.microsoft.com/en-us/download/confirmation.aspx?id=35580

@安装下面的顺序安装上面下载下来的安装包。

Microsoft® System CLR Types for Microsoft® SQL Server® 2012 (SQLSysClrTypes.msi)

Microsoft® SQL Server® 2012 Shared Management Objects (SharedManagementObjects.msi)

Microsoft® Windows PowerShell Extensions for Microsoft® SQL Server® 2012 (PowerShellTools.msi)

@运行Import-Module sqlps这个命令。

这样你就能在MS SQL Server 2008上面也能运行成功了。


参考文献:

http://blog.smu.edu/wis/2012/11/26/sql-server-powershell-module-sqlps/

https://github.com/PowerShell/xSQLServer/blob/dev/Examples/Resources/xSQLServerScript/2-RunScriptUsingWindowsAuthentication.ps1




因为本文的大部分文章都是熬夜写出来的,如果您觉得文章对您有帮助,请打赏支持本人的写作热情。


@微信打赏

版权声明:本文为博主原创文章,未经博主允许不得转载。

[26]Window PowerShell DSC学习系列----如何更换Pull服务器数据库为SQL Server数据库

上节我们提到了如何把PowerShell DSC的数据库换成Access;DSC Pull服务器当前的版本对MS SQL Server是不支持的,该怎么办?另外如果我们需要对Pull服务器建立负载均衡...

[7] Window PowerShell DSC 学习系列----如何被管理的设置节点注册到Pull Server?

在上一节,[6] Window PowerShell DSC 学习系列----如何安装最新的PowerShell DSC 5.1 Pull Server?笔者聊到了如何安装Pull Server。那么...

[20]Window PowerShell DSC学习系列---- start-dscconfiguration 中遇到 Access Denied的解决方案

当我们执行start-DscConfiguration -computername psdsc-window201 -Path c:\DSC\TestFile -Wait -Verbose -forc...

[24]Window PowerShell DSC学习系列---- 如何保护MOF文件里面存储的密码?

在上节笔者分享了[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?MOF文件里面能直接存储明文密码,这样是非常不安全的。那么有什么方式能够把MOF里面存...

[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?

我们知道,DSC的资源中,有很多的资源是需要访问文件共享目录,进入本地的用户的目录,或者为一个特定的用户安装一个MSI的安装包,修改注册表;这个时候,如果直接执行调用DSC的资源,则可能会弹出“Acc...

[10] Window PowerShell DSC 学习系列----目标节点和Pull 服务器底层通信原理剖析

在本节中,笔者将会用wireshark抓包,并分析目标节点如何和Pull 服务器通信的?注意笔者本机装的Window Management Framework 5.1,如果是其他的版本,可能请求的UR...

[9] Window PowerShell DSC 学习系列----错误诊断和分析

PowerShell DSC就像一个汽车,内部复杂,司机作为一个普通的用户在使用它,因为知道一些汽车的基本常识,所以当汽车发生一些简单的故障时,可以通过汽车自身带的仪表仪器诊断问题出在哪方面,也可以借...

[6] Window PowerShell DSC 学习系列----如何安装最新的PowerShell DSC 5.1 Pull Server?

前面的5个章节做了很多的铺垫,包括Powershell DSC是什么? 能干什么? 其包含了推模式(push)和拉模式(Pull)。 而且笔者也描述了PowerShell DSC的配置文件(Confi...

[2] Window PowerShell DSC 学习系列----DSC的资源(Resource)以及配置和格式(Configuration && Sytax )

这个章节主要来讲述DSC的资源(Resource)以及配置和格式(Configuration && Sytax )。...

[1] Window PowerShell DSC 学习系列----DSC的定义和2种架构模式

PowerShell DSC是PowerShell的一部分,是一个新的管理平台,英文全称为,PowerShell Desired Status Configuration,翻译成中文就是理想管理配置状...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[29] Window PowerShell DSC 学习系列----如何备份数据库和解决一个MS Server 2008上的大坑?
举报原因:
原因补充:

(最多只允许输入30个字)