sql server通过脚本进行数据库压缩全备份的方法【推荐】

来源:脚本之家  责任编辑:小易  

由于版本不同,直接附加是不行的,也不能用备份+还原的方式解决问题。 最直接简单的解决办法: 在SQL 2012中右键 数据库--任务--生成脚本 通过脚本生成向导为整个库的对象生成脚本,并设置好相关的脚本生成选项,尤其要注意的是脚本的服务器版本

问题:

生产环境的数据库可能比较大,如果直接进行全备而不压缩的话,备份集就会占用了大量磁盘空间。给备份文件的存放管理带来不便。

No1:先在行程电脑上备份:backupdatabase数据库名todisk='文件路径'然后把备件的文件复制到自己电脑上:restoredatabase数据库名fromdisk='文件路径'No2:备份远程SQLSERVER数据库到本地1知道远程MSSQLIP用户名密码2在本地MSSQL企业管器里新注

解决方案:

通过with compression显式启用备份压缩,指定对此备份执行备份压缩,覆盖服务器级默认设置。适用于 SQL Server 2008和更高版本。

No1:先在行程电脑上备份: backup database 数据库名 to disk='文件路径' 然后把备件的文件复制到自己电脑上: restore database 数据库名 from disk='文件路径' No2: 备份远程SQLSERVER数据库到本地 1 知道远程MSSQL IP 用户名 密码 2 在本地

因为相同数据的压缩的备份比未压缩备份小,所以压缩备份所需的设备 I/O 通常较少,因此通常可大大提高备份速度。

SQLServer的维护计划里面自带了备份数据库任务,但不会自动按日期命名,不方便,下面的方法是以存储过程来解决的,以sql2000为例: 首先要确认SQL Server Agent服务是在启动状态 下一步,我们来创建作业,在创建作业之前,我们需要创建备份数据

脚本:

完全可以转。 方法一:右击数据点,点属性,在“选项”中选择数据库兼容级别为SQL2005,备份或分离后即可还或附加在SQL2005上。 方法二:选择任务》生成脚本,在生成脚本选项中选择“编写数据的脚本”改为True,在“为数据库服务器版本生成脚本”一项

/* 说明:手动修改【DB名称】、要备份到的【路径和文件名】,再执行脚本 脚本来源:https://www.cnblogs.com/zhang502219048/p/11062589.html */ backup database DbName to disk = 'D:\DbName.bak' --全备 with compression; --压缩备份 go

这是金樱子,中药名。为蔷薇科植物金樱子RosalaevigataMichx.的干燥成熟果实。分布于陕西、安徽、江西、江苏、浙江、湖北、湖南、广东、广西、台湾、福建、四川、云南、贵州等地。具有固精缩尿,固崩止带,涩肠止泻之功效。常用于遗精滑精,遗尿尿频,崩漏带下,久泻久痢。中文学名金樱子别称刺榆子、刺梨子、金罂子、山石榴、山鸡头子、糖罐界植物界门被子植物门纲双子叶植物纲目蔷薇目科蔷薇科属蔷薇属种金樱子分布区域陕西、安徽、江西、江苏、浙江、湖北、湖南、广东、广西、台湾采收时间10-11月果实成熟变红时采收用量6-12g贮藏置通风干燥处,防蛀生理特性常绿攀援灌木,高可达5米;小枝粗壮,散生扁弯皮刺,

参考微软官方文档:

既然首先界定了是新能源的混合动力车,那就排除了如丰田系、本田系之类的非插电混合动力车,因为从本质上讲,此类车所使用的能源仍是传统的燃油,并未外用任何的新型能源,至于多数丰田粉所说的电动,其电的来源也是由汽车发动机本身烧油进行转换而来,本质并非新能源,而其油转电的目的是为了避免汽车非全负荷工况下的燃油利用效率过低,从而达到节油的目的,本质上还是燃油车,只是有省油机构的燃油车罢了,同马自达的创池蓝天技术殊途同归。而插电式混合动力车由于使用了新型的外部能源——电,所以国家界定了属于新能源车。既然是用电,为什么又要同燃油混合呢?这又要从汽车的发展以及电动车的充电技术说起了。在现阶段的电池及充电技术,势

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/backup-transact-sql?view=sql-server-2017

  蹄花是成都的著名小吃之一。顾名思义,就是将猪蹄用小火长时间煨制成皮裂露骨,呈“开花”状即成。  煨制蹄花,可以添加一些辅料,如:花生、蚕豆等等。  馋嘴乐今天煨制一款【原汁蹄花】,没有添加辅料,原汁原味原生态。  【原汁蹄花】的特点:汤汁清澈、口味清淡、猪蹄软烂,入口即化,是营养精品。  步骤/方法  1将处理干净的猪蹄,凉水入锅,水开后煮1-2分钟,去除异味。捞出用清水冲洗干净。2选择紫砂煲为煨制锅具。  3紫砂煲中加开水2000ml,姜片,放入洗净的猪蹄。猪蹄开水入锅,能锁住营养成分,减少营养的流失。  4选择高火键。待开锅后,盖上盖煨制。  5煨制2个小时左右的时候,揭开盖,撇净浮油

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/backup-compression-sql-server?view=sql-server-2017

