SqlServer备份恢复

日期:2020-04-29编辑作者:数据库

所有的段落还原都从称为“部分还原顺序”的初始还原顺序开始。 部分还原顺序至少还原和恢复主文件组,在简单恢复模式下还会还原和恢复所有读/写文件组。 在段落还原顺序中,整个数据库都必须脱机。 随后,数据库将处于联机状态,并且还原的文件组都处于可用状态。 但是,所有未还原的文件组都将保持脱机状态,无法访问。 不过,对于任何脱机文件组,都可以在以后通过文件还原进行还原并进入联机状态。

日志备份

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/transaction-log-backups-sql-server 

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/apply-transaction-log-backups-sql-server

 

 

下面我们来看看实例:

将数据库还原到指定时间点

 https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/restore-a-sql-server-database-to-a-point-in-time-full-recovery-model

在完整恢复模式下,完整的数据库还原通常可恢复到日志备份中的某个时间点、标记的事务或 LSN。 但是,在大容量日志恢复模式下,如果日志备份包含大容量更改,则不能进行时点恢复。

时点还原方案示例

下例假定针对一个关键任务型数据库系统,每天午夜创建一个完整数据库备份;从星期一到星期六,每小时创建一个差异数据库备份;全天每 10 分钟创建一个事务日志备份。 若要将数据库还原到星期三凌晨 5:19 的状态, 请执行以下操作:

  1. 还原星期二午夜创建的完整数据库备份。

  2. 还原星期四凌晨 5:00 创建的差异数据库 备份。

  3. 应用星期四凌晨 5:10创建的事务日志 备份。

  4. 应用星期三凌晨 5:20 创建的事务日志 备份,指定恢复进程仅应用到凌晨 5:19 之前发生的事务。

    或者,如果需要将数据库还原到它在星期四凌晨 3:04 的状态, 而在星期四凌晨 3:00 创建的差异数据库备份已不可用, 则执行下列操作:

  5. 还原在星期三午夜创建的数据库备份。

  6. 还原星期四凌晨 2:00 创建的差异数据库 备份。

  7. 应用从星期四凌晨 2:10 到 3:00 创建的所有事务 日志 备份。

  8. 应用星期四凌晨 3:10 创建的事务日志 备份,停止凌晨 3:04 的恢复进程。

 

段落还原适用于所有恢复模式,但在完整恢复模式和大容量日志恢复模式下比在简单恢复模式下更灵活。

完整数据库还原(简单恢复模式) 

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/complete-database-restores-simple-recovery-model 

数据库完整还原的目的是还原整个数据库。 整个数据库在还原期间处于脱机状态。 在数据库的任何部分变为联机之前,必须将所有数据恢复到同一点,即数据库的所有部分都处于同一时间点并且不存在未提交的事务。

在简单恢复模式下,数据库不能还原到特定备份中的特定时间点。

用于还原完整数据库备份的基本 Transact-SQLRESTORE 语法是:

RESTORE DATABASE database_name FROM backup_device [ WITH NORECOVERY ]

示例 (Transact-SQL)

以下示例首先显示如何使用 BACKUP 语句来创建 AdventureWorks2012 数据库的完整数据库备份和差异数据库备份。 然后按顺序还原这些备份。 将数据库还原到完成差异数据库备份时的状态。

该示例说明数据库完整还原方案的还原序列中的关键选项。 还原顺序 由通过一个或多个还原阶段来移动数据的一个或多个还原操作组成。 将省略与此目的不相关的语法和详细信息。 在恢复数据库时,尽管 RECOVERY 选项是默认值,但为清楚起见,仍建议显式指定该选项。

