1. 程式人生 > >SQL事務日誌還原例項

SQL事務日誌還原例項

USE master
GO-- 建立測試資料庫CREATEDATABASE db_test GO-- 對資料庫進行備份BACKUPDATABASE db_test
TODISK='c:/db_test.bak'WITH FORMAT
GO-- 建立測試表CREATETABLE 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--首先,備份事務日誌(使用事務日誌才能還原到指定的時間點)BACKUPLOG db_test
TODISK='c:/db_test_log.bak'WITH FORMAT
GO-- 獲取可嘗試的時間範圍IFOBJECT_ID(N'tempdb..#') ISNOTNULLDROPTABLE #
CREATETABLE #(
    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
uniqueidentifierNULL
)
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_datedatetime,
   
@stop_datedatetime,
   
@try_step_millsecondint,
   
@msgnvarchar(1000)
SELECT@start_date=MIN(BackupFinishDate),  -- 嘗試查詢誤刪除資料的開始時間@stop_date=MAX(BackupFinishDate),   -- 嘗試查詢誤刪除資料的結束時間@try_step_millsecond=500-- 每 500 毫秒為一個時間點找一次資料FROM #

-- 還原完全備份RESTOREDATABASE db_test
FROMDISK='c:/db_test.bak'WITHREPLACE,
    NORECOVERY

-- 還原日誌備份到各點,以尋找出所需資料WHILE@start_date<@stop_dateBEGINSELECT@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 使資料庫能只讀訪問RESTORELOG db_test
       
FROMDISK='c:/db_test_log.bak'WITH STOPAT =@start_date,
            STANDBY
='c:/db_test_redo.bak'-- 檢查需要的資料是否存在IFOBJECT_ID(N'db_test.dbo.tb_test') ISNOTNULLBEGIN-- 顯示還原的時間點SELECT Restoreto =@start_date-- 完成資料庫還原,使資料庫可讀寫RESTORELOG db_test
           
WITH RECOVERY

           
SELECT@start_date=@stop_dateENDEND TRY
   
BEGIN CATCH
   
END CATCH
ENDGO--最後刪除測試環境DROPDATABASE db_test
DROPTABLE #

相關推薦

SQL事務日誌還原例項

USE masterGO-- 建立測試資料庫CREATEDATABASE db_test GO-- 對資料庫進行備份BACKUPDATABASE db_testTODISK='c:/db_test.bak'WITH FORMATGO-- 建立測試表CREATETABLE db

SQL Server 2008/2012 完整資料庫備份+差異備份+事務日誌備份 資料庫完整還原(一)

還原方案 資料庫級(資料庫完整還原) 還原和恢復整個資料庫。資料庫在還原和恢復操作期間會處於離線狀態。SQL SERVER不允許使用者備份或還原單個表。還原方案是指從一個或多個備份中還原資料、繼而恢復資料庫的過程。 不同恢復模式所支援的各種還原方案 簡單恢復

SQL Server 備份和還原全攻略, 完全備份,差異備份,增量備份,事務日誌備份

2011-06-29 17:03 by 聽風吹雨, 3435 閱讀, 17 評論, 收藏, 編輯 一、知識點 完全備份: 備份全部選中的資料夾,並不依賴檔案的存檔屬性來確定備份那些檔案。(

(2.7)備份與還原--在完全恢復模式下事務日誌的角色

ges 需要 很多 對數 for 事情 mage .com .html 簡介 生產環境下的數據是如果可以寫在資產負債表上的話,我想這個資產所占的數額一定不會小。而墨菲定律(事情如果有變壞的可能,無論這種可能性有多小,它總會發生)仿佛是給DBA量身定做的。在上篇文章介

(2.6)備份與還原--在簡單恢復模式下事務日誌的角色

除了 空間 ble 暫時 cover recovery html AC truncated 簡介 在簡單恢復模式下,日誌文件的作用僅僅是保證了SQL Server事務的ACID屬性。並不承擔具體的恢復數據的角色。正如”簡單”這個詞的字面意思一樣,數據的備份和恢復僅僅

(2.8)備份與還原--在大容量恢復模式下事務日誌的角色

數據一致性 過程 使用 非正常關閉 cnblogs 地方 重建 結構 恢復 簡介 日誌的作用是保證持久性和數據一致性,通過日誌可以實現數據的Undo與Redo,因此通過日誌,SQL Server不僅僅可以實現災難恢復,還可以通過日誌的Redo來實現高可用性。本篇文章

(2.17)備份與還原--事務日誌不能截斷的原因與收縮日誌文件

查點 數據庫引擎 重復 int .data ase 日誌截斷 soft 時間 一、日誌截斷的目的  日誌截斷後,數據庫引擎將MinLSN之前的虛擬日誌文件(VLF)標記為“可復用”。“可復用”的VLF可以成為日誌回繞後重復利用的空間,也可以在收縮日誌文件時釋放其占用的磁盤空

SQL Server中事務日誌已滿的原因以及解決辦法

錯誤描述:資料庫的事務日誌已滿。若要查明無法重用日誌中的空間的原因 ,請參閱sys.databases 中的 log_reuse_wait_desc 列 。   首先引入一下事務日誌的概念(來自百度百科):   事務日誌是一個與資料庫檔案分開的檔案

SQL Server中事務日誌管理的階梯,級別5:以完全恢復模式管理日誌

value letter 的確 維護計劃 臨時 行數 dbo call des 該系列本文是Stairway系列的一部分:SQL Server中事務日誌管理的階梯 當事情進展順利時,沒有必要特別註意事務日誌的功能或工作方式。您只需要確信每個數據庫都有正確的備份機制。當出現問

SQL Server事務日誌管理的進階,第5級:在完全恢復模式下管理日誌

SQL Server事務日誌管理的進階,第5級:在完全恢復模式下管理日誌   原文連結:http://www.sqlservercentral.com/articles/Stairway+Series/73785/   託尼·戴維斯(Tony Davis)著,2012年1月27日

sql伺服器第5級事務日誌管理的階梯:完全恢復模式下的日誌管理

sql伺服器第5級事務日誌管理的階梯:完全恢復模式下的日誌管理 原文連結http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 作者 Tony Davis, 2012/01/27   系列 本文是階

SQL Server中事務日誌管理的步驟,第5級:完全恢復模式管理日誌(譯)

維護計劃 recover 最小 替代 關心 每日 工作方式 檢查 耗時 SQL Server中事務日誌管理的步驟,第5級:完全恢復模式管理日誌 作者:Tony Davis,2012/01/27 系列 本文是進階系列的一部分:SQL Server中事務日誌管理的步驟 當事情進

SQL Server中事務日誌管理的步驟,第5級:完全恢復模式管理日誌

語句 targe .aspx 頻率 良好的 popu 這樣的 模式 insert SQL Server中事務日誌管理的步驟,第5級:完全恢復模式管理日誌 作者:Tony Davis,2012/01/27 系列 本文是進階系列的一部分:SQL Server中事務日誌管理的

翻譯《Stairway to SQL Server Replication: Level 5- Managing the Log in Full Recovery Mode》 SQL Server事務日誌管理的進階,第5級:在完全恢復模式下管理日誌

SQL Server事務日誌管理的進階,第5級:在完全恢復模式下管理日誌 SQL Server事務日誌管理的進階,第5級:在完全恢復模式下管理日誌 作者:託尼·戴維斯(Tony Davis) 時間:2012年1月27日  原文連結:http://www.sqlser

第五次翻譯:SQL Server事務日誌管理的進階,第5級:在完全恢復模式下管理日誌

 SQL Server中事務日誌管理的階梯,第5級:在完全恢復模式下管理日誌 作者:Tony Davis,2012/01/27 文章轉載自:http://www.sqlservercentral.com/articles/Stairway+Series/73785/   該系列

翻譯:SQL Server中事務日誌管理的階梯,級別5:以完全恢復模式管理日誌

作者:Tony Davis, 2012/01/27 該系列 本文是Stairway系列的一部分:SQL Server中事務日誌管理的階梯 當事情進展順利時,沒有必要特別注意事務日誌的功能或工作方式。您只需要確信每個資料庫都有正確的備份機制。當出現問題時,瞭解事務日誌對於採取糾正措施非常重要,尤

翻譯之:SQL Server中事務日誌管理的階梯,級別5:以完全恢復模式管理日誌

資料庫中事務日誌管理的階梯,級別5:以完全恢復模式管理日誌 原文連結:http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 作者:Tony Davis, 2012/01/27 本文是樓梯系列的一部分:SQL Server

翻譯:Stairway to Transaction Log Management in SQL Server, Level 5: Managing the Log in Full Recovery Mode SQL Server中事務日誌管理的階梯,級別5:以完全恢復模式管理日誌

轉載自:Stairway to Transaction Log Management in SQL Server, Level 5: Managing the Log in Full Recovery Mode SQL Server,By Tony Davis,文章來源:http://www.sqlserve

SQL SERVER 事務日誌已滿 處理辦法

一大早使用者就報,SQL SERVER日誌滿了。 執行語句參考: ALTER DATABASE CARDB SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER

SQL Server 2008 R2中 某XX資料庫 的事務日誌已滿 請參閱 sys.databases 中的 log_reuse_wait_desc 列

            碰到此類問題首先想到的就是日誌空間問題以及磁碟問題,具體排查總結如下: 第一: 排查當前資料庫日誌檔案增長方式,確認是否做了相應的限制; 第二:檢查資料庫當前恢復模式 (完全、簡單、大容量日誌); 第三:排查當前資料庫日誌檔案所儲存 的磁碟空間