人身上常常有个毛病:一是说话很罗嗦。道理很多,论点很足,但说话没有力度。人说,“说话三分靠内容,七分靠力度”。这话言过其实,但不无道理。人常常说话文绉绉的,说话时不区分对方的身份和背景,不会采用对方适合的表达形式,给人留下说话轻声细语,前后累赘,无法给人留下雷厉风行,言出必行的感觉;二是思考模式很复杂,行事缓慢。人常常希望考虑问题全面,但又常常让人觉得瞻前顾后,怕左怕右,无法决断的印象。任何思想的中心点决定于当时的社会实践。如果缺乏实践,想得多,做的少,就会出现畏首畏尾,无法决断的毛病。以上几点的危害性很大:一是影响到沟通性。人往往都愿意跟谈的来的朋友沟通,跟谈不来的普通人敷衍两句。如有上述毛

总结

以上所述是小编给大家介绍的sql server通过脚本进行数据库压缩全备份的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

sql server 怎样定期自动备份

在SQL

Server中出于数据安全的考虑,所以需要定期的备份数据库。而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求管理员

每天守到晚上1点去备份数据库。要实现数据库的定时自动备份,最常用的方式就是使用SQL Server代理中的作业。启动SQL Server

Agent服务,然后在其中新建作业,作业中添加1个备份步骤,类型是T-SQL脚本,然后在命令中输入如下SQL语句,该语句实现了对数据库

TestDB1的完整备份,备份文件在C盘Backup文件夹中,文件名就是TestDB1+当时备份的日期字符串.bak。

declare@namevarchar(250)

set@name='C:\Backup\TestDB1_'+

convert(varchar(50),getdate(),112)+'.bak'

BACKUPDATABASE[TestDB1]TO

DISK=@name

WITH NOFORMAT, NOINIT,

NAME = N'TestDB1-完整 数据库 备份',

SKIP, NOREWIND, NOUNLOAD

创建好步骤以后,接下来就是创建计划,创建计划的操作十分简单,界面上说明的很详细了,我就不多说了。另外还可以配置警报和通知,不过一般很少用这个。

使用SQL作业中执行SQL脚本进行备份的方法虽然已经很简单了,但是至少还是要去写BACKUP脚本,这点有些人觉得不爽,那有没有更简单,更懒的方法来实现数据库的自动定时备份呢?有,那就是“维护计划”。

“维护计划”是在SSMS的对象资源管理中“管理”节点下面。使用维护计划可以通过可视化的操作,只点点鼠标就可以创建数据库维护的SSIS包,然

后仍然是通过SQL Server作业的方式来运行。维护计划与前面说到的备份方法本质的不同就是:维护计划是SSIS包,上面的是T-SQL脚本。

假设我们现在有一个生产系统的数据库需要进行备份,由于数据库中的数据很多,数据文件很大,如果每次都进行完整备份那么硬盘占用了很大空间,而且备

份时间很长,维护起来也很麻烦。对此我们可以采用完整备份+差异备份的方式,每周日进行一次完整备份,每天晚上进行一次差异备份。使用差异备份可以减小备

份文件的大小,同时还可以提高备份的速度,不过缺点就是必须使用上一次完整备份的文件和差异备份的文件才能还原差异备份时刻的数据库,单独只有差异备份文

件是没有意义。

下面我来讲一下如何通过维护计划来实现完整备份+差异备份:

(1)在SSMS的对象资源管理器中右击“维护计划”,选择“维护计划向导”,系统将弹出向导窗口,如图:

