欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQLServer數(shù)據(jù)庫誤操作恢復的方法

 更新時間:2023年01月30日 11:24:44   作者:鯉籽鯤  
本文主要介紹了SQLServer數(shù)據(jù)庫誤操作恢復的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

在日常開發(fā)工作中,有可能會存在數(shù)據(jù)庫的誤操作,比如不小心刪除了一個表或者刪除了一堆數(shù)據(jù),這個時候我們就需要將數(shù)據(jù)庫進行恢復,恢復到誤操作以前的狀態(tài),而這篇文章就是主要如何在誤操作之后,恢復數(shù)據(jù)庫的數(shù)據(jù)。

一、恢復數(shù)據(jù)實例

1.創(chuàng)建初始數(shù)據(jù)

use master
if exists (select * from sys.databases where name='test') 
drop database test;

create database test;

use test
create table UserInfo
(
id int,
name varchar(50),
nickname varchar(50),
);
go

insert into UserInfo values (1,'張三','小張');
insert into UserInfo values (2,'張三2','小張');
insert into UserInfo values (3,'李四','小李');
insert into UserInfo values (4,'王五','小王');
insert into UserInfo values (5,'趙六','小趙');

select * from UserInfo;

2.保證數(shù)據(jù)恢復的前提條件

前提1 - 數(shù)據(jù)庫創(chuàng)建時便已設置恢復模式為完整

對于任何環(huán)境下,新建數(shù)據(jù)庫后,我們都需要先檢查數(shù)據(jù)庫的恢復模式,確認數(shù)據(jù)庫的恢復模式是【完整恢復模式】,這是數(shù)據(jù)庫數(shù)據(jù)得以恢復的基礎。如果等到出問題,再想到這個就為時已晚了。
修改恢復模式如下圖所示:

選中數(shù)據(jù)庫,然后右鍵菜單=》選擇【屬性】=》屬性頁選擇【選項】=》恢復模式哪一項,選擇【完整】=》點擊【確定】

數(shù)據(jù)庫一般默認恢復模式就是【完整】恢復模式。

腳本檢查恢復模式:SELECT recovery_model,recovery_model_desc FROM sys.databases WHERE name ='test';

如果查詢結果如下,則表示數(shù)據(jù)恢復模式配置沒有問題。

前提2 - 至少做過一次完整的備份

數(shù)據(jù)庫數(shù)據(jù)恢復是需要基于數(shù)據(jù)的完整備份上進行的,如果沒有一次完整的數(shù)據(jù)備份,那么數(shù)據(jù)備份無從談起,所以,創(chuàng)建完一次數(shù)據(jù)庫后,需強制性做一次完整的備份。

數(shù)據(jù)完整備份操作如下圖所示:


選中數(shù)據(jù)庫=》右鍵菜單,選擇【任務】=》選擇【備份】=》備份類型,選擇【完整】=》確定

擴展內容:可以通過一下sql查詢所有的數(shù)據(jù)庫備份信息

SELECT database_name,recovery_model,name, backup_finish_date,type FROM msdb.dbo.backupset

如:本人剛才操作了兩次數(shù)據(jù)完整備份和一次事務日志備份,查詢結果如下,
type為D表示數(shù)據(jù)備份,L表示事務日志備份:

3.模擬不小心誤操作

再次強調:數(shù)據(jù)恢復的前提條件中修改備份模式以及強制做一次完整的數(shù)據(jù)和事務日志備份,是我們在出現(xiàn)問題之前必須做過的操作,否則就沒有什么恢復可言了。
現(xiàn)在我們模擬做一下誤操作:

--模擬誤操作 2022-11-23 14.25 開始的誤操作,記一下誤操作事件,以便后續(xù)演示數(shù)據(jù)恢復
--本意刪除張三2的,但是條件不當,將不該刪除的數(shù)據(jù)也刪除了
delete from UserInfo where nickname='小張';
insert into UserInfo values (110,'錯誤數(shù)據(jù)','小錯誤');

--不小心新建了一個表格
select * into UserInfo2 from UserInfo;

現(xiàn)在我們比對一下誤操作前后數(shù)據(jù)

4.開始恢復

出現(xiàn)誤操作之后,具體恢復步驟如下:

1、首先將數(shù)據(jù)庫限制為單個用戶訪問

出現(xiàn)誤操作后,我們需要切斷其他用戶對數(shù)據(jù)庫在進行操作產(chǎn)生數(shù)據(jù),造成更大的問題,因此需要先將數(shù)據(jù)庫限制為單個用戶訪問,與外界隔絕開。
具體操作如下:

當我們將限制訪問設置為【SINGLE_USER】后,我們會發(fā)現(xiàn) 數(shù)據(jù)庫后面會附加上【單個用戶】標志。

