首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于日志备份还原的问题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-25 08:51:42 楼主
    各位大侠
    小妹部署一个每小时一次的日志备份,在执行日志还原时,由于期间已经进行了多次日志备份,所以每次都是需要手工指定备份集的备份号,按照顺序逐一还原日志备份文件,很累。

    能不能有个办法,读出日志备份中一共有多少个备份号,然后自动按照备份号的顺序逐一执行restore log 语句,还原数据库呢
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rouqu
    • 等级:
    发表于:2008-01-25 09:16:401楼 得分:0
    小妹妹的帖
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sdsxlj
    • 等级:
    发表于:2008-01-25 09:24:422楼 得分:0
    顶小妹妹
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ljsql
    • 等级:
    发表于:2008-01-25 09:31:553楼 得分:0
    关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojuju10
    • 等级:
    发表于:2008-01-25 10:41:384楼 得分:0

    建议小妹妹,将日志备份、差异备份和全备份结合起来使用,这样还原的时候不用还原一个个日志备份了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojuju10
    • 等级:
    发表于:2008-01-25 10:42:175楼 得分:0

    小妹妹的方面好像行不通,需要手工一个个去还原
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-01-25 10:47:006楼 得分:0
    SQL code
    --创建测试数据库 CREATE DATABASE Db GO --对数据库进行备份 BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT GO --创建测试表 CREATE TABLE Db.dbo.TB_test(ID int) --延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败) WAITFOR DELAY '00:00:01' GO --假设我们现在误操作删除了 Db.dbo.TB_test 这个表 DROP TABLE Db.dbo.TB_test --保存删除表的时间 SELECT dt=GETDATE() INTO # GO --在删除操作后,发现不应该删除表 Db.dbo.TB_test --下面演示了如何恢复这个误删除的表 Db.dbo.TB_test --首先,备份事务日志(使用事务日志才能还原到指定的时间点) BACKUP LOG Db TO DISK='c:\db_log.bak' WITH FORMAT GO --接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行) RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE,NORECOVERY GO --将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早 DECLARE @dt datetime SELECT @dt=DATEADD(ms,-20,dt) FROM # --获取比表被删除的时间略早的时间 RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY,STOPAT=@dt GO --查询一下,看表是否恢复 SELECT * FROM Db.dbo.TB_test /*--结果: ID ----------- (所影响的行数为 0 行) --*/ --测试成功 GO --最后删除我们做的测试环境 DROP DATABASE Db DROP TABLE #
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-01-25 10:47:197楼 得分:0
    SQL code
    USE master --创建并完全备份数据库 CREATE DATABASE db BACKUP DATABASE db TO DISK='c:\db.bak' WITH FORMAT GO --标记事务处理 BEGIN TRANSACTION Tran1 WITH MARK CREATE TABLE db.dbo.tb(id int) COMMIT TRAN Tran1 --事务完成后插入数据 INSERT db.dbo.tb SELECT id FROM sysobjects GO --还原数据到事务标记 Tran1 前 BACKUP LOG db TO DISK='c:\db_log.bak' WITH FORMAT DROP DATABASE db RESTORE DATABASE db FROM DISK='c:\db.bak' WITH NORECOVERY RESTORE 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 db RESTORE DATABASE db FROM DISK='c:\db.bak' WITH NORECOVERY RESTORE LOG db FROM DISK='c:\db_log.bak' WITH STOPATMARK='Tran1' SELECT COUNT(*) FROM db.dbo.tb /*--结果 ----------- 0 (所影响的行数为 1 行) --*/ GO --删除测试 DROP DATABASE db
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-01-25 10:47:398楼 得分:0
    SQL code
    USE master --创建数据库 CREATE DATABASE db ON PRIMARY( NAME='db_data', FILENAME= 'c:\db_data.mdf') LOG ON( NAME='db_log', FILENAME ='c:\db.ldf') GO --创建表 CREATE TABLE db.dbo.ta(id int) INSERT db.dbo.ta SELECT id FROM sysobjects GO --做文件组备份 BACKUP DATABASE db TO DISK='c:\db.bak' WITH FORMAT --备份后,再做数据处理 CREATE TABLE db.dbo.tb(id int) INSERT db.dbo.tb SELECT id FROM sysobjects GO /*--下面演示了破坏数据文件的处理,这些操作在操作系统中进行 1. 停止SQL Server服务(msqlserver服务) 2. 删除文件 c:\db_data.ndf (模拟破坏) 3. 重新SQL Server服务,此时数据库DB置疑 --*/ GO --下面演示了如何恢复数据 --首先要备份当前日志 BACKUP LOG db TO DISK='c:\db_log.bak' WITH FORMAT,NO_TRUNCATE --利用文件组备份恢复破坏的文件 RESTORE DATABASE db FROM DISK='c:\db.bak' WITH NORECOVERY --还原到日志点 RESTORE LOG db FROM DISK='c:\db_log.bak' WITH RECOVERY --显示已经恢复的数据 SELECT COUNT(*) FROM db.dbo.ta SELECT COUNT(*) FROM db.dbo.tb GO --删除测试 DROP DATABASE db
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sdsxlj
    • 等级:
    发表于:2008-01-25 11:35:319楼 得分:0
    小妹妹的贴人还真多
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ljsql
    • 等级:
    发表于:2008-01-25 11:43:1910楼 得分:0
    ....昨天出现的今天又出现了...

      都是龟的错...天天看到就帖出来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-25 11:44:1111楼 得分:0
    ding
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • w2jc
    • 等级:
    发表于:2008-01-25 11:50:1112楼 得分:0
    小妹部署一个每小时一次的日志备份,在执行日志还原时,由于期间已经进行了多次日志备份,所以每次都是需要手工指定备份集的备份号,按照顺序逐一还原日志备份文件,很累。
    ---------------------------------------------
    呵呵,见到有人做类似的。
    我们也是每小时都有日志备份,很偶然的情况下要恢复到时间点,所以要读一堆日志文件。

    基本思路是:
    把日志文件名放在一个文件里面,
    写个脚本读这个文件到临时表里面,
    逐行读这个表中的文件名,
    生成类似“restore database <DB> from disk= <LogFilePath> with norecovery"的语句,
    执行这个语句,
    如此循环直到读完最后一个日志文件

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • only_endure
    • 等级:
    发表于:2008-01-25 12:53:3113楼 得分:0
    新手学习.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-25 13:01:0614楼 得分:0
    up
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved