1. 程式人生 > >SQL Server 資料庫備份還原和資料恢復

SQL Server 資料庫備份還原和資料恢復

認識資料庫備份和事務日誌備份

資料庫備份與日誌備份是資料庫維護的日常工作,備份的目的是在於當資料庫出現故障或者遭到破壞時可以根據備份的資料庫及事務日誌檔案還原到最近的時間點將損失降到最低點。

資料庫備份

資料庫備份可以手動備份和語句備份

一.手動備份資料庫

1.滑鼠右鍵選擇你要進行備份的資料庫-任務-備份

可以在常規選項頁面你可以選擇備份型別是進行完整資料庫備份還是差異資料庫備份

2.點選新增選項,選擇資料庫檔案的存放路徑

注意檔名記得加字尾.bak,便於恢復時的查詢

3.你還可以在選項頁面是追加到現有的備份集,還是覆蓋所有的現有備份集,還可以選擇備份驗證完整性(建議選擇),還可以選擇是否壓縮備份等。

二.語句備份資料庫

use master 
go
BACKUP DATABASE [test] TO  DISK = N'D:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\test.bak' WITH NOFORMAT, NOINIT,  NAME = N'test-完整 資料庫 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

資料庫日誌備份

      首先需要注意,資料庫日誌的備份是基於資料庫完整備份,也就是說你備份資料庫日誌之前你首先要先對資料庫進行一次完整的備份,因為之間會涉及到堅持到檢查點lsn

這也是本文接下來要講的重點。

一.手動備份資料庫日誌

1.右鍵資料庫-任務-備份-選擇備份型別(事務日誌)

2.點新增,新增日誌檔案備份儲存路徑

3.同資料庫完整備份一樣,你也可以選擇覆蓋現有備份集或者追加到現有備份集,這裡現在覆蓋現有備份集、驗證完整性,然後確認備份

二.語句備份資料庫事務日誌

BACKUP LOG [test] TO  DISK = N'D:\test.trn' WITH NOFORMAT, INIT,  NAME = N'test-事務日誌  備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

資料庫還原

右鍵資料庫-還原資料庫-新增需要進行還原的資料庫檔案路徑

在還原源選項中你可以選擇‘源資料庫’,‘源裝置’。1.選擇源資料庫工具會自動顯示該資料庫之前的一些備份,然後直接選擇需要還原的資料庫備份集。

2.選擇源裝置點選後面的...,新增需要還原的資料庫檔案

2.點選確認還原資料庫

資料庫恢復

資料庫恢復的前提是1.一個完整的資料庫備份2.包含這個完整資料庫備份的事務日誌備份3.完整備份之間也可以存在數個差異備份

對於資料庫維護空間始終是一個比較頭疼的問題,特別是對於大型資料庫而言,每天的日誌檔案增長是龐大的,很多資料庫管理員會定時對資料庫日誌檔案進行收縮,但是經常收縮會存在收縮完日誌檔案還是不能減少,這是因為存在很多活動的日誌無法收縮可以用

