/* 數據庫
SQLServer 的備份與恢復ide
先寫入日記文件,再寫入數據庫測試
恢復模式spa
完整: 數據老是存儲爲2份,一份在日誌文件裏,一份在數據文件日誌
大容量日記: 普通SQL更新數據會完整記錄日記,BCP/BULKINSERT/INTO/建立或重建索引等不會寫入實際數據更新內容,orm
而只是在一個數據頁位圖圖標標誌區域做一個數據變動標識,以減小IO負荷,日記備份時,根據數據頁位圖去更新數據 索引
簡單模式: 對數據更改仍是按照大容量模式記錄日記,數據更新操做完成,日記文件便可重用,提供全備份+差別備份事務
各類備份區別it
完整備份: 備份整個數據庫,恢復模式必須爲完整io
事務備份: 備份事務交易記錄,恢復模式必須爲完整
差別備份: 恢復時不須要依備份順序逐個恢復(如需恢復到星期三,先還原星期天的完整備份,再直接恢復星期三的差別備份)
增量備份: 恢復時必須依備份順序逐個恢復(如需恢復到星期三,先還原星期天的完整備份,而後還原星期一/二的備份,最後才恢復星期三的增量備份)
*/
--備份
Backup Database initSfis To
Disk='F:\Database\initSfis_1.Bak',
Disk='F:\Database\initSfis_2.Bak',
Disk='F:\Database\initSfis_3.Bak'
With Compression --壓縮Differential 爲差別備份
--多存儲一份備份鏡像,必須加參數FORMAT
Backup Database initSfis To
Disk='F:\Database\initSfis_1.Bak',
Disk='F:\Database\initSfis_2.Bak',
Disk='F:\Database\initSfis_3.Bak'
MIRROR TO
Disk='F:\Database\initSfis_1_1.Bak',
Disk='F:\Database\initSfis_2_2.Bak',
Disk='F:\Database\initSfis_3_3.Bak'
With Compression, format --壓縮
--日記備份, 一樣能夠使用MIRROR 選項
Backup Log DB To
Disk='D:\Data\DB_20140519_Log_3_1.Bak',
Disk='D:\Data\DB_20140519_Log_3_2.Bak'
With Compression
--查看文件備份頭
Restore HeaderOnly From Disk='F:\Database\initSfis20131031.bak'
GO
--查看文件備份是否有效
Restore VERIFYONLY From Disk='F:\Database\initSfis20131031.bak'
GO
--查看文件中的數據文件信息
Restore FileListOnly From Disk='F:\Database\initSfis20131031.bak'
GO
--還原
RESTORE DATABASE [initSfis] FROM
DISK =N'F:\Database\initSfis_2.Bak',
DISK =N'F:\Database\initSfis_3.Bak',
DISK =N'F:\Database\initSfis_1.Bak'
WITH FILE = 1, NOUNLOAD, STATS = 10, replace -- FILE=1 爲若有屢次備分內容,指示使用第一次備份
GO
--還原數據庫/事務日記指定時間點
RESTORE DATABASE [Credit] FROM DISK = N'F:\Credit.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 --能夠還原事務日記WITH NORECOVERY
GO
RESTORE DATABASE [Credit] FROM DISK = N'F:\Credit_backup_2012_07_06_011501_0146598.trn'WITH NORECOVERY
GO
RESTORE DATABASE [Credit] FROM DISK = N'F:\Credit_backup_2012_07_06_021503_5289873.trn'WITH RECOVERY,STOPAT='2012-07-06 02:00:00' --鎖定到哪一點
GO
--還原沒有數據庫的前提,須要還原的時候移動文件
RESTORE DATABASE [Credit] FROM DISK = N'F:\Credit.bak' WITH FILE = 1,
MOVE 'Credit' TO 'D:\ProgramFile\...\Credit.mdf',
MOVE 'Credit_Log' TO 'D:\ProgramFile\...\Credit_1.ldf',
NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
/*
* 文件組的備份與還原,測試過程以下
* 1、創建空白數據庫後,做完整備份
* 2、創建數據表後,作差別備份
* 3、插入記錄後,作事務日記備份
USE BurningDB
GO
CREATE DATABASE BurningDB
GO
-- 執行完整備份
CREATE TABLE T1(
p_id int,
p_name varchar(10)
)
CREATE TABLE T2(
s_id int,
s_name varchar(10)
)on FG1
-- 執行差別備份
insert into T1 values (1, 'tony')
insert into T1 values (3, 'peter')
insert into T2 values (2, 'wang')
insert into T2 values (4, 'dong')
select * from T1
select * from T2
--drop table T1
--drop table T2
-- 最後執行日記備份
*/
USE master
GO
-- * 備份
-- 備份完整備份
BACKUP DATABASE [BurningDB]
FILEGROUP = N'PRIMARY',
FILEGROUP = N'FG1'
TO DISK = N'F:\Database\BurningDB_Full.bak'
WITH NOFORMAT, NOINIT, NAME = N'BurningDB-完整文件組備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- 備份差別備份
BACKUP DATABASE [BurningDB]
FILEGROUP = N'PRIMARY',
FILEGROUP = N'FG1'
TO DISK = N'F:\Database\BurningDB_DIFF.bak'
WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'BurningDB-差別文件組備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- 備份日記備份
BACKUP LOG [BurningDB]
TO DISK = N'F:\Database\BurningDB_LOG.bak'
WITH NOFORMAT, NOINIT, NAME = N'BurningDB-事務日誌數據庫備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- * 還原
-- 還原完整備份
RESTORE DATABASE [BurningDB]
FILE = N'BurningDB',
FILE = N'FG1' FROM DISK = N'F:\Database\BurningDB_Full.bak'
WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
GO
-- 還原差別備份
RESTORE DATABASE [BurningDB]
FILE = N'BurningDB',
FILE = N'FG1'
FROM DISK = N'F:\Database\BurningDB_DIFF.bak'
WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
GO
-- 還原日記備份
RESTORE LOG [BurningDB]
FROM DISK = N'F:\Database\BurningDB_LOG.bak'
WITH FILE = 1, NOUNLOAD, STATS = 10
GO
/*
* 差別備份
* 只有一個PRIMARY 文件組
-- 備份
USE master
GO
BACKUPDATABASE [BurningDB]
TO DISK = N'F:\Database\b_full.bak'
WITH NOFORMAT,NOINIT, NAME = N'BurningDB-完整數據庫備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUPDATABASE [BurningDB]
TO DISK = N'F:\Database\b_diff.bak'
WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'BurningDB-差別數據庫備份', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- 還原
USE master
GO
RESTOREDATABASE [BurningDB]
FROM DISK = N'F:\Database\b_full.bak'
WITH FILE = 1, NORECOVERY, NOUNLOAD,REPLACE, STATS = 10
GO
RESTOREDATABASE [BurningDB]
FROM DISK = N'F:\Database\b_diff.bak'
WITH FILE = 1, NOUNLOAD, STATS = 10
GO
*/