如何高效的使用PowerShell备份数据库
初始脚本
Get-SqlDatabase -ServerInstance localhost |
Where { $_.Name -ne 'tempdb' } |
Backup-SqlDatabase
使用上面的命令我们就能每天备份数据库到指定路径去。当然,这只是一个实例,加入打算备份每一个数据库在备份在各自的数据库实例的服务器上,又该如何修改上面的语句那?
目的是批量备份多个实例的数据库,注意这里需要提前把数据库实例存储在一个地方,然后循环遍历出来,代码如下:
foreach $RegisteredSQLs IN dir -recurse SQLSERVER:\SQLRegistration\'Database Engine Server Group'\Host\ | where {$_.Mode -ne 'd'} )
{
Get-SqlDatabase -ServerInstance $RegisteredSQLs.Name |
Where { $_.Name -ne 'tempdb' } |
Backup-SqlDatabase
}
代码可是真心简短。当然这不足以促使你用PS来替代现有的数据库备份,只是提供了一个一次性备份数据库的简便方式。对于数据库的常规备份来说,你或许不会特别担心,因为这些备份可能由系统管理员或者SAN来负责。假如你的工作中包含了备份数据库,那么使用PowerShell来备份数据库就是一种值得使用的方式了,尤其是当你数据库服务器上都有PowerShell的时候。
这是PowerShell最为重要的技巧之一
接下来,考虑当需要一次性备份数据库时,大多数时候我遇到的备份都是只备份部分数据库,因此按需求从一个列表中备份数据库是一个不错的方式。型号ps有一个叫做Out-GridView的命令,方便我们做这样的操作。上面的脚本中使用where子句,这里我们可以使用Out-GridView -PassThru代替where,并保证结尾用一个“|”来结束。代码如下:
Get-SqlDatabase -ServerInstance localhost |
Out-GridView -PassThru |
Backup-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 |
Out-GridView -PassThru |
Backup-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
Backup-SqlDatabase 指令还能够备份单一数据文件或者文件组。如果选择Files作为-BackupAction 参数的可选项,你会需要增加-DatabaseFile或者 -DatabaseFileGroup ,根据数据文件或者文件组名称来备份。
-BackupFile
现在,你已经选择了备份的类型以及备份内容。默认情况是备份为.bak后缀的文件。这是附加备份这样可以不删除文件的情况下附加备份,相应的空间占用会越来越大。这个时候你可以用-BackupFile 参数来修改路径,或者直接备份到Azure存储。
如果需要找到默认备份实例的默认备份路径,可以执行下面的命令:
(Get-Item sqlserver:\sql\localhost\default\).BackupDirectory
对于备份文件的名字我一般采用日期模式,这样确保文件不会充满。使用下面来获得名字:
Get-Date -UFormat %Y%m%d%H%M
综上,我们需要添加一个循环所有备份语句指令,以便于我们可以修改备份文件名字。详细代码如下:
<# 备份素有数据库并提供包含文件和日期的文件名 *>
Get-SqlDatabase -ServerInstance localhost |
Where { $_.Name -ne 'tempdb' } | foreach{
Backup-SqlDatabase -DatabaseObject $_ -CompressionOption On -BackupFile "$($_.NAME)_db_$(Get-Date -UFormat %Y%m%d%H%M).bak" -Script}
-ServerInstance & -Database
我们没有提供-ServerInstance & -Database 两个参数,因为例子中使用了Get-SqlDatabase 指令已经传递了包含数据库对象的数组,$_包含了这些参数被以属性的方式保存。Backup-SqlDatabase 指令使用了-DatabaseObject 参数默认去使用。
如果打算备份一个数据库,你可以使用下面的方式而不去调用Get-SqlDatabase。
Backup-SqlDatabase -ServerInstance localhost -Database msdb
-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, VS Code (or another rich PowerShell editor) to get to the SQL Provider you will want to start out like this
如果你选择使用ISE获得SQLProvider,执行下面指令:
Import-Module SqlServer; CD SQLSERVER:\SQL\localhost\default\Databases\
总结
我希望利用PS来备份数据库的指令Backup-SqlDatabase cmdlet 能够给大家提供便利。提供给大家一个比起T-sql更便捷的方式。同时可以用它来输出T-sql语句。
本文中显示的所有代码都是使用SqlServer PowerShell模块完成的,该模块使用SSMS 2016(16.5+),而我的机器运行的是PowerShell的5.1版本。除此之外我还测试了2012 在PS3.0也是可行的。
如何高效的使用PowerShell备份数据库的更多相关文章
- 批量备份数据库脚本(PowerShell版)
开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...
- php备份数据库
php备份数据库原理和方法 原理 查找所有表 查找所有字段,列出所有字段名 字段类型等信息 查找所有数据 读取后注意特殊符号转换addslashes() 生成sql 把数据库格式化生成对应sql 相关 ...
- oracle 备份数据库对象(存储过程PROCEDURE,FUNCTION,VIEW,TRIGGER...)
开发过程中,需要不停的备份数据库对象, 特别是存储过程, 每次手动备份不免很低能啊 历经几次修改终于, 完美了,O(∩_∩)O哈哈~ (当然,你也可以再改简便一点~~~) select db ...
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般 ...
- Sql Server自动备份数据库,定期删除备份
//实现:每天自动备份数据库,定期删除备份 //步骤:[开始]--[所有程序]--[Microsoft SQL Server 2005]--[SQL Server Management Studio] ...
- 知方可补不足~SqlServer自动备份数据库及清理备份文件
回到目录 对于SQLSERVER这个关系型数据库来说,为了保持数据的安全,备份是必须的,当你的一个误操作导致数据丢失,这可能是灾难性的,是不被允许发生的,这时,我们必须要做好定期的备份工作,如我们可以 ...
- mysql load data infile的使用 和 SELECT into outfile备份数据库数据
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE t ...
- 出现“System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部”错误的解决方案
Sql Server2008数据库在还原时出现如下错误信息:System.Data.SqlClient.SqlError: 尚未备份数据库<数据库名称>的日志尾部.如果该日志包含您不希望丢 ...
- SQL Server 定时自动备份数据库
在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库,这篇文章介绍使用SQL Server 数据库代理中的作业定时自动备份数据库. 1.启动SQL Server代理服务,如下图: 绿色 ...
随机推荐
- HDU [P1150] Machine Schedule
二分图匹配求最小点覆盖 把两个机器作为两个集合,把每个任务当做边建图.那么所求的就是二分图的最小点覆盖. 但是最开始WA了,原因在于,题目要求的是变换的次数,也就是与0连的边需要删去. #includ ...
- BZOJ 2006: [NOI2010]超级钢琴 [ST表+堆 | 主席树]
题意: 一个序列,求k个不相同的长度属于\([L,R]\)的区间使得和最大 前缀和,对于每个r找最小的a[l] 然后我yy了一个可持久化线段树做法...也许会T 实际上主席树就可以了,区间k小值 然后 ...
- 阶段小项目2:显示bin格式图片
#include<stdlib.h>#include<stdio.h>#include<string.h>#include<error.h>#inclu ...
- 安装RabbitMQ(一)
RabbitMQ简介 RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能.健壮以及可伸缩性出名的 ...
- yii2 源码分析Action类分析 (六)
Action类是控制器的基类, <?php namespace yii\base; use Yii; /** * Action是所有控制器动作类的基类,它继承组件类 * * 动作提供了重用动作方 ...
- Maven服务器
Maven私服仓库管理: Nexus 3.0 使用nexus3.X搭建maven私服在Centos7环境中-详细教程
- PHP的 first day of 和 last day of
话不多说,先上代码(当前是2017年6月2日) echo date("Y-m-d", strtotime("2017-02 first day of")).'& ...
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压DP】题解+AC代码
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- Python基础——数据类型与基本运算【主要为除法】
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 无论是Python 3.x版本还是2.x版本,Python均支持多种数据类型,能够直接处理的数据类型包括Int类型. ...
- asp.net core 使用 swagger 生成接口文档
参考地址:http://www.cnblogs.com/daxnet/p/6181366.html http://www.jianshu.com/p/fa5a9b76f3ed 微软参考文档:https ...