DBCC LOGINFO('
資料庫名稱
')   
 
我們看到
status=0
的日誌,代表已經備份到磁碟的日誌檔案;而
status=2
的日誌還沒有備份。當我們收縮日誌檔案時,收縮掉的空
間其實就是
status=0
的空間,如果日誌物理檔案無法減小,這裡一
定能看到非常多
status=2
的記錄

 解決辦法:1.可以分離要收縮的資料庫,然後手動刪除日誌檔案,然後附加資料庫,資料庫就會產生一個很小的日誌檔案(不推薦使用這種方法)

2.右鍵要出來的資料庫選擇“屬性”-"選項",將恢復模式改成"簡單",然後利用收縮工具可以講日誌檔案收縮到很小,收縮完記得講恢復模式改成"完整"

也可以用語句進行處理(dbname是你要進行收縮的資料庫名,dbname_log是你要進行收縮的資料庫的邏輯日誌名稱)

USE [master]
    GO
    ALTER DATABASE [dbname] SET RECOVERY SIMPLE WITH NO_WAIT
    GO
    ALTER DATABASE [dbname] SET RECOVERY SIMPLE   --簡單模式
    GO
    USE [dbname]
    GO
    DBCC SHRINKFILE (N'dbname_log' , 11, TRUNCATEONLY)
    GO
    USE [master]
    GO
    ALTER DATABASE [dbname] SET RECOVERY FULL WITH NO_WAIT
    ALTER DATABASE [dbname] SET RECOVERY FULL

對於第一種方法不贊同使用,首先對於資料庫的分離與附加有時候會破壞資料庫,造成資料庫無法還原,還有就是對於線上資料庫也不允許進行分離操作。

對於第二種方法是slq2008收縮日誌檔案的一種方法,但是此方法也不能使用過於頻繁,因為進行資料庫恢復模式的更改會截斷事務日誌檔案,這樣的話當時利用事務日誌檔案進行恢復的時候檢查點不能包含資料庫檔案,而且當你要對事務日誌進行備份的時候會重新提示你需要對資料庫進行完整備份。

舉個例子:比如你昨天晚上進行了一次完整備份,然後同時你也進行了一次日誌備份,然後你每個小時進行過一次差異備份,最近的差異備份時間點是14點,如果此時資料庫錯誤修改了資料,你可以立馬備份一個日誌檔案將資料庫恢復到日誌備份開始到日誌備份終點前的任意時間點 。

如果此時你進行了修改資料庫模式,截斷日誌進行了收縮,那麼你的資料只能恢復到昨天晚上備份的那個日誌備份時間前的任意時間點,也就是今天所做的資料庫更改無法再恢復了,因為日誌檔案已經被截斷了.

因為日誌檔案的檢查點(lsn)是連續的,每一次日誌備份都是在上一次備份的基礎上lsn往後增加的,lsn的範圍也包括了資料庫檔案的lsn,也只有日誌檔案的lsn包括了資料庫檔案的lsn,才能將資料庫檔案進行回滾。

總結

備份還原看似簡單,而且現在的圖形化的工具更加讓人對備份還原的理解不夠深入,特別的日誌備份如果你不仔細研究一下會存在很多誤區。

1.完整備份和差異備份的BAK中也會備份日誌檔案,在備份的時候生成檢查點但是該檢查點只是標識(好比將日誌檔案進行歸檔,當我們查詢fn_dblog的時候發現日誌少了,但實際上日誌檔案還是存在的,當你這時候備份日誌的時候你依然會備份到那部分歸檔掉的日誌,但是備份日誌的時候生成檢查點checkpoin就會將日誌進行截斷,將不活動的那部分日誌清空)作用並不截斷日誌。

2.當日志進行第一次備份的時候是自最近一次完整備份之後的日誌進行備份,當下次再進行日誌備份(前提日誌未被截斷)的時候是備份上一次日誌備份的last_lsn之後到當前備份之間的日誌記錄,不管中間是否存在完整或者差異備份都不會減少日誌的量,不要誤理解為當上一次備份日誌之後中間存在完整備份然後再備份日誌備份的日誌記錄就是完整備份之後的記錄。

3.第一次的日誌備份的first_lsn一定是和日誌備份之前的完整備份的first_lsn相同,如果備份集最後一次備份是日誌備份那麼最後一次日誌備份的last_lsn一定包含自第一次完整備份以來所有的完整好差異備份的last_lsn。所有可以通過第一次完整備份和第一個日誌備份和最後一個日誌備份(中間沒有日誌備份)還原資料庫到第一次完整備份之後的任何一個時間點,無論中間是否存在完整差異備份。

4.為什麼備份集之間需要完整或者差異備份,如果沒有完整或者差異備份如果自第一次備份以來很長時間沒有進行完整或者差異備份那麼當進行故障還原的時候需要耗費很長的時間,當中間如果存在差異備份的時候那麼還原日誌的時間將大大減少,不需要在執行完整到差異這部分的redo/undo。

5.由於SQLSERVER是日誌先寫的機制,所以當資料庫出現故障也是資料出現了故障一般都是進行了寫日誌操作但是在寫資料的時候出現了什麼問題,所以當進行日誌的還原操作的時候會進行這些檢查,保證事務的一致性這也是為什麼DBCC CHECKDB檢查資料庫錯誤一般還原是最好的方法,當你將日誌進行還原的時候所有的日誌備份的操作都會重新進行操作一次。

6.差異備份的原理,差異備份與日誌備份不一樣,日誌備份是每次的備份都是自上一次備份以來的增量,差異備份是自上一次完整備份以來的增量,所以無論中間有多少次差異備份,都只需要還原完整備份與最後一次差異備份即可。

select name,first_lsn,last_lsn,checkpoint_lsn,database_backup_lsn,backup_start_date ,backup_finish_date 
 from msdb..backupset where database_name=N'InsideTSQL2008' 
 
SELECT * FROM [sys].[fn_dblog](NULL,NULL) 

SELECT  *
FROM    fn_dump_dblog(NULL, NULL, N'DISK', 1,N'd:\InsideTSQL2008.bak', DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT)

備註:

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。

《歡迎交流討論》

相關推薦

SQL Server 資料庫備份還原資料恢復

認識資料庫備份和事務日誌備份 資料庫備份與日誌備份是資料庫維護的日常工作,備份的目的是在於當資料庫出現故障或者遭到破壞時可以根據備份的資料庫及事務日誌檔案還原到最近的時間點將損失降到最低點。 資料庫備份 資料庫備份可以手動備份和語句備份 一.手動備份資料庫 1.滑鼠右鍵選擇你要進行備份的資料

SQL Server資料庫備份還原時,提示“資料庫正在使用”的解決辦法

問題描述:          SQL Server資料庫備份還原後,在資料庫名稱後會出現“受限制訪問”字樣 解決辦法:          右鍵點選資料庫

sql server資料庫備份還原後,出現“物件名無效”問題解決辦法

今天真的碰到了這個盲點問題,按照此部落格順利解決了. 留檔並轉載: 問題描述: 在把遠端伺服器上的資料庫備份還原到本地機後, 給一個"登入"關聯一個"使用者"時(使用者對映),發生錯誤: “錯誤15023:當前資料庫中已存在使用者或角色” 問題分析:在遷移測試平臺數據庫

SQL Server資料庫備份恢復措施

 一、備份資料庫 1、開啟SQL企業管理器,在控制檯根目錄中依次點開Microsoft SQL Server 2、SQL Server組-->雙擊開啟你的伺服器-->雙擊開啟資料庫目錄 3、選擇你的資料庫名稱(如論壇資料庫Forum)-->然後點上面選單中的工具-->選擇備份資料庫

SQL Server資料庫備份檔案還原到不同的資料庫xjh測試可以-https://www.yigujin.cn/1269.html

SQL Server 2005 備份檔案還原到新資料庫 2017年07月10日 17:41:49  閱讀 267 次 評論 2 條   上次的『刪除SQLServer2005歷史資料之工作小結』一文中說到由於特殊原因需要刪除某系統的歷史資料,在刪除

ms SQL server資料庫備份、壓縮與SQL資料庫資料處理的方法

ms SQL server資料庫備份、壓縮與SQL資料庫資料處理的方法 一、備份資料庫 1、開啟SQL企業管理器,在控制檯根目錄中依次點開Microsoft SQL Server 2、SQL Server組-->雙擊開啟你的伺服器-->雙擊開啟資料庫目錄 3、選擇你的資料庫名稱(如論

Sql Server資料庫使用觸發器sqlbulkcopy大批量資料插入更新

需要了解的知識 1.觸發器 2.sqlbulkcopy 我的用途 開發資料庫同步的工具,需要大批量資料插入和資料更新。 方式 使用SqlBulkCopy類對資料進行資料批量複製,將需要同步資料的表新建一個結構相同的臨時表。然後在臨時表編寫觸發器用於對更新資料的表進行資料插入

SQL Server查詢備份日期備份設備名

text nis rom water process http .com mar 設備名 查詢備份日期和備份設備名,用於檢查某日的備份是否執行。SELECT b.backup_finish_date,a.physical_device_name FROM dbo.backu

SQL Server資料庫————模糊查詢聚合函式

***********模糊查詢*********/ 關鍵字: like (!!!!字串型別) in (,,)  匹配()內的某個具體值(括號裡可以寫多個值) between... and.. 在某兩個值的區間範圍中(前後都包括,小的寫前面,大的寫後面)   *****

用Java向SQL Server資料庫中插入float資料報錯An error occurred while converting the Float value to JDBC data type

作者:翁鬆秀 用Java向SQL Server資料庫中插入float資料報錯 用Java向SQL Server資料庫中插入float資料報錯

SQL server 資料庫匯出表裡所有資料成insert 語句

        將SQL server資料庫中的某張表裡的所有資料匯入到另外一個數據庫或另外一臺計算機上的資料庫,有這樣的一種方法: 下面我以sql server 2008 R2,資料庫是[test]資料庫為例。 目標:把[test]資料庫的 Test_T

SQL SERVER資料庫備份時出現“作業系統錯誤5(拒絕訪問)。”錯誤的解決辦法

一般備份檔案選擇的目錄為磁碟根目錄或備份所選分割槽未授予sqlserver使用者讀寫許可權時會出現此錯誤。 解決辦法就是給sqlserver使用者授予許可權:    選擇要備份的資料夾 ,右鍵-->屬性-->安全-->看下"組或使用者"是否包涵Aut

MongoDB 資料備份 mongodump 資料恢復mongorestore

1、mongodump概述 MongoDB的所有資料都在/data/db/目錄下,備份資料庫就是建立資料目錄下所有檔案的副本。mongodump可以做資料庫級別和表級別的備份。 2、mongodump示例 此時會在當前資料夾下生產一個名為“dump”的資料夾。 如果直接使

SQL SERVER 資料庫備份

--備份資料庫指令碼 DECLARE @name VARCHAR(250) SET @name = 'E:\LSWEB\LSJQCSClientUpdate\DB_Backup\LSJQWG_' +

Sql Server資料庫備份大全(Sql語句)

 首先簡單的介紹一下Sql server 備份的型別有: 1:完整備份(所有的資料檔案和部分的事務日誌檔案) 2:差異備份(最後一次完成備份後資料庫改變的部分) 3:檔案和檔案組備份(對指定的檔案和檔案組備份) 4:事物日誌備份(所有資料庫的變更) 5:尾日期備份(日誌

用分離、附加的方式實現sql server資料庫備份還原

一、資料庫分離、附加的說明 SQL Server提供了“分離/附加”資料庫、“備份/還原”資料庫、複製資料庫等多種資料庫的備份和恢復方法。這裡介紹一種學習中常用的“分離/附加”方法,類似於大家熟悉的“檔案拷貝”方法,即把資料庫檔案(.MDF)和對應的日誌檔案(.LDF)再拷貝到任何需要恢復這個資料庫的系統磁

SQL Server備份還原系統數據庫

系統數據庫 master model msdb 楊書凡 系統數據庫是管理和維護SQL Server所必須的數據庫,對服務器實例的運行至關重要。每次進行大量更新後必須備份多個系統數據庫,包括master、model、msdb,備份這些系統數據庫,就可以在發生系統故障(如硬盤丟失)時

Sql Server資料庫資料恢復成功案例

故障描述: 5塊2T硬碟組建RAID5,劃分LUN供windows伺服器使用。在windows伺服器內裝有Sql Server2008資料庫。儲存空間內共有三個邏輯分割槽,大小分別為500G、800G、2.3T。資料庫檔案丟失,主要涉及五個資料庫,表個數約為6000個左右。丟失原因未知,且不能確

sql server資料庫實時備份_sql資料庫實時備份軟體_資料實時備份

www.syncnavigator.cn SyncNavigator 做資料同步時所支援的資料庫型別: 支援sqlserver 2000-2014所有版本,全相容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。 來源資料庫和目標資料庫可以版本不同,比如:來源資料庫

在C# WinForm中如何建立SQL Server資料庫資料

【1】動態建立資料庫方法(例項),你可以在WinForm中新增一個文字框,輸入資料庫名稱,這個就不用我囉嗦了吧。將下面的第一句改為 string myExecuteQuery = "create database "+textBox1.Text.Trim(); //建立te