通过数据库日志恢复被MSSql删除的记录
类型:数据库类大小:3.1M语言:英语评分:6.6标签:立即下载。调试的时候,一切似乎都在掌控之中。但是提交到服务器后,一切都明显奇怪了。因为不熟悉SQL,只能点击选择、更新、删除、插入。昨天不小心删除了一个数据很少但不在手工处理范围内的表中的数据。
因为知道SQL Server有日志这种东西,事后我表现得很冷静,事发一小时之内。一个小时后,我发现我无法控制这个事件。
我在网上搜索恢复数据的方法。啰嗦是必要的。
问题1:
远程端和服务器端都不能对数据库执行除“添加、删除、检查和更改”之外的其他操作(假设数据库称为测试),例如分离、离线、恢复.错误提示是
例如1“测试数据库无法分离,因为它当前正在使用中。”
例如2“因为数据库正在使用,所以无法获得对数据的独占访问,操作异常终止”
无论如何,这意味着你不能阻止别人的访问。但这正是我们想要做的.我们必须和它说再见。
告别的方法是关闭所有访问数据库Test的进程。
createproc kill spid(@ dbnamevarchar(20))as begin declare @ sqlnvarchar(500)declare @spidint set @ SQL=' declare getspid游标用于从sysprocesses中选择spid,其中dbid=db _ id(' ' @ dbname ' ')' exec(@ SQL)打开getspid fetchnextfrom getspid进入@ spid,而@ fetch _ status-1 begin exec(' kill ' @ spid)Fetchextfrom getspid进入@ spid end close getspid解除分配getspid
PS:
我以这种方式理解代码,定义一个存储过程来终止访问数据库的过程。编写一个代码来获取进程标识,并在一个循环中杀死每个进程。最后,调用存储过程。
我不知道存储过程,但这就是它的意思。
问题2:
没有备份数据库,如何恢复数据
有一个叫日志浏览器的软件,可以根据数据库日志回到过去的任何时间。
打开SQL Server日志资源管理器的日志资源管理器文件=附加日志文件-选择服务器和登录方式-连接-选择数据库-附加-浏览-查看日志-在左侧对话框中,可以看到日志记录。点击“查看DDL命令”里面有很多拖放表命令。点击下面的“撤销”按钮,生成表结构的语句(创建表.).单击下面的“打捞”按钮生成插入语句(插入到.价值观念.)如果要恢复,右键日志记录撤销翻译-选择要保存的文件名和路径-然后打开文件到查询分析器执行T-sql代码。例如,如果日志是删除表,其中.生成的文件代码是INSERT TABLE.日志资源管理器使用的一些问题。数据库完全不同,在进行日志备份时,事务日志中的非活动条目会被删除。当您尝试使用日志资源管理器读取日志时,系统会提示您没有找到与筛选器匹配的日志记录器。呃,您想查看未过滤的数据吗选择是,您刚才看不到记录。如果不选择删除事务日志中的非活动条目,然后使用日志资源管理器尝试查看日志,则可以看到原始日志
SQL Server的日志资源管理器是个好东西,但是根本解决不了我的问题。数据库在服务器端,学校根本不让我在服务器上安装一个软件。而且我已经确认这个软件必须安装在服务器端。所以,对我来说,这是毁了。但这并不意味着它不是利器。
最后我很痛苦的解决了。
1.分离数据库并备份测试;
2.将数据库连接回来,用自己的恢复方法恢复到很久以前;
3.将所需的表复制到备份数据库;
4.将备份数据库挂回并删除原始数据库。
这是一种非常痛苦的方式,碰巧手表没有换过。
第一次知道DBA的重要性。
我的方法是一件很偶然的事情。希望大家能分享一些真正能解决恢复问题的解决方案。当然,偶尔备份绝对没有错。
方法
此外,还找到了一种更具技术性和可行性的方法
1.如果在误操作之前有一个完整的数据库备份(或多个差异备份或增量备份),首先要做的是进行日志备份
(如果设置了集群。登录chkpt。选项设为1为了不使日志文件变大,你会死。)
将日志dbname备份到磁盘=' filename '-注意:这是日志备份!
2.恢复完整的数据库备份,注意需要与norecovery一起使用,如果有其他差异备份或增量备份,请逐个恢复
用norecovery从磁盘还原数据库DBname=' FIlename '
3.恢复上一次日志备份,也就是刚刚做的日志备份,并将恢复时间点指定到误操作前的时间
用stopat='date_time '从磁盘还原日志dbName=' fileName '
完全码
-1.如果在误操作前有完整的数据库备份(或多次差异备份或增量备份),首先要做的是做日志备份(如果将trunc.log on chkpt.option设置为1,防止日志文件变大,会死)。将日志dbname备份到磁盘=' filename '-注意:这是日志备份!-2.还原完整的数据库备份。注意与norecovery一起使用。如果有其他差异备份或增量备份,请逐个使用norecovery从磁盘还原数据库dbname=' filename '。3.恢复上一次日志备份,即刚刚进行的日志备份。将恢复时间点指定为从磁盘误操作还原日志dbname=' filename '之前的时间,stopat=' date _ time '
版权声明:通过数据库日志恢复被MSSql删除的记录是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。