2、做一次事務日志備份(備份日志尾部)

  • 首先選擇數(shù)據(jù)庫,右鍵菜單,選擇【任務】=》選擇【備份】
  • 進入備份界面,
  • 在【常規(guī)】這一項設置中 ,將備份類型選擇【事務日志】
  • 在【介質選項】這一項設置中,按照下圖操作步驟進行勾選和操作
  • 最后點擊【確定】,此時我們會發(fā)現(xiàn)數(shù)據(jù)庫出現(xiàn)了【正在還原…】的標志
  • 具體操作步驟如下圖所示:

如果無法備份,則查詢一下誰在占用:

SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID('test')

然后使用kill 語句將占用者清除即可,如 kill 56,56代表占用者的spid
完成以上操作后,繼續(xù)進行備份。

3、還原完整數(shù)據(jù)備份

完成上述事務日志的備份后,我們就需要將數(shù)據(jù)進行還原。

  • 首先選擇數(shù)據(jù)庫,右鍵菜單=》選擇【任務】=》選擇【還原】=》選擇【文件和文件組】
  • 進入【還原文件和文件組】界面
  • 【常規(guī)】這一項中 在備份集列表中 選擇 文件類型為【行數(shù)據(jù)的】并且類型為【完整】,備份的完成時間距離誤操作最近的一次備份。
  • 【選項】這一項中 選擇【不對數(shù)據(jù)庫執(zhí)行任何操作,不回滾未提交的事務】這一項
  • 最后點擊【確定】即可
  • 具體操作如下圖所示:

4、還原事務日志備份

還原完完整數(shù)據(jù)備份后,我們需要還原事務日志,因為數(shù)據(jù)庫最終需要根據(jù)事務日志與完整備份的數(shù)據(jù)進行比對后進行數(shù)據(jù)的恢復操作。

  • 首先選擇數(shù)據(jù)庫,右鍵菜單=》選擇【任務】=》選擇【還原】=》選擇【事務日志】
  • 進入還原事務日志界面
  • 【常規(guī)】這一項設置中,選擇需要還原的事務日志備份(選擇誤操作后備份的那個事務日志)
  • 然后點擊時間點后面的按鈕,打開時間還原窗口,設置需要還原的時間點
  • 設置完還原的時間點后,在【選項】這一項設置中,設置恢復狀態(tài)為回滾未提供事務,使用數(shù)據(jù)庫處于可以使用的狀態(tài)
  • 最后點擊【確定】即可
  • 具體操作如下圖所示:

至此,數(shù)據(jù)已經(jīng)恢復成功。

5、最后恢復數(shù)據(jù)庫的限制訪問設置

將限制訪問,從【SINGLE_USER】修改為【MULTI_USER】即可

到此這個數(shù)據(jù)恢復的完整流程結束。

二、恢復數(shù)據(jù)原理

1.數(shù)據(jù)庫文件類型

數(shù)據(jù)庫中的文件類型:

類型作用
mdf (primary data file)主要數(shù)據(jù)文件,數(shù)據(jù)庫系統(tǒng)的可實時操作/讀取的數(shù)據(jù)文件,也可作為物理備份文件使用
ndf (secondary data files)次要數(shù)據(jù)文件
ldf (Log data files)事務日志文件,用于記錄數(shù)據(jù)庫的事務日志信息
bak數(shù)據(jù)庫備份文件
  • 以上有mdf,ndf,ldf 以及bak 四種文件類型,其中一般我們創(chuàng)建的數(shù)據(jù)庫都會包含mdf 和ldf 兩個文件,不需要手動創(chuàng)建,這兩個是一套數(shù)據(jù),可以通過分離的方式拷貝出來作為備份,還原的時候通過數(shù)據(jù)庫的“附加”功能即可還原。
  • bak自成一套,bak文件是通過使用數(shù)據(jù)庫的“備份”功能而備份出來的文件,里面包含了數(shù)據(jù)和日志文件,并且備份時做了壓縮,所以同一個數(shù)據(jù)庫的bak文件比在運行的mdf數(shù)據(jù)文件+ldf日志文件要小。

2.使用bak恢復數(shù)據(jù)原理

首先我們要了解 事務日志中,記錄了數(shù)據(jù)庫自創(chuàng)建之初數(shù)據(jù)庫所有的操作日志。