这里向导已经告诉我们维护计划到底能够干什么了,其中最后一项“执行数据库备份”正是我们所需要的。

(2)点击“下一步”按钮,进入选择计划属性窗口,输入计划的名称,由于我们的计划包括2部分:完整备份和差异备份,这2部分的执行计划是不一样的,一个是一周执行一次,另一个是一天执行一次,所以要选择“每项任务单独计划”,如图:

(3)单击“下一步”按钮,选择维护任务,这里就是可以在维护计划中执行的任务,如果你想执行的任务在这里没有,那就还是不用维护计划来做,自己写SSIS包或者SQL语句吧。我们要执行的任务都在这里,选中这2个任务,如图:

(4)单击“下一步”进入选择维护任务顺序的界面,这里我们可以看到选中的任务出现在列表中,但是我们并不能调整其顺序,那是因为在步骤2中我们选

择的是每项任务单独计划,所以这2个任务是独立的,没有先后顺序可言。如果当时选择的是另一个选项,那么这里就可以调整顺序了。

(5)选中“备份数据库(完整)”然后单击“下一步”按钮,系统将转到定义完整备份任务的界面,如图:

这个界面实在太长了,我把任务栏隐藏了都显示不完,出现了滚动条,这里我们选择要进行备份的数据库,选择为每个数据库创建备份文件,文件保存在C盘

Backup目录下,扩展名是bak,出于安全起见,我们可以选中“验证备份完整性”,当然也可以不选。在SQL2008中提供了压缩备份的新特性,使得

备份文件更小,备份速度更快,这里我们就是由压缩备份。最后是选择执行计划,我这里选的是每周日晚上0点的时候执行。

(6)单击“下一步”按钮,进入差异备份任务的设置界面,和上一步的界面是一样的,操作也是一样的,计划这里我们可以选择除了周日以外的每天进行差异备份,如图:

(7)单击“下一步”按钮,进入选择报告选项,这里我们可以将这个维护计划的执行报告写入文本文件中,也可以讲报告通过电子邮件发送给管理员。如果

要发送邮件的话,那么需要配置SQL Server的数据库邮件,另外还要设置SQL

Server代理中的操作员,关于邮件通知操作员的配置网上也讲的比较多,我这里就不详述了。

(8)单击“下一步”按钮,进入“完成该向导”的界面,系统列出了向导要完成的工作,如图:

(9)单击“完成”按钮,向导将创建对应的SSIS包和SQL作业:

(10)完成后,我们再刷新下对象资源管理器,我们可以看到对应的维护计划和该计划对应的作业:

现在维护计划是创建好了,急着想看看执行后的效果如何,不需要等到晚上12点去了,在“作业”下面,右击

DbBackupPlan.Subplan_1,选择“作业开始步骤”系统便立即执行该作业,系统运行完成后,我们便可在C:\Backup文件夹下面有

我们做的完整备份的备份文件。

以上的操作可以是纯粹的无键盘操作,不用写任何脚本,只需要点点鼠标即可。

这里需要注意的是,我们如果不是周日制定的该维护计划,那么制定该维护计划前一定要做个完整备份,而且该备份至少要保留到下周,不然到时候出了问题,发现只有这几个工作日的差异备份,而上一次的完整备份又被删了,那就郁闷了。

除了使用维护计划向导以外,我们还可以直接新建维护计划,也可以修改意见创建的维护计划。我们就以修改维护计划为例。对于前面创建好的完整备份+

差异备份维护计划,现在我们需要每周对数据库备份进行一次清理,在完整备份完成后,要将1个月前的备份删除掉。那么我们只需要修改一下维护计划即可,具体

操作如下:

(1)右击我们的维护计划,在弹出式菜单中选择“修改”选项,系统将新建一个选项卡来显示当前的维护计划。如图:

左下角是可用的维护计划组件,右下面板是维护计划的流程设置面板,其上面就是该计划的子计划列表。

(2)选中Subplan_1子计划,也就是每周完整备份的子计划,将“清除历史记录”任务从工具箱中拖拽到计划面板中,然后在面板中单击“备份数据库(完整)”组件,系统将显示一个绿色的箭头,将绿色箭头拖拽到“清除历史记录”组件上,如图:

也就是说在成功完整备份了数据库后,接下来才执行清除历史记录任务。

(3)右击“清除历史记录”任务,在弹出式菜单中选择“编辑”选项,系统将弹出清除历史记录任务设置窗口,如图:

这里既可以清除历史记录日志,也可以删除硬盘上的历史数据。这里我们要删除4周前的历史备份数据,单击“确定”回到计划面板,我们可以看到原本“清

除历史记录”任务上的小红叉不见了。单击“保存”按钮,该计划便保存起来。(说明:我在SQL2008中文版虚拟机里面做的时候一旦修改维护计划,保存的

时候就报错灾难性故障,不过我本机的英文版是正常的,不知道是我虚拟机的问题还是中文版的Bug,反正在英文版里面是对的。)

这样修改后,以后我们都不用手动去删除那些很久以前的数据库备份了,系统在执行完备份后就会删除那些满足条件的备份数据。

如何使用脚本批量恢复数据库备份

蛙蛙推荐:利用WMI脚本批量恢复SQLSERVER数据库

问题提出

蛙蛙求助:以编程的方式还原sqlserver数据库问题

我有一个目录下面都是sqlserver的数据库备份文件,比如a.bak,b.bak,c.bak等,有没有办法一下把他们都还原到本地SQLSERVER数据库里面呀,过程是自动建立a,b,c这样的数据库,然后把a.bak恢复到a,b.bak恢复到b,依次类推,因为备份文件的原路径和新库的路径不一样,所以要有一些额外处理,谁能解决一下,因为这个目录下有几十个库的备份文件呢,现在我的机器新安装了一个SQLSERVER,要把他们全部恢复,当时没有分离库,所以不能直接附加.

设计方案

可以利用WMI脚本扫描存放数据库备份文件的目录,然后按照一定的规则生成一个恢复数据库的T-sql脚本文件,然后用脚本执行osql程序来执行这个脚本完成数据库恢复,这里没有使用过多的错误处理和事务的代码,因此要人为的确定数据库恢复的T-SQL语句尽量不要引发异常。

解决方案

一、我们先来看一下恢复数据库的T-SQL命令,以便理解后面通过脚本来创建T-SQL的原理

USE master

GO

--如果要创建的数据库已经存在,那么删除它

IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'article')

DROP DATABASE [article]

GO

--创建一个新数据库,要指定新建数据库的数据文件和日志文件的名称和位置,初始化大小

--增长幅度,最大值等内容

CREATE DATABASE article

ON

( NAME = N'article_dat',

FILENAME = N'd:\sql2000\MSSQL\data\article_Data.MDF',

SIZE = 1,

MAXSIZE = 50,

FILEGROWTH = 5 )

LOG ON

( NAME = N'article_log',

FILENAME = N'd:\sql2000\MSSQL\data\article_Log.LDF',

SIZE = 1MB,

MAXSIZE = 25MB,

FILEGROWTH = 5MB )

GO

--把指定的数据库备份文件恢复到刚刚建立的数据库里,这里要指定数据库备份文件的位置

--以及要恢复到的数据库,因为备份文件来自未知的机器,备份的时候原数据库和新数据库

--的数据文件和日志文件的位置不匹配,所以要用with move指令来完成强制文件移动,如果

--是通过管理器备份的数据库文件,数据库文件和日志文件名分别是数据库名跟上"_Data"或

--"_Log",这是一个假设哦,如果不是这样,脚本有可能会出错

RESTORE DATABASE [article]

FROM DISK = 'E:\windowdatabase\article.bak'

WITH

MOVE 'article_Data' TO 'd:\sql2000\MSSQL\data\article_Data.MDF',

MOVE 'article_Log' TO 'd:\sql2000\MSSQL\data\article_Log.LDF'

GO

从中可以看到T-SQL的强大。

服务端SQL SERVER 08,数据库做了备份。怎么通过FTP脚本自动下载备份的文件到客户端。

ftp -n<<EOF

open 192.168.1.100

user sqlserver08 123456

binary

cd testA

lcd testB

prompt

mget *.bak

close

bye

EOF追问留个QQ。具体问下。谢谢兄台。有些没看懂追答这几个地方需要改,其他不用动

open 服务器ip

user 用户名 密码

cd 进入远程目录

lcd 切换本地目录

mget 文件名

SQLserver数据库备份后,怎么查询备份的日志

SQL Server的备份有三种形式:

一是全备份(full backup)

