国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Backup--還原選項之STANDBY

2024-07-21 02:50:22
字體:
來源:轉載
供稿:網友
Backup--還原選項之STANDBY

很多DBA對還原時制定RECOVERY 與 NORECOVERY選項都很熟悉,但是對于STANDBY就有點茫然了,今天一起來學習下吧。

--===================================================================

MSDN如下說:

STANDBY =standby_file_name指定一個允許撤消恢復效果的備用文件。備用文件用于為 RESTORE WITH STANDBY 的撤消過程中修改的頁面保留一個“寫入時副本”預映像。備用文件允許用戶在事務日志還原期間以只讀方式訪問數據庫,并允許數據庫用于備用服務器情形,或用于需要在日志還原操作之間檢查數據庫的特殊恢復情形。執行完 RESTORE WITH STANDBY 操作之后,下一個 RESTORE 操作會自動刪除撤消文件。如果在下一個 RESTORE 操作之前手動刪除了這個備用文件,則必須重新還原整個數據庫。當數據庫處于 STANDBY 狀態時,您應將這個備用文件視為和任何其他數據庫文件同樣重要。該文件與其他數據庫文件不同,數據庫引擎僅在活動還原操作過程中持續打開該文件。給定備用文件的大小要求取決于由還原操作過程中未提交的事務所導致的撤消操作數。

鏈接地址:http://msdn.microsoft.com/zh-cn/library/ms178615(v=sql.105).aspx

--===================================================================

按我的理解來講:就是在還原時,將未提交的事務寫入到一個“備用文件”中,然后回滾未提交事務,保證數據一致性,將數據庫設置為“備用/只讀”狀態,使用戶可以訪問數據庫,并能在后續繼續使用日志備份來還原數據庫。

日志傳送中備用節點可讀便是使用這種方式

--==================================================================

讓我們實驗學習一下

--=============================--創建數據庫CREATE DATABASE TestDB3GOUSE TestDB3GO--=============================--創建測試表SELECT * INTO TB01 FROM sys.all_columnsWHERE 1<>1GO--==============================--創建完整備份BACKUP DATABASE TestDB3 TO DISK ='D:/TestDB3_F1.BAK'--==============================--向測試表中插入100條數據并提交事務INSERT INTO TB01SELECT TOP(100) * FROM sys.all_columns--================================--新開向測試表插入1000條數據,暫時不提交BEGIN TRAN DECLARE @ID INT SET @ID=10WHILE(@ID>0)BEGININSERT INTO TB01SELECT TOP(100) * FROM sys.all_columnsSET @ID=@ID-1END

我們再開啟一個回話,做第一次日志備份

--===========================================--第一次日志備份,包含一個100條插入的已提交事務--和一個1000條插入的未提交事務BACKUP LOG TestDB3 TO DISK ='D:/TestDB3_L1.BAK'

然后回到第一個回話,提交事務并做第二日志備份

--===========================================--提交事務并做第二次日志備份,包含一個100條插入--的已提交事務和一個1000條插入的已提交事務BACKUP LOG TestDB3 TO DISK ='D:/TestDB3_L2.BAK'

此時我們有一個完整備份和兩個日志備份,讓我們來還原數據庫

--========================================================--使用完整備份來還原數據庫[TestDB4],并指定NORECOVERY來使得--數據庫處于"正在還原"狀態RESTORE DATABASE [TestDB4] FROM  DISK = N'D:/TestDB3_F1.BAK' WITH  FILE = 1,  MOVE N'TestDB3' TO N'D:/DB/TestDB4.mdf',  MOVE N'TestDB3_log' TO N'D:/DB/TestDB4_1.LDF',  NORECOVERY,  NOUNLOAD,  STATS = 10GO--======================================================--使用日志備份來還原,使用STANDBY選項來使得數據庫處于"備用/只讀"RESTORE LOG [TestDB4] FROM  DISK = N'D:/TestDB3_L1.BAK' WITH  STANDBY = N'D:/ROLLBACK_UNDO_TestDB4.BAK',  NOUNLOAD,  STATS = 10

此時數據庫可以訪問,查詢表會發現表中有100條數據,恰好是第一個提交事務的數據,第二個未提交事務插入的1000條數據無法查詢到。再來查看STANDBY指定的文件

繼續還原日志

--===============================================--繼續還原日志備份BACKUP LOG TestDB3 TO DISK ='D:/TestDB3_L1.BAK'

會發現可以正常還原!

我們重做上面還原步驟,但在最后一次還原日志之前,把STANDBY指定的文件刪除掉,會有以下錯誤提示:

消息 3441,級別 17,狀態 1,第 3 行在啟動備用數據庫 'TestDB4' (數據庫 ID 為 10)的過程中,RESTORE 語句無法訪問它的備用文件('D:/ROLLBACK_UNDO_TestDB4.BAK')。操作系統錯誤為 '2(系統找不到指定的文件。)'。診斷該操作系統錯誤,并更正此問題,然后重試啟動操作。

PS:在生產環境,不要輕易刪除STANDBY指定的文件哦,要不你就“哭吧哭吧不是罪啦”

--============================================================================================

讓我們繼續試驗

對于“備用/只讀”的數據庫,我們使用使用RESTORE方式來將其修改為“正在還原”狀態

--=========================================--使用 RESTORE 來將數據庫重置為"正在還原狀態"RESTORE DATABASE TestDB4 WITH NORECOVERY

而且還可以繼續使用后續日志備份來還原,證明上面語句使用STANDBY指定的文件來還原了數據庫。

PS:當數據庫被還原到“正在還原”狀態后,STANDBY指定的文件會被默認刪除掉哦。

既然“備用/只讀”狀態可以利用還原來轉變成“正在還原”狀態,那么“正在還原”狀態是不是也可以使用還原來轉變成“備用/只讀”呢?答案是肯定滴

--============================================--使用RESTORE 來將數據庫從"正在還原"狀態轉變成"備用/只讀"狀態RESTORE DATABASE TestDB4 WITH  STANDBY = N'D:/ROLLBACK_UNDO_TestDB4.BAK'

--============================================================================================

打完收工,妹子鎮貼

PS: 誰有奶茶妹高清大圖,給小弟我傳一份,我放到下個貼中。。

下班灰家,諸位周末快樂


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍溪县| 景宁| 双鸭山市| 法库县| 盐边县| 防城港市| 镇江市| 贵州省| 务川| 资中县| 光山县| 大关县| 高密市| 平陆县| 宁河县| 江口县| 舟山市| 广德县| 古浪县| 婺源县| 墨玉县| 务川| 嵊泗县| 永修县| 平利县| 安远县| 南召县| 孟州市| 湖北省| 蓬莱市| 富蕴县| 连平县| 上林县| 新宾| 三穗县| 苏尼特左旗| 永吉县| 屏南县| 册亨县| 泸定县| 博客|