利用日志还原数据库

USE master
GO
-- 创建测试数据库
CREATE DATABASE db_test GO

-- 对数据库进行备份
BACKUP DATABASE db_test
TO DISK = 'c:/db_test.bak'
WITH FORMAT
GO

-- 创建测试表
CREATE TABLE db_test.dbo.tb_test(
    ID int)

-- 延时 1 秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败)
WAITFOR DELAY '00:00:01'
GO

-- 假设我们现在误操作删除了 db_test.dbo.tb_test 这个表
DROP TABLE db_test.dbo.tb_test
GO

--在删除操作后,发现不应该删除表 db_test.dbo.tb_test

--下面演示了如何恢复这个误删除的表 db_test.dbo.tb_test

--首先,备份事务日志(使用事务日志才能还原到指定的时间点)
BACKUP LOG db_test
TO DISK = 'c:/db_test_log.bak'
WITH FORMAT
GO

-- 获取可尝试的时间范围
IF OBJECT_ID(N'tempdb..#') IS NOT NULL
    DROP TABLE #
CREATE TABLE #(
    BackupName nvarchar(128) ,
    BackupDescription nvarchar(255) ,
    BackupType smallint ,
    ExpirationDate datetime ,
    Compressed tinyint ,
    Position smallint ,
    DeviceType tinyint ,
    UserName nvarchar(128) ,
    ServerName nvarchar(128) ,
    DatabaseName nvarchar(128) ,
    DatabaseVersion int ,
    DatabaseCreationDate datetime ,
    BackupSize numeric(20,0) ,
    FirstLSN numeric(25,0) ,
    LastLSN numeric(25,0) ,
    CheckpointLSN numeric(25,0) ,
    DatabaseBackupLSN numeric(25,0) ,
    BackupStartDate datetime ,
    BackupFinishDate datetime ,
    SortOrder smallint ,
    CodePage smallint ,
    UnicodeLocaleId int ,
    UnicodeComparisonStyle int ,
    CompatibilityLevel tinyint ,
    SoftwareVendorId int ,
    SoftwareVersionMajor int ,
    SoftwareVersionMinor int ,
    SoftwareVersionBuild int ,
    MachineName nvarchar(128) ,
    Flags int ,
    BindingID uniqueidentifier ,
    RecoveryForkID uniqueidentifier ,
    Collation nvarchar(128) ,
    FamilyGUID uniqueidentifier ,
    HasBulkLoggedData bit ,
    IsSnapshot bit ,
    IsReadOnly bit ,
    IsSingleUser bit ,
    HasBackupChecksums bit ,
    IsDamaged bit ,
    BeginsLogChain bit ,
    HasIncompleteMetaData bit ,
    IsForceOffline bit ,
    IsCopyOnly bit ,
    FirstRecoveryForkID uniqueidentifier ,
    ForkPointLSN numeric(25,0) NULL,
    RecoveryModel nvarchar(60) ,
    DifferentialBaseLSN numeric(25,0) NULL,
    DifferentialBaseGUID uniqueidentifier ,
    BackupTypeDescription nvarchar(60) ,
    BackupSetGUID uniqueidentifier NULL
)
INSERT # EXEC(N'
RESTORE HEADERONLY
FROM DISK = ''c:/db_test.bak''
WITH FILE = 1
RESTORE HEADERONLY
FROM DISK = ''c:/db_test_log.bak''
WITH FILE = 1
')
--SELECT
--    *
--FROM #

-- 定义尝试的时间范围,以及尝试时间点的间隔
DECLARE
    @start_date datetime,
    @stop_date datetime,
    @try_step_millsecond int,
    @msg nvarchar(1000)
SELECT
    @start_date = MIN(BackupFinishDate),  -- 尝试查找误删除数据的开始时间
    @stop_date = MAX(BackupFinishDate),   -- 尝试查找误删除数据的结束时间
    @try_step_millsecond = 500            -- 每 500 毫秒为一个时间点找一次数据
FROM #

-- 还原完全备份
RESTORE DATABASE db_test
FROM DISK = 'c:/db_test.bak'
WITH REPLACE,
    NORECOVERY

-- 还原日志备份到各点,以寻找出所需数据
WHILE @start_date < @stop_date
BEGIN
    SELECT
        @start_date = DATEADD(ms, @try_step_millsecond, @start_date),
        @msg = N'尝试时间点: ' + CONVERT(varchar(50), @start_date, 121)

    RAISERROR(@msg, 10, 1) WITH NOWAIT
    BEGIN TRY
        -- 还原日志到指定的点,并通过 STANDBY 使数据库能只读访问
        RESTORE LOG db_test
        FROM DISK = 'c:/db_test_log.bak'
        WITH STOPAT = @start_date,
            STANDBY = 'c:/db_test_redo.bak'

        -- 检查需要的数据是否存在
        IF OBJECT_ID(N'db_test.dbo.tb_test') IS NOT NULL
        BEGIN
            -- 显示还原的时间点
            SELECT Restoreto = @start_date
            -- 完成数据库还原,使数据库可读写
            RESTORE LOG db_test
            WITH RECOVERY

            SELECT
                @start_date = @stop_date
        END
    END TRY
    BEGIN CATCH
    END CATCH
END
GO

--最后删除测试环境
DROP DATABASE db_test
DROP TABLE #

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot集成BeanValidation扩展一:错误提示信息加公共模板

Bean Validator扩展 1、需求 ​ 在使用validator时&#xff0c;有个需求就是公用错误提示信息&#xff0c;什么意思&#xff1f; 举个例子&#xff1a; ​ NotEmpty非空判断&#xff0c;在资源文件中我不想每个非空判断都写”不能为空“&#xff0c;只需要写”###“&#xff0c…

福大软工 · 第十次作业 - 项目测评(团队)

写在前面 本次作业测试报告链接林燊大哥第一部分 调研&#xff0c;评测 一、评测 软件的bug&#xff0c;功能评测&#xff0c;黑箱测试 1.下载并使用&#xff0c;描述最简单直观的个人第一次上手体验 IOS端 UI界面简单明了&#xff0c;是我喜欢的极简风格。课程模块界面简洁优雅…

销货清单数据_2020年8月数据科学阅读清单

销货清单数据Note: I am not affiliated with any of the writers in this article. These are simply books and essays that I’m excited to share with you. There are no referrals or a cent going in my pocket from the authors or publishers mentioned. Reading is a…

c++运行不出结果_fastjson 不出网利用总结

点击蓝字 关注我们 声明 本文作者:flashine 本文字数:2382 阅读时长:20分钟 附件/链接:点击查看原文下载 声明:请勿用作违法用途,否则后果自负 本文属于WgpSec原创奖励计划,未经许可禁止转载 前言 之前做项目在内网测到了一个fastjson反序列化漏洞,使用dnslo…

FocusBI:租房分析可视化(PowerBI网址体验)

微信公众号&#xff1a;FocusBI关注可了解更多的商业智能、数据仓库、数据库开发、爬虫知识及沪深股市数据推送。问题或建议&#xff0c;请关注公众号发送消息留言;如果你觉得FocusBI对你有帮助&#xff0c;欢迎转发朋友圈或在文章末尾点赞[1] 《商业智能教程》pdf下载地址 …

米其林餐厅 盐之花_在世界范围内探索《米其林指南》

米其林餐厅 盐之花Among the culinary world, there are few greater accolades for a restaurant than being awarded a Michelin star (or three!), or being listed as one of the best in the world by a reputable guide. Foodies and fine dine lovers like myself, see …

require_once的用法

require_once 语句和 require 语句完全相同&#xff0c;唯一区别是 PHP 会检查该文件是否已经被包含过&#xff0c;如果是则不会再次包含。 参见 include_once 的文档来理解 _once 的含义&#xff0c;并理解与没有 _once 时候有什么不同。 有一个文件a.php,里面有一个变量$var1…

差值平方和匹配_纯前端实现图片的模板匹配

基础介绍模板匹配是指在当前图像A里寻找与图像B最相似的部分&#xff0c;本文中将图像A称为模板图像&#xff0c;将图像B称为搜索匹配图像。引言&#xff1a;一般在Opencv里实现此种功能非常方便&#xff1a;直接调用result cv2.matchTemplate(templ, search, method)templ 为…

蓝牙耳机音量大解决办法_长时间使用蓝牙耳机的危害这么大?我们到底该选什么蓝牙耳机呢?...

蓝牙耳机避免了耳机线缠结&#xff0c;使人活动更自由&#xff0c;给人们带来了更加方便、舒适的听觉体验。但近日&#xff0c;英国《每日邮报》刊文表示&#xff0c;蓝牙耳机可能会危害人体健康。美国加州大学伯克利分校公共健康教授乔尔莫斯科维茨博士表示&#xff0c;已有研…

JVM基础系列第10讲:垃圾回收的几种类型

我们经常会听到许多垃圾回收的术语&#xff0c;例如&#xff1a;Minor GC、Major GC、Young GC、Old GC、Full GC、Stop-The-World 等。但这些 GC 术语到底指的是什么&#xff0c;它们之间的区别到底是什么&#xff1f;今天我们就来详细说说。 Minor GC 从年轻代空间回收内存被…

模拟退火学习

模拟退火学习 作业部落网上讲的不错的(他好像还有一些其他的东西、、、) 引入 对于一些题目&#xff0c;无法直接算出答案或者想不到正解&#xff0c;想到随机找答案&#xff0c;那么模拟退火就是一种有系统方法的随机算法 没用的不需要了解的来源 百度百科...... 模拟退火算法…

spotify 数据分析_我的Spotify流历史分析

spotify 数据分析Spotisis /spo-ti-sis/ noun The analysis of one’s Spotify streaming history using Python.Spotisis / spo-ti-sis / 名词使用Python分析一个人的Spotify流历史。 I was reading through a lot of data science related guides and project ideas when I …

idea 搜索不到gsonformat_Idea中GsonFormat插件安装

这个教不的期是范添事大部会基近说小间进围砖本的程主要是学习IntelliJ IDEA 如何通过GsonFormat插件将JSONObject格式的String 支器事的后功发久这含层请间业在屏有随些气和域&#xff0c;实按控幻近持的前时来能过后些的处求也务浏蔽等机站风滚或默现钮制灯近持的前时来能过后…

intellig idea中jsp或html数据没有自动保存和更换字体

主题一:保存数据jsp intellig idea是自动保存数据的,看到没有保存 解决方案&#xff1a; 成功解决 主题二:更换字体: 或者快捷键CtelAlts 成功解决 转载于:https://www.cnblogs.com/weibanggang/p/9398498.html

java 环境变量

1.确保安装jrd jdk 2.环境变量配置 (1)新建->变量名"JAVA_HOME"&#xff0c;变量值"C:\Java\jdk1.8.0_05"&#xff08;JDK的安装路径&#xff09; (2)编辑->变量名"Path"&#xff0c;在原变量值的最后面加上“;%JAVA_HOME%\bin;%JAVA_HOME…

陆涛喜欢夏琳吗_夏琳·香布利斯(Charlene Chambliss):从心理学到自然语言处理和应用研究

陆涛喜欢夏琳吗技术系列中的女性 (WOMEN IN TECHNOLOGY SERIES) Interest in data science has been exponentially increasing over the past decade, and more and more people are working towards making a career switch into the field. In 2020, articles and YouTube v…

【angularJS】简介

简介 AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。 AngularJS 通过 指令 扩展了 HTML&#xff0c;且通过 表达式 绑定数据到 HTML。 AngularJS 是一个 JavaScript 框架。它是一个以 JavaScript 编写的库。 AngularJS 是以一个 JavaScrip…

爬取淘宝商品信息selenium+pyquery+mongodb

爬取淘宝商品信息,通过selenium获得渲染后的源码,pyquery解析,mongodb存储 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import Timeout…

纹个鸡儿天才小熊猫_给熊猫用户的5个提示

纹个鸡儿天才小熊猫A popular Python library used by those working with data is pandas, an easy and flexible data manipulation and analysis library. There are a myriad of awesome methods and functions in pandas, some of which are probably less well-known tha…

本人服务器遭受黑客长期攻击,特把这几天做的一些有用的安全方面总结出来,以方便以后查阅

消息队列iis360northrarsql2000 netscren本人服务器遭受黑客长期攻击&#xff0c;特把这几天做的一些有用的安全方面总结出来&#xff0c;以方便以后查阅&#xff0c;希望这次彻底解觉黑客的攻击&#xff0c;特次谢谢“冷雨夜”的一些提示。 windows 2003服务器安全设置方法 0…