SQLServer2008数据库怎样备份还原和数据恢复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer2008数据库怎样备份还原和数据恢复相关的知识,希望对你有一定的参考价值。

参考技术A

在完整恢复模式或大容量日志恢复模式下,必须先备份活动事务日志(称为日志尾部),然后才能在SQLServerManagementStudio中还原数据库。有关详细信息,请参阅如何备份事务日志(SQLServerManagementStudio)。若要还原已加密的数据库,您必须有权访问用于加密数据库的证书或非对称密钥。如果没有证书或非对称密钥,数据库将无法还原。

认识数据库备份和事务日志备份

数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点。

数据库备份

数据库备份可以手动备份和语句备份

一.手动备份数据库

1.鼠标右键选择你要进行备份的数据库-任务-备份

可以在常规选项页面你可以选择备份类型是进行完整数据库备份还是差异数据库备份

2.点击添加选项,选择数据库文件的存放路径

注意文件名记得加后缀.bak,便于恢复时的查找

3.你还可以在选项页面是追加到现有的备份集,还是覆盖所有的现有备份集,还可以选择备份验证完整性(建议选择),还可以选择是否压缩备份等。

二.语句备份数据库

use master goBACKUP DATABASE [test] TO DISK = N\'D:Microsoft sql serverMSSQL10.MSSQLSERVERMSSQLBackup est.bak\' WITH NOFORMAT, NOINIT, NAME = N\'test-完整 数据库 备份\', SKIP, NOREWIND, NOUNLOAD, STATS = 10GO

数据库日志备份

首先需要注意,数据库日志的备份是基于数据库完整备份,也就是说你备份数据库日志之前你首先要先对数据库进行一次完整的备份,因为之间会涉及到坚持到检查点 lsn, 这也是本文接下来要讲的重点。

一.手动备份数据库日志

1.右键数据库-任务-备份-选择备份类型(事务日志)

2.点添加,添加日志文件备份存储路径

3.同数据库完整备份一样,你也可以选择覆盖现有备份集或者追加到现有备份集,这里现在覆盖现有备份集、验证完整性,然后确认备份

二.语句备份数据库事务日志

BACKUP LOG [test] TO DISK = N\'D: est.trn\' WITH NOFORMAT, INIT, NAME = N\'test-事务日志 备份\', SKIP, NOREWIND, NOUNLOAD, STATS = 10GO

数据库还原

右键数据库-还原数据库-添加需要进行还原的数据库文件路径

在还原源选项中你可以选择‘源数据库’,‘源设备’。1.选择源数据库工具会自动显示该数据库之前的一些备份,然后直接选择需要还原的数据库备份集。

2.选择源设备点击后面的...,添加需要还原的数据库文件

2.点击确认还原数据库

数据库恢复

数据库恢复的前提是1.一个完整的数据库备份2.包含这个完整数据库备份的事务日志备份3.完整备份之间也可以存在数个差异备份

对于数据库维护空间始终是一个比较头疼的问题,特别是对于大型数据库而言,每天的日志文件增长是庞大的,很多数据库管理员会定时对数据库日志文件进行收缩,但是经常收缩会存在收缩完日志文件还是不能减少,这是因为存在很多活动的日志无法收缩可以用

