完全备份

来源:互联网 发布:西安天网软件工作餐 编辑:程序博客网 时间:2024/06/02 23:23

2010-02-11 12:54CREATE DATABASE dbGO--1. 无完全备份时,无法进行差异备份BACKUP DATABASE db TO DISK='c:/db.bak' WITH FORMAT,DIFFERENTIAL/*--收到错误服务器: 消息 3035,级别 16,状态 1,行 2无法执行数据库 'db' 的差异备份,因为不存在当前数据库备份。请去掉 WITH DIFFERENTIAL 选项后重新发出 BACKUP DATABASE,以执行数据库的完整备份。--*/GODROP DATABASE dbGO/*=========================================================*/--2. 无完全备份时,无法进行日志备份CREATE DATABASE dbGOBACKUP LOG db TO DISK='c:/db.bak' WITH FORMAT/*--收到信息没有当前的数据库备份。此日志备份不能用于前滚先前的数据库备份。--*/GODROP DATABASE dbGO/*===========================================================*/--3. 数据库恢复模型为 SIMPLE 时,不允许使用 BACKUP LOG 语句--数据库恢复模型为简单时,无法进行日志备份ALTER DATABASE pubs SET RECOVERY SIMPLEBACKUP LOG pubs TO DISK='c:/a.bak' WITH FORMAT/*--收到错误信息服务器: 消息 4208,级别 16,状态 1,行 3当恢复模型为 SIMPLE 时,不允许使用 BACKUP LOG 语句。请使用 BACKUP DATABASE 或用 ALTER DATABASE 更改恢复模型。--*/GO--数据库恢复模型不为简单时,才能进行日志备份ALTER DATABASE pubs SET RECOVERY FULLBACKUP LOG pubs TO DISK='c:/a.bak' WITH FORMAT--创建测试CREATE DATABASE dbGO--正常备份BACKUP DATABASE db TO DISK='c:/1.bak' WITH FORMATBACKUP LOG db TO DISK='c:/2.bak' WITH FORMATBACKUP LOG db TO DISK='c:/3.bak' WITH FORMATBACKUP DATABASE db TO DISK='c:/4.bak' WITH FORMATBACKUP DATABASE db TO DISK='c:/5.bak' WITH FORMAT,DIFFERENTIALBACKUP LOG db TO DISK='c:/6.bak' WITH FORMATGO--下面是用于日志备份和差异备份还原中易犯的错误--1. 恢复时使用错误的日志顺序IF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/1.bak' WITH NORECOVERYRESTORE LOG db FROM DISK='c:/3.bak'/*--收到信息服务器: 消息 4305,级别 16,状态 1,行 5此备份集中的日志开始于 LSN 6000000002800001,该 LSN 太晚,无法应用到数据库。包含 LSN 6000000002500001 的较早的日志备份可以还原。--*/GO--2. 恢复时,将日志备份应用于错误的完全备份IF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/4.bak' WITH NORECOVERYRESTORE LOG db FROM DISK='c:/2.bak'/*--收到错误信息服务器: 消息 4326,级别 16,状态 1,行 5此备份集中的日志终止于 LSN 6000000002800001,该 LSN 太早,无法应用到数据库。包含 LSN 6000000003000001 的较新的日志备份可以还原。--*/GO--3. 将日志备份用于RESTORE DATABASEIF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/2.bak' WITH NORECOVERY/*--收到错误信息服务器: 消息 3135,级别 16,状态 2,行 4文件 'c:/2.bak' 中的备份集是由 BACKUP LOG 创建的,无法用于此还原操作。--*/GO--4. 将差异备份用于RESTORE LOGIF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/4.bak' WITH NORECOVERYRESTORE LOG db FROM DISK='c:/5.bak'/*--收到错误信息服务器: 消息 3135,级别 16,状态 2,行 3文件 'c:/5.bak' 中的备份集是由 BACKUP DATABASE WITH DIFFERENTIAL 创建的,无法用于此还原操作。--*/GO--5. 将差异备份用于RESTORE LOGIF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/4.bak' WITH NORECOVERYRESTORE LOG db FROM DISK='c:/5.bak'/*--收到错误信息服务器: 消息 3135,级别 16,状态 2,行 3文件 'c:/5.bak' 中的备份集是由 BACKUP DATABASE WITH DIFFERENTIAL 创建的,无法用于此还原操作。--*/GO--6. 将差异备份用于错误的完全备份中IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/1.bak' WITH NORECOVERYRESTORE DATABASE db FROM DISK='c:/5.bak'/*--收到错误信息服务器: 消息 3136,级别 16,状态 1,行 3无法将设备 'c:/5.bak' 上的备份应用于数据库 'db'。--*/GO--7. 直接使用日志备份或者差异备份还原IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/5.bak'RESTORE LOG db FROM DISK='c:/2.bak'/*--收到错误信息服务器: 消息 913,级别 16,状态 8,行 3未能找到 ID 为 65535 的数据库。可能该数据库尚未激活,也可能正在转换过程中。--*/GO--8. 还原完全备份时,未使用NORECOVERY,导致不能正确还原日志备份或者差异备份IF DB_ID('db') IS NOT NULL IF DB_ID('db') IS NOT NULL DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/1.bak'RESTORE LOG db FROM DISK='c:/2.bak'/*--收到错误信息服务器: 消息 4306,级别 16,状态 1,行 4先前的还原操作未指定 WITH NORECOVERY 或 WITH STANDBY。请在除最后步骤之外的所有其他步骤中指定 WITH NORECOVERY 或 WITH STANDBY 后,重新启动该还原序列。--*/GO--删除测试IF DB_ID('db') IS NOT NULL DROP DATABASE dbUSE_ master--创建并完全备份数据库CREATE DATABASE dbBACKUP DATABASE db TO DISK='c:/db.bak' WITH FORMATGO--标记事务处理BEGIN TRANSACTION Tran1 WITH MARKCREATE TABLE db.dbo.tb(id int)COMMIT TRAN Tran1--事务完成后插入数据INSERT db.dbo.tb SELECT id FROM sysobjectsGO--还原数据到事务标记 Tran1 前BACKUP LOG db TO DISK='c:/db_log.bak' WITH FORMATDROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/db.bak' WITH NORECOVERYRESTORE LOG db FROM DISK='c:/db_log.bak' WITH STOPBEFOREMARK='Tran1'SELECT COUNT(*) FROM db.dbo.tb/*--事务标记 Tran1 前没有创建表,所以会收到错误信息对象名 'db.dbo.tb' 无效。--*/GO--还原数据库到事务标记 Tran1 后DROP DATABASE dbRESTORE DATABASE db FROM DISK='c:/db.bak' WITH NORECOVERYRESTORE LOG db FROM DISK='c:/db_log.bak' WITH STOPATMARK='Tran1'SELECT COUNT(*) FROM db.dbo.tb/*--结果----------- 0(所影响的行数为 1 行)--*/GO--删除测试DROP DATABASE db