zoukankan      html  css  js  c++  java
  • SQL Server的备份还原通用解决方案

    为了减少数据库服务器出问题导致数据掉失,一般都要对数据库进行备份,视对数据的重要性和性能的折中采用不同的备份方案。
    一般备份方案为:
    完全备份(一周一次)+差异备份(一天一次)+事务日志备份(两小时一次,视对数据的重视情况而选择)
    这样的话即使出现问题,数据掉失的范围是两个小时。

    首先来分别阐述数据库备份的类型:

    1、完全备份

         这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。

    代码
    --weekly full backup
    --
    the back up file looks like this:Test_200912151512_weekly.bak
    declare @filename nvarchar(100)
    set @filename='D:\\DBBackup\Test_'+replace(replace(replace(replace(CONVERT(char(16), getdate(), 120 ),'-',''),'
    ',''),':',''),' ','') +'_weekly.bak'

    declare @dbname nvarchar(50)
    declare @SQL nvarchar(500)
    set @dbname='Test'
    set @SQL='BACKUP DATABASE '+ @dbname +' TO DISK = '''+@filename+''' WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT'
    exec(@SQL)

    2、事务日志备份

         事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。

    代码
    --hourly log backup
    --
    the backup file looks liek this:Test_Log_200912151547_hourly.bak
    declare @filename nvarchar(100)
    set @filename='D:\\DBBackup\Test_Log_'+replace(replace(replace(replace(CONVERT(char(16), getdate(), 120 ),'-',''),'
    ',''),':',''),' ','') +'_hourly.bak'

    declare @dbname nvarchar(50)
    declare @SQL nvarchar(500)
    set @dbname='Test'
    set @SQL='BACKUP Log '+ @dbname +' TO DISK = '''+@filename+''' With No_Truncate'
    exec(@SQL)

    3、差异备份

         它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。

    代码
    --daily differential backup
    --
    the backup file looks like this:Test_200912151543_daily.bak
    declare @filename nvarchar(100)
    set @filename='D:\\DBBackup\Test_'+replace(replace(replace(replace(CONVERT(char(16), getdate(), 120 ),'-',''),'
    ',''),':',''),' ','') +'_daily.bak'

    declare @dbname nvarchar(50)
    declare @SQL nvarchar(500)
    set @dbname='Test'
    set @SQL='BACKUP DATABASE '+ @dbname +' TO DISK = '''+@filename+''' WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT'
    exec(@SQL)

     4、文件备份

         数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。

  • 相关阅读:
    上周热点回顾(8.25-8.31)团队
    上周热点回顾(8.18-8.24)团队
    Suricata产生的数据存储目录
    Suricata的规则解读(默认和自定义)
    Suricata的总体架构
    Suricata是什么?
    snort + barnyard2如何正确读取snort.unified2格式的数据集并且入库MySQL(图文详解)
    基于CentOS6.5或Ubuntu14.04下Suricata里搭配安装 ELK (elasticsearch, logstash, kibana)(图文详解)
    Windows里安装wireshark或者ethereal工具(包括汉化破解)(图文详解)
    Tcpdump的用法
  • 原文地址:https://www.cnblogs.com/engine1984/p/1624926.html
Copyright © 2011-2022 走看看