USE master;
--Make sure the database is using the simple recovery model.
ALTER DATABASE AdventureWorks2012 SET RECOVERY SIMPLE;
GO
-- Back up the full AdventureWorks2012 database.
BACKUP DATABASE AdventureWorks2012
TO DISK = 'Z:SQLServerBackupsAdventureWorks2012.bak'
WITH FORMAT;
GO
--Create a differential database backup.
BACKUP DATABASE AdventureWorks2012
TO DISK = 'Z:SQLServerBackupsAdventureWorks2012.bak'
WITH DIFFERENTIAL;
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'Z:SQLServerBackupsAdventureWorks2012.bak'
WITH FILE=1, NORECOVERY;
--Restore the differential backup (from backup set 2).
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'Z:SQLServerBackupsAdventureWorks2012.bak'
WITH FILE=2, RECOVERY;
GO

 

 

 

 

 

执行段落还原的精确要求取决于数据库的恢复模式。

恢复模式

SQL Server 备份和还原操作发生在数据库的恢复模式的上下文中。 恢复模式旨在控制事务日志维护。 “恢复模式”是一种数据库属性,它控制如何记录事务,事务日志是否需要(以及允许)进行备份,以及可以使用哪些类型的还原操作。 有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。 通常,数据库使用完整恢复模式或简单恢复模式。 数据库可以随时切换为其他恢复模式。

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/recovery-models-sql-server

 

此后,段落还原通常包括一个或多个还原顺序,这些还原顺序称为“文件组还原顺序”。 您可以等待执行特定的文件组还原顺序,等待的时间长短由您决定。 每个文件组还原顺序将一个或多个脱机文件组还原并恢复到与数据库一致的点。 文件组还原顺序的时间安排和数量取决于您的恢复目标、您想要还原的脱机文件组数量以及每个文件组还原顺序中还原的脱机文件组的数量。

完整备份

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server

 完整数据库备份可对整个数据库进行备份。 这包括对部分事务日志进行备份,以便在还原完整数据库备份之后,能够恢复完整数据库备份。 完整数据库备份表示备份完成时的数据库。

--段落还原:数据库损坏范围比较大,跨多个数据文件甚至跨文件组的时候,我们不得不恢复整个数据库。--这时如果数据库特别大,数据库恢复时间将会很长。但我们可以使用SQL Server提供的段落还原,来逐步恢复数据库。--首先备份尾日志:BACKUP LOG [AdventureWorks] TO DISK =N'D:BACKUP_TESTLOG_BACK_TAIL.trn' WITH NO_TRUNCATE ,NORECOVERY,COMPRESSION,STATS=10--部分还原主文件组PRIMARY:RESTORE DATABASE [AdventureWorks] FILEGROUP=N'PRIMARY' FROM DISK=N'D:BACKUP_TESTAD_FULL.bak' WITH PARTIAL,NORECOVERY,STATS=10--还原副文件组MST:RESTORE DATABASE [AdventureWorks] FILEGROUP=N'MST' FROM DISK=N'D:BACKUP_TESTAD_FULL.bak' WITH NORECOVERY,STATS=10--依次还原日志:RESTORE LOG [AdventureWorks] FROM DISK=N'D:BACKUP_TESTLOG_BACK_1.TRN' WITH NORECOVERY,STATS=10RESTORE LOG [AdventureWorks] FROM DISK=N'D:BACKUP_TESTLOG_BACK_2.TRN' WITH NORECOVERY,STATS=10--还原尾日志并恢复RESTORE LOG [AdventureWorks] FROM DISK=N'D:BACKUP_TESTLOG_BACK_TAIL.TRN' WITH RECOVERY,STATS=10--此时AdventureWorks数据库中位于PRIMARY和MST文件组中的文件已经可以访问。--但是位于其他文件组如:TRN文件组中的表还不能访问。--消息 8653,级别 16,状态 1,第 2 行--查询处理器无法为表或视图“****”生成计划,因为该表驻留在不处于联机状态的文件组中。--接下来还原副文件组TRN:RESTORE DATABASE [AdventureWorks] FILEGROUP=N'TRN' FROM DISK=N'D:BACKUP_TESTAD_FULL.bak' WITH NORECOVERY,STATS=10--如果数据库不是企业版,以上还原将会提示“尚未备份数据库 "AdventureWorks" 的日志尾部。”--需要再次备份一次日志尾部,意味着还原副文件组TRN的时候整个数据库都处于正在还原状态。所以对于非企业版而言,只能离线段落还原,个人觉得意义不是很大......--依次还原日志:RESTORE LOG [AdventureWorks] FROM DISK=N'D:BACKUP_TESTLOG_BACK_1.TRN' WITH NORECOVERY,STATS=10RESTORE LOG [AdventureWorks] FROM DISK=N'D:BACKUP_TESTLOG_BACK_2.TRN' WITH NORECOVERY,STATS=10--还原尾日志并恢复RESTORE LOG [AdventureWorks] FROM DISK=N'D:BACKUP_TESTLOG_BACK_TAIL.TRN' WITH RECOVERY,STATS=10--此时位于副文件组TRN中的表已经可以访问了。--段落还原全部完成

