SQLServer 的备份与恢复 & 文件组的差异备份

SQLServer 的备份与恢复 & 文件组的差异备份,第1张

概述/*     SQLServer 的备份恢复   先写入日记文件,再写入数据库   恢复模式 完整:      数据总是存储为2份,一份在日志文件里,一份在数据文件 大容量日记: 普通SQL更新数据会完整记录日记,BCP/BULKINSERT/INTO/创建或重建索引等不会写入实际数据更新内容,            而只是在一个数据页位图图标标志区域作一个数据变更标识,以减少IO负荷,日记备份

/*

    sqlServer 的备份与恢复

 

先写入日记文件,再写入数据库

 

恢复模式

完整:      数据总是存储为2份,一份在日志文件里,一份在数据文件

大容量日记: 普通sql更新数据会完整记录日记,BCP/BulKINSERT/INTO/创建或重建索引等不会写入实际数据更新内容,

           而只是在一个数据页位图图标标志区域作一个数据变更标识,以减少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_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,  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,  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,  name = N'BurningDB-差异文件组备份',  STATS = 10

GO

-- 备份日记备份

BACKUP LOG [BurningDB]

TO  disK = N'F:\Database\BurningDB_LOG.bak'

WITH NOFORMAT,  name = N'BurningDB-事务日志数据库备份',  STATS = 10

GO

 

-- * 还原

-- 还原完整备份

RESTORE DATABASE [BurningDB]

file = N'BurningDB', 

file = N'FG1' FROM  disK = N'F:\Database\BurningDB_Full.bak'

WITH  file = 1,  STATS = 10

GO

-- 还原差异备份

RESTORE DATABASE [BurningDB]

file = N'BurningDB', 

file = N'FG1'

FROM  disK = N'F:\Database\BurningDB_DIFF.bak'

WITH  file = 1,  STATS = 10

GO

-- 还原日记备份

RESTORE LOG [BurningDB]

FROM  disK = N'F:\Database\BurningDB_LOG.bak'

WITH  file = 1,  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,  name = N'BurningDB-差异数据库备份',  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

 

*/

总结

以上是内存溢出为你收集整理的SQLServer 的备份与恢复 & 文件组的差异备份全部内容,希望文章能够帮你解决SQLServer 的备份与恢复 & 文件组的差异备份所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1169821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存