如何高效的使用PowerShell备份数据库
初始脚本Get-SqlDatabase -ServerInstance localhost |-ne } |-SqlDatabase
$RegisteredSQLs IN dir -recurse SQLSERVER:SQLRegistrationHost | {$_.Mode -ne -SqlDatabase -ServerInstance $RegisteredSQLs.Name |-ne } |-
这是PowerShell最为重要的技巧之一Get-SqlDatabase -ServerInstance localhost |-GridView -PassThru |-SqlDatabase 对我而言-PassThru 参数是个非常有用的命令参数。方便我们仅仅通过一个参数修改完成命令。上面的脚本中这个参数其实就是数据库名称。进一步而言也可能是数据表,SQL Server Agent Jobs,CSV 文件等等。 Out-GridView 如何使用下面这个例子使用了Out-GridView 命令,这个场景下,我选择三个数据库,然后会只备份我选择的三个。 另一个很有用的功能就是过滤。如果使用了过滤栏,将会查询每一个展示名字中包含我输入的文字的数据库。为了精确查找,我们可以点击“Add Criteria”来选择过滤的字段,这样就能只过滤数据库的名字。 接下来点击DW词条,会展示数据库查询后的结果,并高亮选中行。 一旦点击ok,将会看到4个数据库被自动备份。 PowerShell 变得更容易如果你已经相信PS至少对于热备份是更简便的备份方式,我接下来在提供几个备份选项。再次返回最上面的备份例子中,如在备份指令后添加一个-CompressionOption参数,然后空格会显示几个可选参数,如on、off、default等,如图:? 注意:这是在PowerShell ISE中,其他的编辑器可能会有不同的弹出参数的的触发。比如我尝试了在PowerShell console 中需要用“Crtl”+空格键才会触发。 Get-SqlDatabase -ServerInstance localhost |-GridView -PassThru |-SqlDatabase -CompressionOption On通过这个指定可以压缩备份结果,减少不必要的空间。 有趣的脚本参数和实践这里先要介绍一下-Script ,在备份语句的最后添加这个参数将会允许输出指令,不必等到实际执行的时候。这就让我们可以不用等到备份完成就可以看到脚本。如下图所示,其实我们的PS脚本就是封装了T-SQL脚本而已。 更多备份参数让我们看看这个指令其他的可选参数。如果我想能够了解更多信息可以使用Get-Help指令。 Get-Help -Full Backup-SqlDatabase也可以找到-ShowWindow 选项,这个参数会弹出帮助文件在一个独立窗口中。使用搜索来方便查找有用的参数。 Get-Help -ShowWindow Backup-SqlDatabase-BackupAction使用这个参数可以选择备份数据库、文件或者是日志。默认为完整备份数据库,因此如果你不指定那就为完整备份。如果打算做一个差异备份,使用-Incremental 参数。 (注意这个可选中没有差异备份,因为差异备份用的是独立参数-Incremental ) -DatabaseFile & –DatabaseFileGroup
-BackupFile现在,你已经选择了备份的类型以及备份内容。默认情况是备份为.bak后缀的文件。这是附加备份这样可以不删除文件的情况下附加备份,相应的空间占用会越来越大。这个时候你可以用-BackupFile 参数来修改路径,或者直接备份到Azure存储。 如果需要找到默认备份实例的默认备份路径,可以执行下面的命令: Get-Date -UFormat %Y%m%d%H%M <# 备份素有数据库并提供包含文件和日期的文件名 *>-SqlDatabase -ServerInstance localhost |-ne } | -SqlDatabase -DatabaSEObject $_ -CompressionOption On -BackupFile -Script} -ServerInstance & -Database我们没有提供-ServerInstance & -Database 两个参数,因为例子中使用了Get-SqlDatabase 指令已经传递了包含数据库对象的数组,$_包含了这些参数被以属性的方式保存。Backup-SqlDatabase 指令使用了-DatabaSEObject 参数默认去使用。 如果打算备份一个数据库,你可以使用下面的方式而不去调用Get-SqlDatabase。 -PassThru这里要说一下pipeline,是否已经在pS中遇到过,并且调试进程。你可以使用-PassThru 参数来看一下管道。这也是提供一个机会来看我们发出命令参数被编译为什么? Backup-SqlDatabase -ServerInstance localhost -Database msdb -Script -PassThru;?SQL Provider最后一个选项就是你可以在SQL Server PowerShell Provider中运行这个命令。能够通过打开PowerShell ISE 得到SQL Provider,然后运行导入模块 Import-Module SqlServer 或者在数据库节点中右击数据库。 这里,您可以通过输入backup-sqldatabase和想要备份的数据库的名称来备份一个数据库。如果您需要在备份完成后启动其他任务,则此选项可能是有益的。或者使用下面的代码样例来备份这个实例中的所有数据库。 If you choose to use the ISE, (or another rich PowerShell editor) to get to the SQL Provider you will want to start out like this 如果你选择使用ISE获得SQLProvider,执行下面指令: CD SQLSERVER:SQLlocalhostdefaultDatabases
总结我希望利用PS来备份数据库的指令Backup-SqlDatabase cmdlet 能够给大家提供便利。提供给大家一个比起T-sql更便捷的方式。同时可以用它来输出T-sql语句。 本文中显示的所有代码都是使用SqlServer PowerShell模块完成的,该模块使用SSMS 2016(16.5+),而我的机器运行的是PowerShell的5.1版本。除此之外我还测试了2012 在PS3.0也是可行的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |