SQL2008根據日誌恢復

2022-02-14 13:23:08 字數 1490 閱讀 4407

網上收集的一篇文章,忘記是**的了.

做個記號.

--

建立測試資料庫

create

database

dbgo

--對資料庫進行備份

backup

database db to

disk='

c:\db.bak

'with

format

go--

建立測試表

create

table db.dbo.tb_test(id int)--

延時1秒鐘,再進行後面的操作(這是由於sql server的時間精度最大為百分之三秒,不延時的話,可能會導致還原到時間點的操作失敗)

waitfor delay '

00:00:01'go

--假設我們現在誤操作刪除了 db.dbo.tb_test 這個表

drop

table

db.dbo.tb_test

--儲存刪除表的時間

select dt=

getdate() into#go

--在刪除操作後,發現不應該刪除表 db.dbo.tb_test

--下面演示了如何恢復這個誤刪除的表 db.dbo.tb_test

--首先,備份事務日誌(使用事務日誌才能還原到指定的時間點)

backup

log db to

disk='

c:\db_log.bak

'with

format

go--

接下來,我們要先還原完全備份(還原日誌必須在還原完全備份的基礎上進行)

restore

database db from

disk='

c:\db.bak

'with

replace

,norecovery

go--

將事務日誌還原到刪除操作前(這裡的時間對應上面的刪除時間,並比刪除時間略早

declare

@dtdatetime

select

@dt=

dateadd(ms,-

20,dt) from#--

獲取比表被刪除的時間略早的時間

restore

log db from

disk='

c:\db_log.bak

'with recovery,stopat=

@dtgo

--查詢一下,看表是否恢復

select

*from

db.dbo.tb_test

/*--結果:

id-----------

(所影響的行數為 0 行)

--*/

--測試成功

go--

最後刪除我們做的測試環境

drop

database

dbdrop

table #

SQL 2008根據條件拆分列

在為人事局做報表過程中,遇到乙個棘手的問題,客戶要求把資料庫中的一列資料根據條件分成多列。比如 資料庫中有省份這麼一列資料 客戶要求根據省份分類,河北省一列 北京市一列 天津市一列,剩下的為其他,目標效果如下 手工編寫的sql語句version1.0版 select 河北 parsename pro...

sql2008定期清理映象日誌

create proc dbo cleantranlog as begin declare num tinyint 執行次數 declare backlogname varchar 100 備份日誌檔名稱 declare backlogpath varchar 100 備份日誌檔案的路徑 set n...

清空sql2008 日誌

alter database dnname set recovery 簡單模式 go右鍵 任務 收縮 檔案 確定 下來資料庫的日誌只保留了1m alter database dnname set recovery full 還原為完全模式 go優點 此清除日誌所執行消耗的時間短,90gb的日誌在分鐘...