数据库异地备份还原小计

一线数据库: 10.1.8.100

报表数据库: 10.1.8.101

数据库名:crs_test

 

描述:

由于一线数据库压力过大,决定每天将一线库的BAK备份传输到报表数据库上还原,然后所有报表功能的服务均访问报表数据库,以减轻一线库压力。

 

备份:

一线库每周一凌晨做一次全备份,周二到周日每天凌晨做差异备份。

 

过程概述:

10.1.8.100上设置JOB完成以下事务:

1:每天凌晨3点备份。

2:备份后,将备从10.1.8.100份拷贝到10.1.8.101

xcopy t:\crs\full\* \\10.1.8.101\d$\DatabaseBAK\Full\ /c /d /e /h /k /r /y /g

 3:然后将备份文件从临时文件夹转移到正式备份文件夹

move t:\crs\full\crs_test_backup_*.bak t:\crs\

 

10.1.8.101上设置JOB完成以下事务:

SET NOCOUNT ON;
--step 10: 判断数据库是否存在
DECLARE @intDBCount int;
SELECT @intDBCount=COUNT(*) FROM sysdatabases WHERE name='crs_test'; 

--step 11: 如果数据库存在,判断数据库上是否有session;
--step 12: 如果数据库不存在,则直接还原数据库(to step3)
--step 21: 如果session存在,杀掉所有session
--step 22: 如果session不存在,则直接还原数据库(to step3)
IF @intDBCount=1
BEGIN
    DECLARE @strSQL VARCHAR(100);
    DECLARE cursorSessions CURSOR FOR SELECT DISTINCT request_session_id FROM master.sys.dm_tran_locks 
    WHERE resource_type = 'DATABASE' AND resource_database_id = db_id(N'crs_test')
    OPEN cursorSessions 
    DECLARE @intSPID INT FETCH NEXT FROM cursorSessions INTO @intSPID WHILE @@FETCH_STATUS =0
    BEGIN SET @strSQL='Kill ' + CONVERT(VARCHAR(10),@intSPID) + ';'
    EXEC (@strSQL) FETCH NEXT FROM  cursorSessions INTO @intSPID
    END
    CLOSE cursorSessions
    DEALLOCATE cursorSessions
END; 

--step 3: 还原数据库全备份
    RESTORE DATABASE crs_test
    FROM DISK='D:\DatabaseBAK\Full\crs_test_backup_full.bak' WITH NORECOVERY,
    MOVE 'CRS_TEST_Data' TO 'E:\DataBaseFolder\CRS_TEST_Data.mdf',
    MOVE 'CRS_TEST_Log' TO 'D:\DataBaseLogFolder\CRS_TEST_Log.ldf',
    REPLACE ; 

--step 4: 判断是否存在差异备份文件,如果存在,则还原数据库差异备份
    DECLARE @result INT;
    EXEC xp_fileexist 'D:\DatabaseBAK\diff\crs_test_backup_diff.bak', @result OUTPUT;
    IF @result=1
    BEGIN
        RESTORE DATABASE crs_test
        FROM DISK='D:\DatabaseBAK\diff\crs_test_backup_diff.bak' WITH NORECOVERY,
        MOVE 'CRS_TEST_Data' TO 'E:\DataBaseFolder\CRS_TEST_Data.mdf',
        MOVE 'CRS_TEST_Log' TO 'D:\DataBaseLogFolder\CRS_TEST_Log.ldf',
        REPLACE ;
    END;

--step 5: 将数据库变成可用状态
RESTORE DATABASE crs_test WITH RECOVERY; 

 

 

 

 

posted @ 2011-07-29 02:21  qinyi  阅读(648)  评论(0编辑  收藏  举报