差异备份

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/differential-backups-sql-server

差异备份所基于的是最近一次的完整数据备份。 差异备份仅捕获自该次完整备份后发生更改的数据。 差异备份所基于的完整备份称为差异的“基准” 。 完整备份(仅复制备份除外)可以用作一系列差异备份的基准,包括数据库备份、部分备份和文件备份。 文件差异备份的基准备份可以包含在完整备份、文件备份或部分备份中。

优点

  • 与创建完整备份相比,创建差异备份的速度可能非常快。 差异备份只记录自差异备份所基于的完整备份后更改的数据。 这有助于频繁地进行数据备份,减少数据丢失的风险。 但是,在还原差异备份之前,必须先还原其基准。 因此,从差异备份进行还原必然要比从完整备份进行还原需要更多的步骤和时间,因为这需要两个备份文件。

  • 如果数据库的某个子集比该数据库的其余部分修改得更为频繁,则差异数据库备份特别有用。 在这些情况下,使用差异数据库备份,您可以频繁执行备份,并且不会产生完整数据库备份的开销。

  • 在完整恢复模式下,使用差异备份可以减少必须还原的日志备份的数量。

 

 

 

无论数据库采用何种恢复模式,部分还原顺序都从 RESTORE DATABASE 语句开始,该语句将还原完整备份并指定 PARTIAL 选项。 PARTIAL 选项总是会启动一个新的段落还原;因此,在部分还原顺序的初始语句中,只能指定 PARTIAL 一次。 当部分还原顺序完成并且数据库联机后,由于余下文件的恢复被推迟,这些文件的状态将变为“恢复已挂起”。

 

段落还原保持进行检查,以便确保数据库在结束时将是一致的。 在还原顺序结束后,如果恢复的文件有效并且与数据库一致,则恢复的文件将直接变为联机状态。

仅复制备份

https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/copy-only-backups-sql-server

 仅复制备份 是独立于常规 SQL Server 备份序列的 SQL Server 备份。 通常,进行备份会更改数据库并影响其后备份的还原方式。 但是,有时在不影响数据库总体备份和还原过程的情况下,为特殊目的而进行备份还是有用的。 仅复制备份就是用于此目的。

 

 

恢复

本文由www.129028.com金沙发布于数据库,转载请注明出处:SqlServer备份恢复

关键词:

SQL Server 2000的安全配置

SQLserver2000数据库应用非常广泛,一旦出现安全问题,造成的损失往往难以估量!应提前预防,防患于未然。这里,我...

详细>>

如何查看某个查询用了多少TempDB空间www.129028.com金沙

DECLARE @read BIGINT, @write BIGINT; SELECT @read = SUM(num_of_bytes_read), @write = SUM(num_of_bytes_written) FROM tempdb.sys.database_files AS DBFJOI...

详细>>

浅析SQL语句中GROUP BY的用法

GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 你用了GROUP BY 按 ITEM.ITEMNUM这个字段分组,那其他字...

详细>>

微软总是试图使它的软件安装尽可能地简单顺www.129028.com金沙

如果你没有特意记录安装日期,那么有没有办法从SQL Server里查询到呢?想想我们在安装的时候,肯定会有Windows认证登...

详细>>