首页 > 代码库 > 日志备份和差异备份还原中的常见问题示例(转自&邹建)
日志备份和差异备份还原中的常见问题示例(转自&邹建)
--创建测试
CREATE
DATABASE
db
GO
--正常备份
BACKUP
DATABASE
db
TO
DISK=
‘c:\1.bak‘
WITH
FORMAT
BACKUP LOG db
TO
DISK=
‘c:\2.bak‘
WITH
FORMAT
BACKUP LOG db
TO
DISK=
‘c:\3.bak‘
WITH
FORMAT
BACKUP
DATABASE
db
TO
DISK=
‘c:\4.bak‘
WITH
FORMAT
BACKUP
DATABASE
db
TO
DISK=
‘c:\5.bak‘
WITH
FORMAT,DIFFERENTIAL
BACKUP LOG db
TO
DISK=
‘c:\6.bak‘
WITH
FORMAT
GO
--下面是用于日志备份和差异备份还原中易犯的错误
--1. 恢复时使用错误的日志顺序
IF DB_ID(
‘db‘
)
IS
NOT
NULL
DROP
DATABASE
db
RESTORE
DATABASE
db
FROM
DISK=
‘c:\1.bak‘
WITH
NORECOVERY
RESTORE 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
db
RESTORE
DATABASE
db
FROM
DISK=
‘c:\4.bak‘
WITH
NORECOVERY
RESTORE LOG db
FROM
DISK=
‘c:\2.bak‘
/*
--收到错误信息
服务器: 消息 4326,级别 16,状态 1,行 5
此备份集中的日志终止于 LSN 6000000002800001,该 LSN 太早,无法应用到数据库。包含 LSN 6000000003000001 的较新的日志备份可以还原。
--*/
GO
--3. 将日志备份用于RESTORE DATABASE
IF DB_ID(
‘db‘
)
IS
NOT
NULL
DROP
DATABASE
db
RESTORE
DATABASE
db
FROM
DISK=
‘c:\2.bak‘
WITH
NORECOVERY
/*
--收到错误信息
服务器: 消息 3135,级别 16,状态 2,行 4
文件
‘c:\2.bak‘
中的备份集是由 BACKUP LOG 创建的,无法用于此还原操作。
--*/
GO
--4. 将差异备份用于RESTORE LOG
IF DB_ID(
‘db‘
)
IS
NOT
NULL
IF DB_ID(
‘db‘
)
IS
NOT
NULL
DROP
DATABASE
db
RESTORE
DATABASE
db
FROM
DISK=
‘c:\4.bak‘
WITH
NORECOVERY
RESTORE LOG db
FROM
DISK=
‘c:\5.bak‘
/*
--收到错误信息
服务器: 消息 3135,级别 16,状态 2,行 3
文件
‘c:\5.bak‘
中的备份集是由 BACKUP
DATABASE
WITH
DIFFERENTIAL 创建的,无法用于此还原操作。
--*/
GO
--5. 将差异备份用于RESTORE LOG
IF DB_ID(
‘db‘
)
IS
NOT
NULL
IF DB_ID(
‘db‘
)
IS
NOT
NULL
DROP
DATABASE
db
RESTORE
DATABASE
db
FROM
DISK=
‘c:\4.bak‘
WITH
NORECOVERY
RESTORE 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
db
RESTORE
DATABASE
db
FROM
DISK=
‘c:\1.bak‘
WITH
NORECOVERY
RESTORE
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
db
RESTORE
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
db
RESTORE
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
db
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。