利用数据库日志恢复数据到时间点的操作(总结)

jiangchuandong 2006-04-17 10:10:51
工作中的一点小总结希望对大家有点帮助
一、利用sql语句或者存储过程操作
这个是我在csdn论坛上摘抄的
一种处理中用到的备份还原的存储过程

RESTORE DATABASE MyNwind
FROM MyNwind_1, MyNwind_2
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog2
WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'

--关闭用户进程处理
if @overexist=1 and @killuser=1
begin
declare hCForEach cursor for
select s='kill '+cast(spid as varchar) from master..sysprocesses
where dbid=db_id(@dbname)
exec sp_msforeach_worker '?'
end

优点:查询分析器直接操作数据库恢复数据,有良好的改装和适用性
缺点 :需要多次操作熟悉其过程,比较难达到企业安全统计审计要求

二、使用组件编程来实现
1、使用sqldmo.dll
C#语言书写的用于Microsoft SQL Server数据库备份和恢复的类:

using System;

namespace DbService
{
/// <summary>
/// DbOper类,主要实现对Microsoft SQL Server数据库的备份和恢复 ,注意使用了数据库时就必须杀死该进程
/// </summary>
public sealed class DbOper
{
/// <summary>
/// DbOper类的构造函数
/// </summary>
private DbOper()
{
}

/// <summary>
/// 数据库备份
/// </summary>
public static void DbBackup()
{
try
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost", "sa", "1234");
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = "Northwind";
oBackup.Files = @"d:\\Northwind.bak";
oBackup.BackupSetName = "Northwind";
oBackup.BackupSetDescription = "数据库备份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
}
catch
{
throw;
}
}

/// <summary>
/// 数据库恢复
/// </summary>
public static void DbRestore()
{
try
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost", "sa", "1234");
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = "Northwind";
oRestore.Files = @"d:\\Northwind.bak";
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
}
catch
{
throw;
}
}
}
}
...全文
1290 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
passionke 2006-11-30
  • 打赏
  • 举报
回复
up
撸大湿 2006-04-21
  • 打赏
  • 举报
回复
UP
tanxiangfeng 2006-04-21
  • 打赏
  • 举报
回复
对,作为数据管理,还是要尽量的小心,不要因为有方法就可以粗心。作任何数据处理之前,一定要做数据库完整备份。
大意失荆州啊
todouwang 2006-04-21
  • 打赏
  • 举报
回复
mark;
jixiaojie 2006-04-21
  • 打赏
  • 举报
回复
up
jwt1982 2006-04-20
  • 打赏
  • 举报
回复
那天,在做一个UPDATE的时候,心中有底,首先,俺有备份维护计划,每天一份。

俺有Log Explorer 查看日志恢复,双保险啊。

结果,执行有问题,少了一个条件。

没关系,俺是双保险

首先研究Log Explorer恢复,才发现,数据库日志设置不知道被谁改成简单了,哭啊。

反正大不了缺一上午数据,咱还原数据库,该表中数据不是很重要呵呵。其他的数据继续用就是了。
找到备份发现,怎么都是10天前的备份??

啊,agent服务不知道被谁给关了,维护计划有10天没工作了。

痛苦了半天啊,还是损失了一部分数据。
-----------------------------------------------------


好郁闷啊!
jiangchuandong 2006-04-20
  • 打赏
  • 举报
回复
up
liangpei2008 2006-04-18
  • 打赏
  • 举报
回复
学习
OracleRoob 2006-04-17
  • 打赏
  • 举报
回复

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