这个备份里面包含的内容是值得商榷的,我们知道数据库有两种文件,数据文件与日志文件,全备份是不是将所有的数据文件与日志文件打包,备份成一个文件? 那么还原的时候是不是需要做恢复,将备份过后发生的事务接着备份时间点重新执行一边? 上面的问题细想都是肯定的。全备份做的事情,就是将所有的缓存先flush到磁盘上,不管在进行的事务是否提交,这样保证了日志的连续性,数据与日志的一致性,如果事务没提交 ,在日志文件上的标记是active的,这段日志也就不会被清空,下次恢复的时候,就从这段日志开始,接着使用新的日志执行。因此 全备份之前肯定会执行一次checkpoint;、

二是差异备份(differential backup)

这个备份会不会也重复full backup的过程,先执行checkpoint,然后再将上一次备份之后,发生数据页变化的这些数据页都备份起来,这部分备份就不会有日志。但是和全备份一样,备份的容积体量比较大,差异备份备份的是数据页,不管这一页是不是只有一条数据更改了,还是全部更改了;

三是日志备份(transaction log backup)

日志备份中需要注意的就是对未提交事务的理解,没有提交的事务其实还是占用日志文件的VLF,shrink并不能回收日志空间;提交事务的日志如被备份之后,就会将日志VLF打上unactive或者truncated标记,这个时候执行shrink就可以回收这部分日志VLF了。日志备份体量小,比较适合频率高的执行,比如每5分钟执行一次。

全备份:

全备份用到的命令,涉及到两方面的参数,一是指定相应的备份设备,可以是磁盘,也可以是磁带;另一方面 就是备份可用的选项,比如是否压缩,是否加密。

BACKUP DATABASE database

TO backup_device [ ,...n ]

[ WITH with_options [ ,...o ] ] ;

备份设备很讲究,可以事先定义好逻辑设备,也可以直接指定物理设备。磁带备份机倒是没见过,但是常规的磁盘备份还是可以讨论一下的:

我们可以将一个本机带路径的物理文件名指定为备份设备:

backup database lenistest 

to  disk = 'E:\Data_BU\lenistest5__backup.bck';

也可以将网络上的一个带路径的物理文件名指定为备份设备:

backup database AdventureWorks2012

to  disk = '\\BackupSystem\BackupDisk1\AW_backups\AdventureWorksData.Bak';

这里有个有趣的现象,如果我们在全备份之后 ,没有备份好日志,这个时候故障突然发生了,我们需要作恢复,但是恢复的时候因为会重写日志,这样就会丢失数据,如果不采取额外地措施,系统是会报错的:

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup.bck'

Msg 3159, Level 16, State 1, Line 6

The tail of the log for the database “lenistest” has not been backed 

up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains 

work you do not want to lose. Use the WITH REPLACE or WITH STOPAT 

clause of the RESTORE statement to just overwrite the contents of the 

log.

Msg 3013, Level 16, State 1, Line 6

RESTORE DATABASE is terminating abnormally.

所以如果对丢失的数据不关心或者认为不会丢失数据,可以采用with replace选项来重写原来的日志文件进行强制恢复。

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup.bck'

with replace;

差异备份:

差异备份相对全备份,优越的地方在于备份数据量少,但是有趣的是差异备份不能独立存在(日志备份也不能独立存在,他俩只能依附于全备份,也就是说在执行差异备份和日志备份的时候,必须先有一个全备份做好在那里), 差异备份必须以一个全备份做基准,在这基础之上再判断哪些数据页是有过更新的,这些更新的数据页计算出来并被备份起来。

use master;

go

backup database lenistest 

to  disk = 'E:\Data_BU\lenistest5__backup.bck';

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup.bck'

with differential;

假如我们没有事先做好全备份,就直接作差异备份了,那么这是不成功的:

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup2.bck'

with differential;

Msg 3035, Level 16, State 1, Line 11

Cannot perform a differential backup for database “lenistest”, because 

a current database backup does not exist. Perform a full database 

backup by reissuing BACKUP DATABASE, omitting the WITH DIFFERENTIAL 

option.

Msg 3013, Level 16, State 1, Line 11

BACKUP DATABASE is terminating abnormally.

日志备份:

日志备份相对差异备份来说,体量更小,同样它也需要全备份事先存在:

backup log lenistestto disk = 'E:\Data_BU\lenistest5__backup.bck';

假如我没有事先做好全备份,我们看看直接备份日志会出现什么结果:

Msg 4214, Level 16, State 1, Line 15

BACKUP LOG cannot be performed because there is no current database 

backup.

Msg 3013, Level 16, State 1, Line 15

BACKUP LOG is terminating abnormally.

提示先做全备份!

备份我们都讨论完了,接下来我们看看还原。还原通常有两个步骤,一是还原,二是恢复。当然我们也可以直接还原不恢复,但是可能会丢失数据,除非全备份之后 ,没有任何操作。假设我们一天一个全备份,每15分钟做一个差异备份 ,每5分钟做一个日志备份,我们该如何还原我们的数据库呢?

通常我们首先要知道我们的备份文件名或者物理路径,这个地方涉及到很多术语很难理解,比如说backup device, backupset, backup media, media set ,media family.

MSDN上有一个解释,先看这个脚本:

backup database AdventureWorks2012

to  tape = '\\.\tape0'

  , tape = '\\.\tape1'

  , tape = '\\.\tape2'

with format

   , medianame = 'MyAdvWorks_MediaSet_1';

解释说到,这个备份操作产生了一个 media set, 这个media set就是命名为MyAdvWorks_MediaSet_1, 这个media set还有个media header, media header一旦生成,就可以往里面写入备份文件了。这段脚本也同时生成了一个横跨三个tape的备份文件, 他们统称为backup set.

当我们指定3个backup device作为backup set(备份集)并且执行第一次全备份的时候,接下来所有的备份都需要同时指定这3个backup device作为backup set:

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01.bck'

  , disk = 'E:\Data_BU\lenistest5__backup02.bck'

  , disk = 'E:\Data_BU\lenistest5__backup03.bck'

with format

   , medianame = 'lenistestbackupset';

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01.bck'

  , disk = 'E:\Data_BU\lenistest5__backup03.bck'

with noinit

   , differential

   , medianame = 'lenistestbackupset';

Msg 3231, Level 16, State 1, Line 10

The media loaded on “E:\Data_BU\lenistest5__backup01.bck” is formatted 

to support 3 media families, but 2 media families are expected 

according to the backup device specification.

Msg 3013, Level 16, State 1, Line 10

BACKUP DATABASE is terminating abnormally.

上面我先作了一次全备份,指定了三个backup device作为一份backup set, 接下来作差异备份的时候,我只指定了其中两个backup device作为backup set, 操作失败,提示就是少了一个backup device.

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01.bck'

  , disk = 'E:\Data_BU\lenistest5__backup03.bck'

  , disk = 'E:\Data_BU\lenistest5__backup02.bck'

with noinit

   , differential

   , medianame = 'lenistestbackupset';

这次我们指定了同样个数的backup device,但backup device的顺序颠倒了一下,操作成功。

到目前为止,我们的脚本已经新建了 1 个media set,名为 lenistestbackupset , 2 个backup set, 第一个backup set是全备份的backup set,另外一个backup set是差异备份。所以每一次备份都会产生一个backup set. Media set产生的时间则是第一次给数据库作全备份的时候。

这个时候我们需要恢复数据库,那么第一步就是要先还原全备份,但是先不恢复,等全备份还原过后,再用差异备份做恢复:

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01.bck'

, disk = 'E:\Data_BU\lenistest5__backup03.bck'

, disk = 'E:\Data_BU\lenistest5__backup02.bck'

with file = 1

   , replace

   , norecovery;

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01.bck'

, disk = 'E:\Data_BU\lenistest5__backup03.bck'

, disk = 'E:\Data_BU\lenistest5__backup02.bck'

with file = 2

   , recovery;

这里一定是用replace来重写日志。

select mf.media_set_id

     , isnull(ms.name, 'no media name') as media_name

     , mf.physical_device_name

     , mf.family_sequence_number

     , mf.media_family_id

     , bs.database_name

     , bs.backup_start_date

     , bs.backup_finish_date

from backupmediafamily       mf

    inner join backupset     bs

        on mf.media_set_id = bs.media_set_id

    left join backupmediaset ms

        on bs.media_set_id = ms.media_set_id

where bs.database_name = 'lenistest';

上面的脚本可以抓出来这些media family, media set, backup set的信息,如果像上面的例子一样, 我们用3个backup device来承载备份,那么这3个backup device组成了一个media family, 按照family_sequence_number来编排,1,2,3。

