在项目的开发中,备份是一个很重要的操作和良好的开发习惯,下面我们就针对BI相关项目的备份说一下备份策略
前端:Cognos
后端:SSIS+View+Procedure
服务器A装了Cognos内容库,Cognos 相关组件
服务器B部署了DW和ETL
下面我们就来说一说备份步骤
1:备份Cognos相关内容
Cognos内容库+cognos模型文件(FM/TR)
Cognos用户认证
2:备份DW相关内容
ODS库+DW库+SSIS工程文件
----------------------------------------------可能用到的相关技术1---------------------------------------------------------------------------------------
备份SQLSERVER数据库的存储过程脚本
USE [Cognos_Logn] GO /****** Object: StoredProcedure [dbo].[BackupDatabase] Script Date: 08/13/2015 15:47:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[BackupDatabase] as DECLARE @FullPath varchar(1000) DECLARE @FolderPath varchar(1000) set @FolderPath='E:\cognos_backup\' set @FullPath = @FolderPath+ 'Cognos_Logn_'+replace(CONVERT(char(10),GETDATE(),120),'-','')+ '.bak' backup database [Cognos_Logn] to disk=@FullPath WITH INIT return GO
把需要备份的模型文件copy到指定目录的DOS命令,文件名按20150813的格式
@echo off echo 备份开始... echo 开始时间 %date% %time% >E:\cognos_backup\Model_%date:~0,4%%date:~5,2%%date:~8,2%.log xcopy/e/h/r/y "D:\EWELL_BI\ewell_projects" "E:\cognos_backup\Model_%date:~0,4%%date:~5,2%%date:~8,2%\" >>E:\cognos_backup\Model_%date:~0,4%%date:~5,2%%date:~8,2%.log echo 备份结束... echo 结束时间 %date% %time% >>E:\cognos_backup\Model_%date:~0,4%%date:~5,2%%date:~8,2%.log
----------------------------------------------可能用到的相关技术1---------------------------------------------------------------------------------------
有了上面的代码再加上SQLServer的代理服务以及window的任务计划。我们1和2的备份都可以实现在A和B上面分别把Cognos相关备份的数据库文件每天备份到A服务器的E:\cognos_backup,以及把DW相关的ETL程序和数据
仓库备份到B服务器的E:\dw_backup下面
截止目前我们已经完成了在serverA和serverB上面的本地不同目录备份,增加了开发过程的安全性,那么这样的话还是不安全的,如果A和B有一台挂掉,或者硬盘不可恢复
的话,还是会给项目带来很大的麻烦,接下来我们就要实现在ServerA和ServerB上面实现对对应用服务器和数据服务器的相互备份
效果:即ServerA上面有cognos_backup+dw_backup ,ServerB上面也有cognos_backup+dw_backup
so,go!
经过上面的操作,我们已经实现了ServerA上面有cognos_backup,ServerB上面有dw_backup的效果
接下来我们要做的就是
1:每天定时把ServerB上面的dw_backup复制到ServerA上面
2:每天定时把ServerA上面的cognos_backup复制到ServerB上面
那么接下来我们就需要window 定时远程复制的脚本
----------------------------------------------可能用到的相关技术2---------------------------------------------------------------------------------------
echo 注册远程会话开始时间 %date% %time% >E:\bi_backup\dw_backup.log net use \\serverB\dw_backup /user:"admin" "123" >>E:\bi_backup\dw_backup.log echo 注册远程会话结束时间 %date% %time% >>E:\bi_backup\dw_backup.log echo 复制开始时间 %date% %time% >>E:\bi_backup\dw_backup.log xcopy /e /y \\serverB\dw_backup\* E:\bi_backup\dw_backup >>E:\bi_backup\dw_backup.log echo 复制结束时间 %date% %time% >>E:\bi_backup\dw_backup.log net use * /del /y >>E:\bi_backup\dw_backup.log echo 注销远程会话 %date% %time% >>E:\bi_backup\dw_backup.log
代码解释1:
net use \\serverB\dw_backup /user:"admin" "123"
上面的命令是注册远程会话信息到服务器所分享的目录,需要注意的是
代码解释2:
echo 注册远程会话开始时间 %date% %time% >E:\bi_backup\dw_backup.log
上面的命令是把执行时间相关信息输出到指定日志文件中,需要注意的是>是代表覆盖原来文件的内容.>>是在原来文件中追加内容
由于上面的命令是文件中的第一个写入操作所以这里是覆盖,后面的写入为追加>>
代码解释3:
xcopy /e /y \\serverB\dw_backup\* E:\bi_backup\dw_backup >>E:\bi_backup\dw_backup.log
上面的命令是复制serverB上目录dw_backup下面的所有内容到本地的E:\bi_backup\dw_backup目录下
/e是复制所有目录和子目录,包括空目录的内容
/y是默认覆盖,如果存在相同的文件或者文件夹
具体可参考
代码解释4:
net use * /del /y
上面的命令是注销远程会话信息,需要注意的是这一步骤是不可缺少的,如果我们执行了上面的命令,不注销远程会话信息,那么就会对远程服务造成安全隐患
/y 是每次都默认注销,如果不设置此参数,DOS窗口会提示我们手工选择是否确认注销会话信息
----------------------------------------------可能用到的相关技术2---------------------------------------------------------------------------------------
经过上面的操作,加上window系统的任务计划,我们就可以实现serverA 和 serverB互相备份,以达到ServerA上面有cognos_backup+dw_backup ,ServerB上面也有cognos_backup+dw_backup 的效果
我们看serverA 上面cognos的相关备份
dw的相关备份