USE master -->全选这条语句--按执行之后就得到9个介质了 其实是三个媒体集 在C盘DBBackup这个文件夹里面可以看到9个备份介质
Go
BACKUP DATABASE Northwind
To DISK = 'C:\DBBackup\A-1.BAK',DISK = 'C:\DBBackup\A-2.BAK',DISK = 'C:\DBBackup\A-3.BAK'
MIRROR TO DISK = 'C:\DBBackup\B-1.BAK',DISK = 'C:\DBBackup\B-2.BAK',DISK = 'C:\DBBackup\B-3.BAK'
MIRROR TO DISK = 'C:\DBBackup\C-1.BAK',DISK = 'C:\DBBackup\C-2.BAK',DISK = 'C:\DBBackup\C-3.BAK'
WITH FORMAT,MEDIANAME = 'AdventureWorksSet1'
Go
如果三个镜像媒体集中目前只有A-1、B-2、C-3这三个媒体集可用的话 此时怎么办呢? 我们可以使用来自不同镜像集中媒体来还原数据库
USE master -->全选这条语句--按执行之后来自不同媒体集的文件就成功进行还原了
Go
RESTORE DATABASE Northwind
FROM DISK = 'C:\DBBackup\C-3.BAK', DISK = 'C:\DBBackup\B-2.BAK', DISK = 'C:\DBBackup\A-1.BAK'
WITH FILE = 1, REPLACE
Go 从备份中还原数据库: 数据库还原过程原理-->数据库还原阶段的过程: 数据库复制阶段-->从数据库的备份媒体将所有数据、日志和索引页复制到数据库文件中 重做阶段(Redo)/前滚(Roll Forward)-->将记录的事务应用到从备份复制的数据,以将这些数据前滚到恢复点 撤销阶段(Undo)/回滚(Roll Back)-->回滚所有未提交的事务并使用户可以使用此数据库,回滚阶段后将无法还原后续的备份
数据库还原选项-->RECOVERY选项: 完成重做和撤消两个阶段 数据库处于一致状态,完成后数据库在线 NORECOVERY选项: 不执行撤消阶段以保留未提交的事务 允许还原其他备份以将数据库进一步前滚
即时点还原-->支持数据库备份的即时点还原: 在SQL Server 2005之前的版本中只支持事务日志的及时点还原 使用STOPAT选项指明时间点
[RESTORE DATABASE AdventureWorks FROM AWBackup WITH RECOVERY ,STOPAT='Mar 1,2006 2:00 PM' 执行段落还原-->通过段落还原分阶段逐步恢复由多个文件组组成的数据库: 未恢复文件组被标记为离线,其中的数据不可访问 还原步骤: 还原主文件组和需要立即使用的辅助文件组 在以后通过逐步还原其它辅助文件组
[RESTORE DATABASE AWTemp FILE='AdventureWorks_data_1' FROM AWBackup
WITH PARTIAL,MOVE'AdventureWorks_data_1'TO'AWTemp_data_1.mdf']
执行页面还原-->通过执行页面还原对数据库中损坏的页进行修复 获取页面损坏信息: SQL Server错误日志 msdb.dbo.suspect_pages表中
[RESTORE DATABASE AdventureWorks
PAGE='AdventureWorks_data_1:832'
FROM AWBackup]
数据库的在线还原-->数据库在进行部分还原时仍处于在线可用状态 限制条件:只有SQL Server 2005企业版本支持 只能应用在完整或者大容量日志恢复模型 正在还原的部分不可用 默认情况下对文件和页的还原自动以在线还原形式执行
USE master -->全选这条语句--按执行之后就生成了一个叫做NwTmp的数据库了 这个数据库包含了主文件组和ReadWriteFG文件组
Go
RESTORE DATABASE NwTmp FILEGROUP='ReadWriteFG'
FROM NwBackupDevice
WITH FILE =3,
MOVE N'Northwind'To N'C:\tmp\NW.mdf',
MOVE N'ReadWriteFile' TO N'C:\tmp\ReadWriteFile.ndf',
MOVE N'Northwind_log' TO N'C:\tmp\NW.ldf',
NOUNLOAD, STATS = 10,REPLACE
Go 2.全选查询Customers表的语句--按执行之后就可以看到表的内容了
3.全选查询Employees表的语句--按执行之后就看到错误了 为什么错误呢? 因为我们只是分段地还原了ReadWriteFG这样一个文件组 而Employees表是在另一个文件组 所以数据是不在线的
从数据库快照中恢复数据: 什么是数据库快照? 在一个时间点数据库一致状态的只读副本-->和源数据库必须同在一个服务器实例 为同一个数据库可以创建多个数据库快照 对于数据库的测试,报表创建和开发非常有用 是对数据库备份和还原的一种补充-->见下图:
能从数据库快照中还原的数据(1)-->恢复被更新的数据
[UPDATE HumanResources Department
SET Name=
(
SELECT Name
FROM AdventureWorks_dbsnapshot_1800 HumanResource Department
WHERE DepartmentID=1
)
WHERE DepartmentID=1]
能从数据库快照中还原的数据(2)-->恢复被删除的行
[ALTER TABLE Production WorkOrderRouting
NOCHECK CONSTRAINT CK_WorkOrderRouting_ActualEndDate
INSERT INTO Production WorkOrderRouting
SELECT * FROM AdventureWorks_dbsnapshot_1800 Production WorkOrderRouting
ALTER TABLE Production WorkOrderRouting
CHECK CONSTRAINT CK_WorkOrderRouting_ActualEndDate
能从数据库快照中还原的数据(3)-->恢复被删除的对象: 由快照数据库中对象生成脚本 在当前数据库中运行脚本恢复删除的对象
能从数据库快照中还原的数据(4)-->将数据库恢复到快照时的状态
[RESTORE DATABASE AdventureWorks
FROM DATABASE_SNAPSHOT='AdventureWorks_dbsnapshot_1800'
如何使用数据库快照备份和还原数据呢?
USE Adventureworks -->全选这条语句--按执行之后--打开C盘里面的SnapshotData这个文件夹之后就可以看到已经成功创建了一个叫做AdventureWorks_Data.mdf的快照了
GO
CREATE DATABASE AdventureWorks_dbsnapshot_1800
ON (NAME = AdventureWorks_Data, FILENAME = 'C:\SnapshotData\AdventureWorks_Data.mdf')
AS SNAPSHOT OF AdventureWorks
Go 1.全选查询快照数据库的语句--按执行之后就可以看到数据里面的内容了 其实跟AdventureWorks这个数据库里面的内容是完全一样的
2.全选在快照数据库中尝试更新的语句--按执行之后就会发现失败 为什么呢? 因为数据库快照里面的数据是只读的
1.全选删除源数据库表Production.WorkOrderRouting中的行的语句--按执行之后就删除源数据库表Production.WorkOrderRouting中的行了
2.USE AdventureWorks -->全选恢复删除的数据行这条语句--按执行之后就把刚才误删除的那些数据还原回去
Go
ALTER TABLE Production.WorkOrderRouting
NOCHECK CONSTRAINT CK_WorkOrderRouting_ActualEndDate
Go
INSERT INTO Production.WorkOrderRouting
SELECT * FROM AdventureWorks_dbsnapshot_1800.Production.WorkOrderRouting
ALTER TABLE Production.WorksOrderRouting
CHECK CONSTRAINT CK_WorkOrderRouting_ActualEndDate
SQL SERVER 数据库备份复制代码/**
批量循环备份用户数据库,做为数据库迁移临时用
*/
SET NOCOUNT ON
DECLARE @d varchar(8) DECLARE @Backup_Flag NVARCHAR(10)
SET @d=convert(varchar(8),ge...