下面实现一个备份到恢复的全过程例子,分别在full backup, differential backup, log backup之前各出入同样的数据,看看是不是还原的时候,能正确还原过来:

insert into dbo.dataloading

(

    object_id

  , object_name

)

select object_id

     , name as object_name

from sys.objects;

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01.bck'

  , disk = 'E:\Data_BU\lenistest5__backup02.bck'

  , disk = 'E:\Data_BU\lenistest5__backup03.bck'

with format

   , medianame = 'lenistestbackupset';

insert into dbo.dataloading

(

    object_id

  , object_name

)

select object_id

     , name as object_name

from sys.objects;

backup database lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01.bck'

  , disk = 'E:\Data_BU\lenistest5__backup03.bck'

  , disk = 'E:\Data_BU\lenistest5__backup02.bck'

with noinit

   , differential

   , medianame = 'lenistestbackupset';

insert into dbo.dataloading

(

    object_id

  , object_name

)

select object_id

     , name as object_name

from sys.objects;

backup log lenistest

to  disk = 'E:\Data_BU\lenistest5__backup01.bck'

  , disk = 'E:\Data_BU\lenistest5__backup03.bck'

  , disk = 'E:\Data_BU\lenistest5__backup02.bck'

with noinit

   , medianame = 'lenistestbackupset';

接着我们做还原与恢复:

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01.bck', disk = 'E:\Data_BU\lenistest5__backup03.bck', disk = 'E:\Data_BU\lenistest5__backup02.bck'

with file = 1

   , replace

   , norecovery;

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01.bck', disk = 'E:\Data_BU\lenistest5__backup03.bck', disk = 'E:\Data_BU\lenistest5__backup02.bck'

with file = 2

   , norecovery;

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01.bck', disk = 'E:\Data_BU\lenistest5__backup03.bck', disk = 'E:\Data_BU\lenistest5__backup02.bck'

with file = 3

   , recovery;

这里的file选项就是backup set选项,表示第一个备份集,第二个备份集,第三个备份集。如果想还原到最新的故障发生时间点,前面的restore都不能recovery,只有在最后的时候才能作recovery.

如果我们只想恢复全备份的数据,只要执行recovery就可以了,但是数据肯定是少了:

restore database lenistest

from disk = 'E:\Data_BU\lenistest5__backup01.bck', disk = 'E:\Data_BU\lenistest5__backup03.bck', disk = 'E:\Data_BU\lenistest5__backup02.bck'

with file = 1

   , replace

   , recovery;


  • 本文相关:
  • sql server 2008 压缩备份数据库(20g)
  • mysql数据库备份命令分享(mysql压缩数据库备份)
  • sqlserver 数据库压缩与数据库日志(ldf)压缩方法分享
  • 自动备份mssql server数据库并压缩的批处理脚本
  • dbcc shrinkdatabasems sql数据库日志压缩方法
  • ms sql server数据库备份、压缩与sql数据库数据处理的方法
  • ms sql server 数据库日志压缩方法与代码
  • 在程序中压缩sql server2000的数据库备份文件的代码
  • sql server 2000/2005/2008删除或压缩数据库日志的方法
  • sql server中的事务介绍
  • sqlserver中字符串左对齐或右对齐显示的sql语句
  • 提升sql server速度 整理索引碎片
  • ado.net ef中的实体修改方法
  • 附加到sql2012的数据库就不能再附加到低于sql2012的数据库版本的
  • sql语句的各个关键字的解析过程详细总结
  • sql 存储过程分页代码 支持亿万庞大数据量
  • sql server遍历表中记录的2种方法(使用表变量和游标)
  • 使用phpmyadmin修改mysql数据库root用户密码的方法
  • sql查询排名函数实例
  • sql server 怎样定期自动备份
  • 如何使用脚本批量恢复数据库备份
  • 服务端SQL SERVER 08,数据库做了备份。怎么通过FT...
  • SQLserver数据库备份后,怎么查询备份的日志
  • 如何将SQLSERVER数据库备份到网络上
  • 如何设置将SQL SERVER2012数据库备份还原到SQL SER...
  • 为什么sqlserver数据库备份30g只有不到10g
  • sqlserver怎么把服务器上的数据库备份到本地,不是...
  • 如何让SQL Server自动定时备份数据库并按日期命名
  • 如何转换SQL Server 2008数据库到SQL Server 2005
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved