• [总结]Ms Sql 2000资料库备份方案


    相关存储过程

     

    /*-----------------------------------------------------------------------------------------------------------------------
    名  称:收缩数据库 
    调用对像:
    备注说明:
    程序作者:
    -------------------------------------------------------------------------------------------------------------------------
    修改日期        修改内容
    -------------------------------------------------------------------------------------------------------------------------
    
    -----------------------------------------------------------------------------------------------------------------------*/
    CREATE PROCEDURE [dbo].[UP_ShrinkDb]
    (
        @DbName varchar(100)        ----Database Name
    )
    AS
    BEGIN
        SET NOCOUNT ON
        
            --DUMP TRANSACTION @DbName WITH NO_LOG
            
            BACKUP LOG @DbName WITH NO_LOG
            
            DBCC SHRINKDATABASE(@DbName)
    
        SET NOCOUNT OFF
    END
    GO

     

    /*-----------------------------------------------------------------------------------------------------------------------
    名  称:备份资料库
    调用对像:
    备注说明:
    程序作者:
    -------------------------------------------------------------------------------------------------------------------------
    --备份当前数据库    一星期做一次
    EXEC UP_BackupDb
        @DbName = 'Northwind',
        @BakPath = 'C:\Northwind\',
        @BakFileName = '\DBNAME\_\DATE\_Full.Bak',
        @BakType = 'DB',
        @AppendFile = 1
    
    --差异备份当前数据库    一天做一次
    EXEC UP_BackupDb
        @DbName = 'Northwind',
        @BakPath = 'C:\Northwind\',
        @BakFileName = '\DBNAME\_\DATE\_Dif.Bak',
        @BakType = 'DF',
        @AppendFile = 1
    
    --备份当前数据库日志    一个小时做一次
    EXEC UP_BackupDb
        @DbName = 'Northwind',
        @BakPath = 'C:\Northwind\',
        @BakFileName = '\DBNAME\_\DATE\_Log.Bak',
        @BakType = 'Log',
        @AppendFile = 1
    -------------------------------------------------------------------------------------------------------------------------
    修改日期        修改内容
    -------------------------------------------------------------------------------------------------------------------------
    
    -----------------------------------------------------------------------------------------------------------------------*/
    CREATE PROCEDURE [dbo].[UP_BackupDb]
    (
        @DbName SYSNAME='',                    --要备份的数据库名称,不指定则备份当前数据库
        @BakPath NVARCHAR(260),                    --备份文件的存放目录
        @BakFileName NVARCHAR(260)='',                --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
        @BakType NVARCHAR(10)='DB',                --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
        @AppendFile BIT=1                    --追加/覆盖备份文件
    )
    AS
    BEGIN
        SET NOCOUNT ON
        
        DECLARE @Sql VARCHAR(8000)
        IF ISNULL(@DbName,'')='' SET @DbName=DB_NAME()
        IF ISNULL(@BakFileName,'')='' SET @BakFileName='\DBNAME\_\DATE\_\TIME\.BAK'
        
        IF Right(@BakPath,1)<>'\' SET @BakPath=@BakPath+'\'
        SET @BakPath = @BakPath + CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR(10)) + '_' + CAST(DATEPART(Week,GETDATE()) AS VARCHAR(10))+'\'
        
        DECLARE @Cmd VARCHAR(500)
        SELECT @Cmd='MD '+ @BakPath
        Exec master..xp_cmdshell @Cmd,no_output
        
        SET @BakFileName=REPLACE(REPLACE(REPLACE(@BakFileName,'\DBNAME\',@DbName)
        ,'\DATE\',CONVERT(VARCHAR,GETDATE(),112))
        ,'\TIME\',REPLACE(CONVERT(VARCHAR,GETDATE(),108),':',''))
        SET @Sql='BackUp ' + Case @BakType WHEN 'LOG' THEN 'Log ' Else 'DataBase ' End + @DbName +' To Disk=''' + @BakPath + @BakFileName + ''' With ' + Case @BakType WHEN 'DF' THEN 'DIFFERENTIAL,' Else '' End + Case @AppendFile WHEN 1 THEN 'NOINIT' Else 'INIT' END
        SET @Sql = @Sql + ',Name=''' + Case @BakType WHEN 'DB' THEN 'DB Full Bak' WHEN 'DF' THEN 'DB Differential Bak' ELSE 'DB Log Bak' End + ''''
        PRINT(@Sql)
        EXEC(@Sql)
    
        SET NOCOUNT OFF
    END
    GO

     

    --做测试时新增数据的Sql
    
    declare @i int;set @i=1;
    while @i<=10000
    begin
        INSERT INTO Test
        (
            Name,
            CrUID,
            LastMoUID
        )
        VALUES
        (
            'TEST','admin','admin'
        )
        set @i=@i+1
    end
    --显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。
    exec sp_spaceused Test
    GO
    
    SELECT COUNT(*) FROM Test --30001
    TRUNCATE TABLE Test

    备份方案

    /*
    * 完整备份,因资料量大,建议一星期做一次,可以每星期天01:10开始处理
    * 在做完整备份前建议先做好日志备份,再做数据库收缩,这样做完整备份会相对小
    * 当然第一次做完整备份的时候可以不做日志备份,前面没有完整备份做这个也没有意义。
    * 
    *  
    */
    EXEC UP_BackupDb
        @DbName = 'Northwind',
        @BakPath = 'C:\Northwind\',
        @BakFileName = '\DBNAME\_\DATE\_\TIME\_Log.Bak',
        @BakType = 'Log',
        @AppendFile = 1
    EXEC UP_ShrinkDb
        @DbName = 'Northwind'
    EXEC UP_BackupDb
         @DbName = 'Northwind',
         @BakPath = 'C:\Northwind\',
         @BakFileName = '\DBNAME\_\DATE\_\TIME\_Full.Bak',
         @BakType = 'DB',
         @AppendFile = 1
    
    /*
    * 差异备份当前数据库,相对前一次完整备份的差异数据,建议一天做一次。
    * 可以在每晚的23:10开始处理
    * 在做差异备份前建议先做日志备份,再做数据库收缩。
    * */
    EXEC UP_BackupDb
        @DbName = 'Northwind',
        @BakPath = 'C:\Northwind\',
        @BakFileName = '\DBNAME\_\DATE\_\TIME\_Log.Bak',
        @BakType = 'Log',
        @AppendFile = 1
    EXEC UP_ShrinkDb
        @DbName = 'Northwind'
    EXEC UP_BackupDb
         @DbName = 'Northwind',
         @BakPath = 'C:\Northwind\',
         @BakFileName = '\DBNAME\_\DATE\_\TIME\_Dif.Bak',
         @BakType = 'DF',
         @AppendFile = 1
    
    /*
    * 日志备份,建议一小时做一次。
    * 每一个整点做一次日志备份,
    * */
    EXEC UP_BackupDb
        @DbName = 'Northwind',
        @BakPath = 'C:\Northwind\',
        @BakFileName = '\DBNAME\_\DATE\_\TIME\_Log.Bak',
        @BakType = 'Log',
        @AppendFile = 1
        

     

     如下图所示,点击相应菜单后会出现图二。

                 (图一)

     

              (图二)

    上图中很清楚的列出了数据库的备份数据,选择“数据库”还原方式时,很方便在这里恢复到还原点。

    另外我们再说一说其它两种还原方式:

    [从文件组或文件]方式还原:

    文件和文件组备份只能恢复到其所属的数据库。您不能使用相同的结构和文件名创建一个新的空白数据库,然后尝试还原单个文件组备份 ;必须将它还原到现有的数据库,或在其他位置执行完整数据库还原。

     

    [从设备]方式还原:

    还原时需从完整备份再到最后一个差异备份,接著再还原日志备份,日志备份还原时需要从最早的到最晚的一个一个还原。

     

    注意事项

    1,不论是差异还是日志备份,前是都必需要有完整备份。
    2,在截断日志前一定要做日志备份,同样遇到资料库问题时也需要先做日志备份。这样才可以保证恢复到故障点。
    3,差异备份备份的是从上次完整备份后的差异数据。
    4,日志备份备份的是自上次备份【无论是完整,差异,日志】后的日志

     

    参考资料

    http://www.cnblogs.com/Athrun/archive/2007/12/17/1003810.html

    http://blog.csdn.net/fenghlc/article/details/6002056

  • 相关阅读:
    【猫狗数据集】谷歌colab之使用pytorch读取自己数据集(猫狗数据集)
    【python-leetcode480-双堆】滑动窗口的中位数
    hadoop伪分布式之配置文件说明
    hadoop伪分布式之配置日志聚集
    hadoop伪分布式之配置历史服务器
    微服务框架-Spring Cloud
    Spring Cloud和eureka启动报错 解决版本依赖关系
    Spring Cloud提供者actuator依赖
    Eureka 客户端依赖管理模块
    JDK9之后 Eureka依赖
  • 原文地址:https://www.cnblogs.com/Athrun/p/mssql_backup.html
Copyright © 2020-2023  润新知