例如:

  • 2022-10-10 創(chuàng)建了數(shù)據(jù)庫,此時我們第一次做了完整備份bak(包含數(shù)據(jù)+日志)
  • 2022-10-11 我們又做了一次完整備份bak(包含數(shù)據(jù)+日志)
  • 2022-10-12
  • 12:00 做了誤操作,此時還不知曉,
  • 12:05 我們發(fā)現(xiàn)自己誤操作了,馬上設置訪問權限,進行事務日志備份(這很關鍵),此時我們就有了2022-10-11所有的完整數(shù)據(jù),以及到2022-10-12 12:05所有的事務日志。那么我們就可以根據(jù)2022-10-11的完整數(shù)據(jù)以及2022-10-12 12:05 的事務日志去反推12:00的數(shù)據(jù)。因此我們需要做的第一個操作先還原2022-10-11的完整數(shù)據(jù)備份,然后還原2022-10-12 12:05事務日志備份,并且設置還原的時間點。最后數(shù)據(jù)庫系統(tǒng)會根據(jù)完整數(shù)據(jù)以及事務日志備份和設置的還原時間點去恢復數(shù)據(jù)。

總結

到此這篇關于SQLServer數(shù)據(jù)庫誤操作恢復的方法的文章就介紹到這了,更多相關SQLServer數(shù)據(jù)庫恢復內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

參考

SQLServer 2008以上誤操作數(shù)據(jù)庫恢復方法——日志尾部備份
數(shù)據(jù)庫誤操作恢復實現(xiàn)原理

相關文章

  • Sql Server使用cursor處理重復數(shù)據(jù)過程詳解

    Sql Server使用cursor處理重復數(shù)據(jù)過程詳解

    本節(jié)主要介紹了Sql Server cursor的使用,以處理重復數(shù)據(jù)為例,需要的朋友可以參考下
    2014-08-08
  • SQL server服務顯示遠程過程調用失敗的解決方法

    SQL server服務顯示遠程過程調用失敗的解決方法

    這篇文章主要為大家介紹了SQL server服務顯示遠程過程調用失敗的解決方法,還為大家提供了解決SQL SERVER 2008 R2配置管理器出現(xiàn)“遠程過程調用失敗”(0x800706be)錯誤提示的方案,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MSSQL內外連接(INNER JOIN)語句詳解

    MSSQL內外連接(INNER JOIN)語句詳解

    這幾天重新溫習了一下SQL的書本,現(xiàn)在的思路應該是很清楚了,現(xiàn)在把自己的理解發(fā)出來給大家溫習下。希望和我一樣對SQL的連接語句不太理解的朋友能夠有所幫助
    2006-11-11
  • 用sql語句實現(xiàn)分離和附加數(shù)據(jù)庫的方法

    用sql語句實現(xiàn)分離和附加數(shù)據(jù)庫的方法

    對于分離一個數(shù)據(jù)庫來說,我們可以用Manage Studio界面或者存儲過程。但是對于每一種方法都必須保證沒有用戶使用這個數(shù)據(jù)庫.接下來所講的都是對于用命令來分離或附加一個數(shù)據(jù)庫。
    2010-03-03
  • Linux下安裝SQLServer2019的方法

    Linux下安裝SQLServer2019的方法

    這篇文章主要介紹了Linux下安裝SQLServer2019的方法,本文通過命令介紹及圖文解析給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Windows2012配置SQLServer2014AlwaysOn的圖解

    Windows2012配置SQLServer2014AlwaysOn的圖解

    SQLserver 2014 AlwaysOn增強了原有的數(shù)據(jù)庫鏡像功能,使得先前的單一數(shù)據(jù)庫故障轉移變成以組(多個數(shù)據(jù))為單位的故障轉移。接下來通過本文給大家介紹Windows2012配置SQLServer2014AlwaysOn的方法,感興趣的朋友一起學習吧
    2016-04-04
  • sql server代理中作業(yè)執(zhí)行SSIS包失敗的解決辦法

    sql server代理中作業(yè)執(zhí)行SSIS包失敗的解決辦法

    這篇文章主要介紹了sql server代理中作業(yè)執(zhí)行SSIS包失敗的解決辦法,sql2005如何用dtexec運行ssis(DTS)包?本文講的非常詳細,小伙伴們一起學習吧
    2015-09-09
  • SQL Server:觸發(fā)器實例詳解

    SQL Server:觸發(fā)器實例詳解

    觸發(fā)器是一種特殊的存儲過程,它不能被顯式地調用,而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地激活。本篇文章講訴了SQL Server:觸發(fā)器實例,有興趣的可以了解一下。
    2016-12-12
  • SQL2000 全文索引完全圖解

    SQL2000 全文索引完全圖解

    全文索引是解決海量數(shù)據(jù)模糊查詢的較好解決辦法。
    2010-03-03
  • SQL Server的Descending Indexes降序索引實例展示

    SQL Server的Descending Indexes降序索引實例展示

    在涉及多字段排序的復雜查詢中,合理使用降序索引可以顯著提升SQLServer的查詢效率,本文通過構建實際的查詢案例,展示了如何在SQLServer中建立并利用降序索引優(yōu)化查詢性能,感興趣的朋友一起看看吧
    2024-09-09

最新評論