sqlserver日志找回删除记录(sqlserver数据库表数据误删除了 怎么恢复)

本文目录
- sqlserver数据库表数据误删除了 怎么恢复
- sql server 删除数据错误能还原吗
- SQL中怎么将删除的数据找回来
- sqlserver 数据删除了怎么恢复
- SQLserver 存储过程被删除,怎么恢复
- 怎么查看SQL数据库日志中数据被删除的日志(oracle查询删除数据日志)
- 如何恢复丢失的SQL Server日志文件
- SQL SERVER 只有ldf日志文件怎么恢复数据
sqlserver数据库表数据误删除了 怎么恢复
恢复sqlserver数据库表数据步骤如下:
一、心态:
1、务必冷静,事情已经发生不可慌乱。
2、立即查看当前时间,最好能够精确到秒,并做记录。
3、应立即向直接上级反映此事,不可隐瞒,防止事态扩大。
4、如果权限允许,应当立即停止相关应用,防止有新的数据写入数据库。
二、恢复:
1、构建新数据库以及写入一些数据
2、做一次完整备份,这个是前提,没有一份完整备份文件是无法进行接下来的操作的。
注意:如上图所示,恢复模式一定要说完整,如果是其他类型那恐怕就没有下文了。一般来讲新建数据库的时候,默认不要去改恢复模式这个属性。
3、写入一条新数据。
4、记住此时要记录时间点。
此刻最好看一下系统时间。接下来就要演示如何进行数据恢复。
5、做事务日志备份,做事务日志备份需要注意一下一点,如图所示。
备份模式请选择事务日志,备份路径自行决定
进入选项,将可靠性第1、2勾选,事务日志选择第二个,压缩属性可以不选择.点击确定备份成功,此时数据库将显示为正在还原状态
注意:如果备份失败,请检查该数据库是否正在被占用,如果是请kill。
6、还原完整备份。
数据库处于正在还原状态,右键数据库--任务--还原--文件和文件组,选择最近的一次完整备份。此时,需要在“选项”中选择第二种还原方式,具体如下图。
如上图,勾选完整数据备份文件。
如上图,恢复状态选择第二种,从字面意思就知道为什么要选择这种。
7、接着还原备份的事务日志。
完整备份还原完毕,接着要对事务日志进行还原,右键数据库--任务--还原--事务日志,如下图:
还原事务日志的时候需要特别注意“时间点”这个设置,其他不需要设置。
时间点选择为误删数据的时间点之前就可以恢复出误删的数据,所以之前强调要查看一下时间。如下图所示
点击确定,在确定等待还原成功,数据库变成可用状态。如下图。
如果查询发现数据不是你想要的,那么可以重复上述的操作,从备份事务日志开始,然后最后选择时间点的时候在缩小范围。
sql server 删除数据错误能还原吗
一、在LOG文件完整的情况下,可以还原。但一般而言,是将数据库的整个的状态还原到误删除数据之前。建议备份当前数据库。
二、给出SQL 2008下的具体做法,别的版本的SQL Server可参照操作。
最常用的就是日志尾部备份恢复法。以下环境2008R2,对于2008及其以上版本可以使用这个方法,其实2005也可以,2000很少用,没测试过。(SQL2008之前可以使用Log Exploer这个第三方工具。)
步骤:(1)、检查数据库的恢复模式,如图:
或者使用脚本检查:
SELECT recovery_model,recovery_model_desc
FROM sys.databases
WHERE name =’AdventureWorks’
结果如下:
确保数据库的恢复模式最起码不能为【简单】。如果不是完整模式,请改为完整模式,改之前如数据被删,无法恢复。
(对于重要生产数据库环境,强烈建议使用【完整恢复模式】,虽然对于另外两种(大容量日志(BULK_LOGGED)、简单(SIMPLE))来说,完整恢复模式产生的日志会大,但是在出现问题的时候,就会觉得这些都不算什么了。)
(2)、要求曾经做过最少一次的完整备份。因为所有类型的备份都基于完整备份,如果没有最少一次完整备份,其他类型的备份都无效。所以在创建完一个新数据库之后,强烈建议做一次完整备份。
使用以下的语句粗略可以看到有那些数据库做过备份:
SELECT database_name,recovery_model,name
FROM msdb.dbo.backupset
(3)、确保别人不再连接数据库,然后做一次日志尾部备份:
首先先创建一点数据:
/*
这里使用微软的示例数据库AdventureWorks做示例
*/
USE AdventureWorks
GO
IF OBJECT_ID(’testRestore’) IS NOT NULL
DROP TABLE testRestore
GO
CREATE TABLE testRestore
(
id INT IDENTITY(1, 1) ,
NAME VARCHAR(50)
);
--插入测试数据:
INSERT INTO testRestore(Name)
SELECT ’test1’
UNION ALL
SELECT ’test2’
UNION ALL
SELECT ’test3’
UNION ALL
SELECT ’test4’
UNION ALL
SELECT ’test5’
UNION ALL
SELECT ’test6’
UNION ALL
SELECT ’test7’
UNION ALL
SELECT ’test8’
SELECT * FROM testRestore
检查一下结果:
然后做个删除操作,为了定位是啥时候发生的,我加了一个waitfor命令,让它在某个时间发生,这样恢复的时候就有准确性:
USE AdventureWorks
GO
WAITFOR TIME ’21:45’
DELETE FROM dbo.testRestore
现在来看看数据:
USE AdventureWorks
GO
SELECT * FROM dbo.testRestore
《〈〈〈〈〈〈〈〈〈下面是重点〉〉〉〉〉〉〉〉〉》
做一次日志备份,最重要是选择【备份日志尾部】
然后在【选项】页选择:除【事务日志】外,其他红框包裹的地方为强烈建议勾选的地方。并且保证数据库不要有别人在连接,因为备份日志尾部会使数据库处于还原状态,拒绝其他会话的连接,如果不断开其他连接,是备份不了的。
按确定,也可以使用上方的【脚本】来生成语句:
USE Master
GO
BACKUP LOG TO DISK = N’E:\AdventureWorks.bak’ WITH NO_TRUNCATE , NOFORMAT, NOINIT, NAME = N’AdventureWorks-事务日志 备份’, SKIP, NOREWIND, NOUNLOAD, NORECOVERY , COMPRESSION, STATS = 10, CHECKSUM
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N’AdventureWorks’ and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N’AdventureWorks’ )
if @backupSetId is null begin raiserror(N’验证失败。找不到数据库“AdventureWorks”的备份信息。’, 16, 1) end
RESTORE VERIFYONLY FROM DISK = N’E:\AdventureWorks.bak’ WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO
此时,数据库会处于【正在还原】的状态
如果发现备份不了可以用下面语句查看,并把spid杀掉:
SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID(’AdventureWorks’)
执行结果如下图:
然后用kill语句杀掉。
接着继续备份,然后进行还原,如图,先要还原完整备份,选择最近的那次,只认最后一次备份,所以要选择最新的那次,否则还原不了。
又有一个注意事项,记得如下图选择:
接着还原日志文件,这是最最重要的一步:
然后:
(图中在22:20分删除数据的,只要把时间点指定到你误删除的时间之前即可)由于日志尾部备份都是最后一个备份文件,所以这里选则红框部分即可:
点确定,完成后再检查一下表,可以看到,数据已经还原成功。
**************************************************************************
总结:
1、方法看上去有点繁琐,但是实际操作并不太难。
2、再次强调,先备份现场环境,无论故障影响有多严重,保全好当时情况。如果并不是重要生产数据,当别论。
3、步骤建议严格按照上面提示,对重要数据库实际操作前建议先在测试数据库中演练并理解后再正式操作。
额外提醒,此方法的缺点:
1、如果误操作以后还有很多人做了操作,还原后,连着别人的操作数据都会冲掉,所以发生误操作后,应考虑停止它人对数据库的操作。。
2、此方法要对数据库独占,操作过程中,它人无法使用与联接数据库。
SQL中怎么将删除的数据找回来
如果你删除后还未进行备份,可以停止SQL服务(这样才能复制数据库的文件)
复制你误删除数据的数据库的数据文件(.mdf)和日志备份(.ldf)到另一台电脑,然后附加,再装上log explorer来恢复误删除的数据
如果你删除后已经进行了备份,那就没戏了,因为备份会清理日志,而log explorer是利用日志来恢复的,没有日志当然就恢复不了.
==============
删除后你备份了没有?! 没有就可以试一下!
sqlserver 数据删除了怎么恢复
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, 然后就完成数据的恢复!
SQLserver 存储过程被删除,怎么恢复
实际操作系统文件在磁盘上的物理名称,在该文件中将存储数据或日志(取决于定义哪个部分)。默认情况下,文件位于\Program Files\Microsoft SQLServer10.MSSQLSERVER\MSSQL(或者SQL Server安装主目录)的\Data子目录下。如果是处理物理数据库文件,那么名称将和数据库名称一样,但是带有.mdf扩展名。如果处理日志文件,那么名称和数据库文件的名称一样,但是有后缀_Log以及扩展名.ldf。建议使用默认扩展名.mdf(数据库)和.ldf(日志文件)。附属文件的扩展名是.ndf。
怎么查看SQL数据库日志中数据被删除的日志(oracle查询删除数据日志)
使用LogExplorer查看和恢复数据LogExplorer4
1
可用于SQLServer2005的日志查看工具下载地址:download
csdn
net/source/620271使用方法:打开LogExplorer-》AttachLogFile-》选择SQLServer服务器和登陆方式-》Connect-》在DatabaseName中选择数据库-》Attach-》左面对话框中Browse-》ViewLog-》就可以看到log记录了
如何恢复丢失的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’,1reconfigure with overrideGo 接着运行以下语句,把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’,0Go 如果没有什么大的问题,刷新一下数据库,数据库AAA又会出现在你面前,但目前恢复工作还没有做完,此时的数据库仍不能工作,还要进行下面的处理,才能真正恢复。 ④利用DTS的导入导出向导,把数据库AAA导入到一个新建数据库BBB中 新建一个数据库BBB; 右击BBB,选择IMPORT功能,打开导入向导; 目标源选择"在SQL Server数据库之间复制对象和数据库",这样可以把表结构,数据视图和存储过程导入到BBB中 再用此功能把BBB库替换成原来的AAA库即可。 到此为止,数据库AAA就完全恢复。 SQLServer日志文件丢失是一件非常危险的事情,很有可能你的数据库彻底毁坏。SQL Server数据库的恢复都是靠日志文件来完成,所以无论如何都要保证日志文件的存在,它至关重要。为了使我们的数据库万无一失,最好采用多种备份方式相结合,所以我们要从心里重视数据库的管理与维护工作。
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:\test_data.bak’ WITH FORMAT
GO
--把数据库还原成备用数据库(演示主数据库与这个备用数据库之间的同步)
RESTORE DATABASE Db_test_bak FROM DISK=’c:\test_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:\test_log.bak’’ WITH FORMAT
--备用数据库中还原主数据库的日志备份(应用主数据库中的最新变化
--实际应该时主数据库备份与备用数据库的还原作业应该分别在主服务器和备用服务器上建立,并且备份文件应该放在主服务器和备用都能访问的共享目录中
RESTORE LOG Db_test_bak FROM DISK=’’c:\test_log.bak’’ WITH STANDBY=’’c:\test_log.ldf’’’,
@retry_attempts = 5,
@retry_interval = 5
--创建调度(每分钟执行一次)
EXEC msdb..sp_add_jobschedule
@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:\test_log.bak’’ WITH FORMAT
--再在备用数据库中恢复最新的事务日志,并且使备用数据库可读写(升级为主数据库)
--RESTORE LOG Db_test_bak FROM DISK=’c:\test_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服务的启动帐户与共享目录的有效访问同名且密码相同,这样才能通过验证(所以你也可以用其他有效的用户来代替,只需要满足用户名和密码相同,并且拥有足够的权限)

更多文章:
rocket league(rocket league这个游戏怎么样)
2025年5月29日 22:00
microsoft word打印在哪里(Microsoft Word怎么打印单个文件)
2026年9月30日 09:10
xp sp2 序列号(windows xp professional sp2 序列号是什么)
2025年4月15日 11:20
火星字在线转换(怎么边打字,边打出特殊符号和繁体字.火星字)
2025年4月17日 12:30
不收费的视频恢复软件(手机删除的视频恢复软件那个好.不要钱那种有没有)
2025年10月24日 20:00
移动应用程序(安卓手机怎么移动软件图标为什么自动移到桌面啊怎么移动到上一页)
2025年5月24日 08:10
win10最下面一排点了没反应(win10电脑下方任务栏点不动)
2026年5月25日 10:15
















