‘壹’ sql server 数据库误删,有日志文件如何还原
恢复条件
1.数据库是完整恢复模式.
2.误操作以来未日志截断.那么,使用Log
Explorer导出反误操作的SQL脚本.
‘贰’ 如何从数据库的完整日志模式还原误删除的数据
从数据库的完整日志模式还原误删除的数据的解决办法
SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可。但是,这个恢复需要有两个前提条件:
1. 至少有一个误删除之前的数据库完全备份。
2. 数据库的恢复模式(Recovery mode)是“完整(Full)”。
针对这两个前提条件,会有三种情况:
情况一、如果这两个前提条件都存在,通过SQL语句只需三步就能恢复(参考文章),无需借助第三方工具。
a) 备份当前数据库的事务日志:BACKUP LOG [数据库名] TO disk= N'备份文件名' WITH NORECOVERY
b) 恢复一个误删除之前的完全备份:RESTORE DATABASE [数据库名] FROM DISK = N'完全备份文件名' WITH NORECOVERY, REPLACE
c) 将数据库恢复至误删除之前的时间点:RESTORE LOG [数据库] FROM DISK = N'第一步的日志备份文件名' WITH STOPAT = N'误删除之前的时间点' , RECOVERY
情况二、如果第1个前提条件不存在,第2个前提条件存在,需要借助第三方工具。
情况三、如果第2个前提条件不存在,无法恢复。所以,一定要将数据库恢复模式设置为“完整(Full)”。
我现在面临的是第二种情况,需要找第三方工具。
开始找的是Log Explorer for SQL Server,不支持SQL Server 2008。
后来找的是SQL Log Rescue,也不支持SQL Server 2008。
接着找到的是SysTools SQL Recovery,支持SQL Server 2008,但需要购买,Demo版并没有数据恢复功能。
最终在officerecovery.com上找到Recovery for SQL Server,虽然也是商业软件,需要购买,但Demo版可以恢复数据,只要数据库文件不超过24Gb。幸好朋友的数据库文件不大,用它完成了误删除数据的恢复。
下面分享一下用Recovery for SQL Server进行恢复的操作步骤:
1. 运行Recovery for SQL Server
2. 点击菜单中的 File > Recover,选择要恢复的数据库的数据文件(.mdf)
3. Next > Next,进入 Recovery Configuration 界面,选择Custom(选择了Custom才可以选择从日志中恢复误删除的数据)。
4. Next 进入 Recovery options 窗口,选中 Search for deleted records,并选择要恢复的数据库的日志文件路径(log file path)。
5. Next 并选择目标文件夹(Destination folder),用于存放恢复过程中生成的SQL语句与bat文件。
6. 点击Start,开始恢复操作(在上一步选择的目标文件夹中生成相应的SQL文件与Bat文件),然后,出现 SQL Server Database Creation Utility 窗口。
7. Next,选择被恢复数据存放的目标数据库。
8. Next, 选择 Import availiable data from both database and log files
9. Next, Next, 然后就完成数据的恢复!
小刚SEO为你解答
‘叁’ 十万火急!sql误删数据,如何从日志文件恢复
看看这个,希望对你有帮助2楼
http://topic.csdn.net/t/20051016/08/4329162.html
‘肆’ 根据日志恢复sql数据库~~急!!!!!!!!
恐怕是没有,关注.
‘伍’ sqlserver 如何通过日志进行数据恢复
目前SqlServer没有单表恢复,相对于oracle确实是一个不太方便的事情。
你可以将数据恢复到一个新数据库,然后将误删的数据插入到目前A表中,这样就不会影响其他数据了。
‘陆’ 如何使用事务日志恢复SQL Server数据库
大多数数据库管理员都害怕听说要将数据库恢复到某个时间点,特别是在数据库为生产数据库的情况下。但是,了解如何恢复数据库是数据库管理员技能背景中一个至关重要的组成部分。本文将说明如何把一个SQL Server数据库回复到恢复一个数据表的时候。
https://www.cnblogs.com/zhongsh/archive/2013/10/01/3348446.html
‘柒’ 华信SQL SERVER日志恢复工具怎么样
--恢复Master--方法1:重装SQL,但是数据就Over掉了--方法2:重建MasterRebuildm.exe用到SQL的安装文件,--从安装目录X86\Data中拷取原文件--重建成功后,不要启动SQLServer,以单用户模式进入SQL--SQLserver的安装目录\bin\sqlservr.exe-m--还原数据库备份restoredatabasemasterfromdisk='e:\master.bak'--恢复Master--启动SQLSERVERsp_admpdevice'disk',Mas,'E:\Master.bak'--CuttheMasterdb--rebuildm.exe--Sqlservr.exe-='e:\master.bak'如果是Model数据库损坏,具体过程为:先重建Master数据库,再恢复Model数据库的备份;MSDB的损坏不影响SQLServer的正常运行,备份还原和用户数据库相同TempDB:SQLServer每次启动的时候,都会使用Model数据库重建,不用备份
‘捌’ sql中的数据,用delete删除了,用什么软件进行恢复
这个基本上很难实现了,那些恢复软件只能处理删除系统中的文件,但是数据库的删除操作是在文件内部的,很难控制,有可能数据库在进行其他读写的时候将删除的数据空间给回收了,所以这样就会被新数据覆盖
即时没有被覆盖,数据库通常不会执行一个真正的删除操作,而是在删除记录的位置放置一个失效标记,便于以后的回收,这个策略是处于效率上的考虑。但是虽说记录还在,但是这种恢复是非常难以实现的,需要了解数据库存储文件的格式才有希望做到。据说oracle有这类软件,但是是付费的。
‘玖’ SQL SERVER 只有ldf日志文件怎么恢复数据
参考下列说明:
/*--说明:
下面的代码演示了如何利用日志还原功能,将主数据库中的数据变化及时反馈到备用数据库中
备用数据库的数据可以随时用于查询,但不能被更新(备用数据库只读)。
--*/
--首先,创建一个演示用的数据库(主数据库)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
FILENAME = 'c:Db_test.mdf' )
LOG ON
( NAME = Db_test_LOG,
FILENAME = 'c:Db_test.ldf')
GO
--对数据库进行备份
BACKUP DATABASE Db_test TO DISK='c: est_data.bak' WITH FORMAT
GO
--把数据库还原成备用数据库(演示主数据库与这个备用数据库之间的同步)
RESTORE DATABASE Db_test_bak FROM DISK='c: est_data.bak'
WITH REPLACE,STANDBY='c:db_test_bak.ldf'
,MOVE 'Db_test_DATA' TO 'c:Db_test_data.mdf'
,MOVE 'Db_test_LOG' TO 'c:Db_test_log.ldf'
GO
--启动 SQL Agent 服务
EXEC master..xp_cmdshell 'net start sqlserveragent',no_output
GO
--创建主服务器数据训与备用服务器数据库之间同步的作业
DECLARE @jogid uniqueidentifier
EXEC msdb..sp_add_job
@job_id = @jogid OUTPUT,
@job_name = N'数据同步处理'
--创建同步处理步骤
EXEC msdb..sp_add_jobstep
@job_id = @jogid,
@step_name = N'数据同步',
@subsystem = 'TSQL',
@command = N'
--主数据库中进行日志备份
BACKUP LOG Db_test TO DISK=''c: est_log.bak'' WITH FORMAT
--备用数据库中还原主数据库的日志备份(应用主数据库中的最新变化
--实际应该时主数据库备份与备用数据库的还原作业应该分别在主服务器和备用服务器上建立,并且备份文件应该放在主服务器和备用都能访问的共享目录中
RESTORE LOG Db_test_bak FROM DISK=''c: est_log.bak'' WITH STANDBY=''c: est_log.ldf''',
@retry_attempts = 5,
@retry_interval = 5
--创建调度(每分钟执行一次)
EXEC msdb..sp_add_jobschele
@job_id = @jogid,
@name = N'时间安排',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x4,
@freq_subday_interval=1,
@freq_recurrence_factor=1
-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jogid,
@server_name = N'(local)'
GO
--通过上述处理,主数据库与备用数据库之间的同步关系已经设置完成
--下面开始测试是否能实现同步
--在主数据库中创建一个测试用的表
CREATE TABLE Db_test.dbo.TB_test(ID int)
GO
--等待1分钟30秒(由于同步的时间间隔设置为1分钟,所以要延时才能看到效果)
WAITFOR DELAY '00:01:30'
GO
--查询一下备用数据库,看看同步是否成功
SELECT * FROM Db_test_bak.dbo.TB_test
/*--结果:
ID
-----------
(所影响的行数为 0 行)
--*/
--测试成功
GO
--最后删除所有的测试
DROP DATABASE Db_test,Db_test_bak
EXEC msdb..sp_delete_job @job_name=N'数据同步处理'
GO
/*===========================================================*/
/*--服务器档机处理说明
使用这种方式建立的数据库同步,当主数据库不可用时(例如,主数据库损坏或者停机检修)
可以使用以下两种方法使备用数据库可用。
--*/
--1. 如果主数据库损坏,无法备份出最新的日志,可以直接使用下面的语句使备用数据库可读写(丢失最近一次日志还原后的所有数据)。
--RESTORE LOG Db_test_bak WITH RECOVERY
--2. 如果主数据库可以备份出最新日志,则可以使用下面的语句。
--先备份主数据库的最新的事务日志
--BACKUP LOG Db_test TO DISK=''c: est_log.bak'' WITH FORMAT
--再在备用数据库中恢复最新的事务日志,并且使备用数据库可读写(升级为主数据库)
--RESTORE LOG Db_test_bak FROM DISK='c: est_log.bak'
简单地说:
你的sql服务要使用指定的windows用户登陆, 而不能使用"本地系统帐户"
用于登陆sql服务的用户要求对共享目录具有所有权限
如果你的电脑没有加入到域, 还必须保证源和目标服务器的sql服务设置的登陆用户是一样的(用户名和密码都一样)
网络备份主要是权限设置问题, 参考下面的备份文件共享目录权限设置方法去解决目录的共享权限就可以了
下面假设是假设A服务器上的数据库备份到B服务器上的共享目录权限设置(两台服务器应该在局域网内,允许目录共享访问)::
机器A,B创建一个同名的windows用户,用户组设置为administrators,并设置相同的密码,做为备份文件夹文件夹的有效访问用户,操作:
我的电脑
--控制面板
--管理工具
--计算机管理
--用户和组
--右键用户
--新建用户
--建立一个隶属于administrator组的登陆windows的用户
在B机器器上,新建一个共享目录,做为备份文件的存放目录,操作:
我的电脑--D: 新建一个目录,名为: BAK
--右键这个新建的目录
--属性--共享
--选择"共享该文件夹"
--通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限
--确定
设置 MSSQLSERVER 及 SQLSERVERAGENT 服务的启动用户
开始--程序--管理工具--服务
--右键 MSSQLSERVER
--属性--登陆--选择"此账户"
--输入或者选择第一步中创建的windows登录用户名
--"密码"中输入该用户的密码
--确定
--同样的方法设置 SQLSERVERAGENT
在A机器上完成对B机器BAK目录的映射
查询分析器中执行下面的语句,检验是否成功:
exec master..xp_cmdshell 'dir 映射的盘符'
A服务器上做备份计划
备注:创建一个新的用户只是为了让MSSQLSERVER服务的启动帐户与共享目录的有效访问同名且密码相同,这样才能通过验证(所以你也可以用其他有效的用户来代替,只需要满足用户名和密码相同,并且拥有足够的权限)
‘拾’ 如何恢复丢失的SQL Server日志文件
在实际操作中SQLServer日志文件丢失是一件令人十分头疼的事情,以下的文章主要是针对这一问题给出的答案,以下就是正文的主要内容描述。 一、 概述 在应用系统中,数据库往往是最核心的部分,一旦数据库毁坏或损坏,将会带来巨大的损失,所以数据库的管理越来越重要。我们在做数据库管理与维护工作中,不可避免会出现各种各样的错误,本文针对数据库的SQLServer日志文件丢失时如何利用MDF文件恢复数据库的方法进行了研究。 二、 数据库的恢复 当数据库的主数据MDF文件完好无损时,在丢失了LDF文件的情况下,如何利用MDF文件恢复数据库?我们把SQL Server的日志文件分为两类:一类是无活动事务的日志,另一类是含活动事务的日志,根据不同的日志,采取不同的方法来恢复数据库。 1. 无活动事务的日志恢复 无活动事务的日志丢失时,我们很容易利用MDF文件直接恢复数据库,具体方法如下: ①.分离被质疑的数据库,可用企业管理器中的"分离数据库工具",或者用存储过程sp_detach_db分离数据库; ②利用MDF文件附加数据库生成新的日志文件,可用企业管理器中的"附加数据库"的工具,或者用存储过程sp_attach_single_file_db附加数据库。 如果数据库的日志文件中含有活动事务,利用此方法就不能SQLServer日志文件丢失的恢复数据库。 2. 含活动事务的日志恢复 含有活动事务的日志丢失时,利用上述方法就会出现"数据库和日志文件不符合,不能附加数据库"。对于这种情况下,我们采用如下方法: ①新建同名数据库AAA,并设它为紧急模式 停止SQL Server服务器; 把数据库主数据MDF文件移走; 启SQL Server服务器,新建一个同名的数据库AAA; 停止SQL Server服务器,把移走的MDF文件再覆盖回来; 启动SQL Server服务器,把AAA设为紧急模式,不过默认情况下,系统表是不能随便修改的,必须首先设置一下使其能被修改,运行以下语句即可: Use MasterGosp_configure ’allow updates’,1 reconfigure with override Go 接着运行以下语句,把AAA数据库设为紧急模式,即把Sysdatabases表中AAA数据库的status属性设为’37268’,就表示把AAA数据库处于紧急模式。 update sysdatabases set status=32768 where hame=’AAA’ 如果没有报告什么错误,就可以进行以下操作。 ②设置数据库AAA为单用户模式,并检查数据库 重启SQL Server服务器; 把数据库AAA设为单用户模式 Sp_dboption ’AAA’, ’single user’, ’true’ 运行以下语句,检查数据库AAA DBCC CHECKDB(’AAA’) 如果没有什么大的问题就可以把数据库的状态改回去。 ③还原数据库的状态 运行以下语句,就可以把数据库的状态还原: update sysdatabases set status=28 where name=’AAA’ sp_configure ’allow updates’,0 Go 如果没有什么大的问题,刷新一下数据库,数据库AAA又会出现在你面前,但目前恢复工作还没有做完,此时的数据库仍不能工作,还要进行下面的处理,才能真正恢复。 ④利用DTS的导入导出向导,把数据库AAA导入到一个新建数据库BBB中 新建一个数据库BBB; 右击BBB,选择IMPORT功能,打开导入向导; 目标源选择"在SQL Server数据库之间复制对象和数据库",这样可以把表结构,数据视图和存储过程导入到BBB中 再用此功能把BBB库替换成原来的AAA库即可。 到此为止,数据库AAA就完全恢复。 SQLServer日志文件丢失是一件非常危险的事情,很有可能你的数据库彻底毁坏。SQL Server数据库的恢复都是靠日志文件来完成,所以无论如何都要保证日志文件的存在,它至关重要。为了使我们的数据库万无一失,最好采用多种备份方式相结合,所以我们要从心里重视数据库的管理与维护工作。