DBCC LOGINFO(\'数据库名称\')

我们看到
status=0的日志,代表已经备份到磁盘的日志文件;而
status=2的日志还没有备份。当我们收缩日志文件时,收缩掉的空
间其实就是
status=0的空间,如果日志物理文件无法减小,这里一
定能看到非常多status=2的记录

解决办法:1.可以分离要收缩的数据库,然后手动删除日志文件,然后附加数据库,数据库就会产生一个很小的日志文件(不推荐使用这种方法)

2.右键要出来的数据库选择“属性”-"选项",将恢复模式改成"简单",然后利用收缩工具可以讲日志文件收缩到很小,收缩完记得讲恢复模式改成"完整"

也可以用语句进行处理(dbname是你要进行收缩的数据库名,dbname_log是你要进行收缩的数据库的逻辑日志名称)

USE [master]
GO ALTER DATABASE [dbname] SET recovery SIMPLE WITH NO_WAIT GO
ALTER DATABASE [dbname] SET RECOVERY SIMPLE --简单模式
GO
USE [dbname]
GO
DBCC SHRINKFILE (N\'dbname_log\' , 11, TRUNCATEONLY) GO
USE [master]
GO
ALTER DATABASE [dbname] SET RECOVERY FULL WITH NO_WAIT ALTER DATABASE [dbname] SET RECOVERY FULL

对于第一种方法不赞同使用,首先对于数据库的分离与附加有时候会破坏数据库,造成数据库无法还原,还有就是对于在线数据库也不允许进行分离操作。

对于第二种方法是slq2008收缩日志文件的一种方法,但是此方法也不能使用过于频繁,因为进行数据库恢复模式的更改会截断事务日志文件,这样的话当时利用事务日志文件进行恢复的时候检查点不能包含数据库文件,而且当你要对事务日志进行备份的时候会重新提示你需要对数据库进行完整备份。

举个例子:比如你昨天晚上进行了一次完整备份,然后同时你也进行了一次日志备份(提前日志未被截断),然后你每个小时进行过一次差异备份,最近的差异备份时间点是14点,如果此时数据库错误修改了数据,你可以立马备份一个日志文件将数据库恢复到日志备份开始到日志备份终点前的任意时间点 。

如果此时你进行了修改数据库模式,截断日志进行了收缩,那么你的数据只能恢复到昨天晚上备份的那个日志备份时间前的任意时间点,也就是今天所做的数据库更改无法再恢复了,因为日志文件已经被截断了,不知道这样解释是否明白

因为日志文件的检查点(lsn)是连续的,每一次日志备份都是在上一次备份的基础上lsn往后增加的,lsn的范围也包括了数据库文件的lsn,也只有日志文件的lsn包括了数据库文件的lsn,才能将数据库文件进行回滚。

上图中总共有三个备份文件,一个完整备份、一个差异备份、一个日志备份,大家可以注意观察完整备份的第一个lsn与最后一个lsn,和检查点

第二个差异备份文件的的第一个lsn与最后一个lsn,和检查点,最后的日志备份的第一个lsn和最后一个lsn包含了前面两个备份文件的lsn,这种情况数据库就可以恢复到日志文件备份前的任意时间点,如果日志文件没有包含数据库文件的最后一个lsn也就无法恢复了。

Sqlserver关于校验和_备份还原的CHECKSUM

1、数据库备份的时候启用备份校验和,则会消耗更多资源,备份过程也会更慢
2、数据库备份的时候启用备份校验和,备份操作不会向数据库页中添加任何校验和也不会源页面和页面内容,只是把备份校验和存储在备份片上,也就是生成的备份文件上
3、如果备份的时候带CHECKSUM参数,则还原这个备份文件时候的时候自动也带CHECKSUM 参数,如果备份的时候不带CHECKSUM参数,则还原的时候默认就是NO_CHECKSUM
4、校验和其实就是写入数据的时候同时写入一条校验信息,读取数据的时候会计算一个校验信息,并把这个校验信息和写入的校验信息比较,如果两个值不匹配,则读取会失败。就像数据库备份的时候如果启用了备份校验和则在备份的同时会往生成的备份文件生成一个备份校验信息,恢复的时候也会生成一个备份校验信息,这个时候恢复过程生成的备份校验信息匹配上了备份文件的备份校验信息,则恢复可以顺利进行
5、RESTORE VERIFYONLY仅仅检查文件是否符合Microsoft Tape Format (MTF)规范,验证备份集是否完整以及整个备份是否可读。 但是,RESTORE VERIFYONLY 不尝试验证备份卷中的数据结构,即验证数据文件是否损坏,但是不验证备份文件是否含有垃圾数据。什么是垃圾数据,比如你使用一个16进制的编辑器修改了备份文件中存储的数据,这个时候备份文件没有损坏但是有垃圾数据,然后再次运行RESTORE VERIFYONLY仍然会返回“备份设备有效(The backup set is valid)”的信息。这种情况下我们就可以在备份时使用CHECKSUM选项,它会读取数据文件的页校验和或页残缺检测并写入备份文件生成备份校验和,后面RESTORE VERIFYONLY的时候就必须验证这个备份文件的备份校验和
6、如果有DBCC CHECKDB了,其实Backup备份的时候可以不需要CHECKSUM参数,因为DBCC CHECKDB也会验证页信息,就算是DBCC CHECKDB的PHYSICAL_ONLY页会验证页面残缺页、校验和错误以及常见的硬件故障。PAGE_VERIFY { CHECKSUM校验 | TORN_PAGE_DETECTION残缺页 | NONE }
7、如果备份的时候没带CHECKSUM 参数,还原的时候加上了CHECKSUM,因为备份文件没有验和,所以还原会报错

Backup备份操作是否启用备份校验和。
{ NO_CHECKSUM | CHECKSUM } 控制是否启用备份校验和。

NO_CHECKSUM 显式禁用备份校验和的生成(以及页校验和的验证)。 此选项为默认行为。

CHECKSUM 如果此选项已启用并且可用,则指定备份操作将验证每页的校验和及页残缺,并生成整个备份的校验和。
使用备份校验和可能会影响工作负荷以及备份吞吐量。

Restore还原操作是否启用备份校验和。
{ CHECKSUM | NO_CHECKSUM }
支持的语句:RESTORERESTORE FILELISTONLYRESTORE HEADERONLYRESTORE LABELONLY 和 RESTORE VERIFYONLY。
默认行为是在存在校验和时验证校验和,在不存在校验和时不进行验证并继续执行操作。也就是说如果备份的时候带CHECKSUM参数,则还原这个游戏备份文件时候的时候自动也带CHECKSUM 参数,如果备份的时候不带CHECKSUM参数,则还原的时候默认就是NO_CHECKSUM

CHECKSUM
指定必须验证备份校验和,在备份缺少备份校验和的情况下,该选项将导致还原操作失败,并会发出一条消息表明校验和不存在。
默认情况下,当遇到无效的校验和时,RESTORE 会报告校验和错误并停止。 然而,如果指定了 CONTINUE_AFTER_ERROR,RESTORE 会在返回校验和错误以及包含无效校验和的页面编号之后继续。
备注1:仅当使用备份校验和时,页校验和才与备份操作相关。
备注2:也就是说如果备份的时候没带CHECKSUM 参数,还原的时候加上了CHECKSUM,因为备份文件没有验和,所以还原会报错

NO_CHECKSUM
显式禁用还原操作的校验和验证功能。

备份校验和

SQL Server 支持三种校验和:页校验和、日志块校验和以及备份校验和。 生成备份校验和时,BACKUP 将验证从数据库读取的数据是否与数据库中存在的任意校验和或页残缺指示一致。
BACKUP 语句选择性地计算备份流的备份校验和;如果给定页上存在页校验和或残缺页信息,则当备份该页时,BACKUP 还将验证它的校验和、残缺页状态以及 ID。 创建备份校验和时,备份操作不会向页中添加任何校验和。 将在这些页位于数据库中时对其进行备份,备份不会修改这些页。
由于验证和生成备份校验和引起的开销,使用备份校验和会对性能造成潜在的影响。 工作负荷和备份吞吐量都可能受到影响。 因此,不是必须使用备份校验和。 如果决定在备份过程中生成校验和,请仔细监视由此引起的 CPU 开销以及对系统中任何并发工作负荷造成的影响。
BACKUP 永远不会修改磁盘上的源页面和页面内容。

在启用备份校验和后,备份操作将执行以下步骤:
1、向备份介质写入页之前,备份操作将验证页级信息(页校验和或页残缺检测)是否存在。 如果两者都不存在,则备份无法验证页。 将按原样包含未经验证的页,并且其内容将添加到总备份校验和中。如果备份操作在验证过程中遇到页错误,备份将失败。
2、无论是否存在页校验和,BACKUP 都会为备份流生成一个单独的备份校验和。 还原操作可使用(可选)备份校验和来验证该备份是否损坏。 备份校验和存储在备份介质上,而不是存储在数据库页上。 备份校验还可根据需要在还原时使用。
3、备份集标记为包含备份校验和(在 msdb..backupset 的 has_backup_checksums 列中)。 有关详细信息,请参阅 backupset (Transact-SQL)。

备注1、在还原操作过程中,如果备份介质中存在备份校验和,则默认情况下,RESTORE 和 RESTORE VERIFYONLY 语句都将验证备份校验和及页校验和。 如果不存在备份校验和,则这两种还原操作直接执行,而不会进行验证;这是因为没有备份校验和,还原无法可靠地验证页校验和。
备注2、有关页校验和及页残缺检测的详细信息,请参阅 ALTER DATABASE 语句的 PAGE_VERIFY 选项。 有关详细信息,请参阅 ALTER DATABASE SET 选项 (Transact-SQL)。

ALTER DATABASE SET 选项 (Transact-SQL)
PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
发现磁盘 I/O 路径错误引起的损坏的数据库页面。 磁盘 I/O 路径错误可能是数据库损坏问题的原因。 而www.sangpi.com这些错误通常由在将页写入磁盘时发生的电源故障或磁盘硬件故障所导致。

CHECKSUM
在向磁盘中写入页面时,计算整个页面内容的校验并将该值存储在页眉中。 从磁盘中读取页时,将重新计算校验和,并与存储在页头中的校验和值进行比较。 如果两个值不匹配,将同时在 SQL Server 错误日志和 Windows 事件日志中报告错误消息 824(指示校验和失败)。 校验和失败指示存在 I/O 路径问题。 若要确定其根本原因,需要调查硬件、固件驱动程序、BIOS、筛选器驱动程序(如防病毒软件)和其他 I/O 路径组件。

TORN_PAGE_DETECTION
将页面写入磁盘时,将每个 512 字节扇区的特定 2 位模式保存在 8 KB 数据库页面中并存储在数据库页头中。 从磁盘中读取页时,页头中存储的残缺位将与实际的页扇区信息进行比较。
如果值不匹配,表明只有页面的一部分被写入磁盘。 在这种情况下,将同时在 SQL Server 错误日志和 Windows 事件日志中报告错误消息 824(指示页撕裂错误)。 如果页面写入确实不完整,则数据库恢复通常会检测到页撕裂。 不过,其他 I/O 路径故障可能随时导致页撕裂。

NONE
数据库页写入不会生成 CHECKSUM 或 TORN_PAGE_DETECTION 值。 在读取过程中,即使页头中存在 CHECKSUM 或 TORN_PAGE_DETECTION 值,SQL Server 也不会验证校验和或页撕裂。

使用 PAGE_VERIFY 选项时,请考虑下列重要事项:
1、默认值为 CHECKSUM。
2、用户数据库或系统数据库升级到 SQL Server 2005 (9.x) 或更高版本后,PAGE_VERIFY 值(NONE 或 TORN_PAGE_DETECTION)不会更改。 建议更改为 CHECKSUM。
3、ORN_PAGE_DETECTION 可能使用较少资源,但提供的 CHECKSUM 保护最少。
4、无需使数据库脱机、锁定数据库或以其他方式阻止对数据库的并发访问,即可设置 PAGE_VERIFY。
5、CHECKSUM 与 TORN_PAGE_DETECTION 互相排斥。 不能同时启用这两个选项。

备注1、在 SQL Server 的早期版本中,TempDB 数据库的 PAGE_VERIFY 数据库选项设置为 NONE 且不能修改。 从 SQL Server 2008 开始,对于新安装的 SQL Server,TempDB 数据库的这一默认值为 CHECKSUM。 如果是升级安装的 SQL Server,则默认值仍为 NONE。 可以修改该选项。 我们建议为 tempdb 数据库使用 CHECKSUM。
备注2、检测到页撕裂或校验和失败时,如果失败仅限于索引页,则可通过还原数据进行恢复,可能还需要重建索引进行恢复。 如果要在校验和失败的情况下确定受影响的一个或多个数据库页面的类型,请运行 DBCC CHECKDB。 有关还原选项的详细信息,请参阅 RESTORE 参数。 虽然还原数据可解决数据损坏问题,但应尽快诊断并纠正根本原因(如磁盘硬件故障),以防止继续出错。
备注3、SQL Server 将对因校验和、页撕裂或其他 I/O 错误而失败的任何读取都重试四次。 如果在任何一次重试中读取成功,则会向错误日志写入消息。 触发读取的命令会继续执行。 如果重试失败,则该命令失败,且显示错误消息 824。

以上是关于SQLServer2008数据库怎样备份还原和数据恢复的主要内容,如果未能解决你的问题,请参考以下文章

怎样备份/还原MySQL数据库 之 MySQL Workbench

sql server 2008怎么还原备份数据库

怎样备份/还原MySQL数据库 之 MySQL Workbench

JAVA程序怎样实现Oracle数据库备份和还原

sql server 2012的备份怎么还原到sql server 2008

怎么把sql server 2008 备份文件bak还原?