C#完成Oracle数据库镜像与还原
对操作系统进行备份和还原也许是最常用的 实际业务环境升级后 因多方面原因存在严重问题 这时很可能需要还原到升级前的状态 因此数据库建立备份并能进行还原就很有意义 本文是一个使用C#(Visual Studio )结合Oracle客户端完成还原点的建立与恢复的完整例子
明确还原目标
在建立还原点时 首先要明确还原对象 我们所提及的还原并不是简单地对数据库某个时间点整个数据库的备份与还原 因为在升级后发生的实际业务数据是不能进行还原的
会引起重要问题的主要是程序 在数据库中体现在包 函数和存储过程以及与流程相关的参数 方案等核心字典数据与界面层的一致性 而具体业务中产生的数据如收费项目 收费明细等 是不能进行还原的 明确还原目标后 问题的解决就有方向性了
要建立还原点 首先要了解数据库中关键对象的存放位置 对于包 函数等可以在Oracle的数据库视图user_source中找到
备份 建立还原对象列表
在建立C#的工程之后 今天我们利用配置文件nfig xml 设定了相应的 导出对象 Oracle连接 等内容 如图
这样参数就可以在CONFIG中进行调整了 在进行备份时 我们首先要取得相关的程序列表 下面的语句可以找到我们需要的导出对象
selectdistinctus name us typefromuser_sourceuswhereus typein( PROCEDURE FUNCTION PACKAGE PACKAGEBODY );
可以使用 configurationAppSettings来取得配置文件中的设置 如导出对象 数据库连接 回滚目录 如
ls_configs=(string)(configurationAppSettings GetValue( 导出对象 typeof(string))); 首先针对 导出对象 所定义的串进行拆分 ls_typeinfo存放需要导出的类型 并建立Oracle的数据库连接 再根据需要取得数据查询结果
ls_querysql= SelectdistinctUs Name
us typeFromUser_SourceUswhereus typein( +ls_typeinfo+ )orderbyus Name us Type ;
OracleCommand CommandText=ls_querysql;
OracleCommand CommandType=CommandType Text;
//如何解析mandText的值
OracleDataReadermyReader=OracleCommand ExecuteReader(CommandBehavior CloseConnection);
while(myReader Read())
//使用OracleDateReader前进到下一条记录 通过循环 获得信息列表存放到对象列表listPrcInfo中 它包括两个项目 分别就是 对象名strName 对象类别strType
备份 有进度地产生各个对象体
生成了对象列表后 再根据每个对象名和对象类别来读取内容 相对来说就比较简单 只要使用以下方法
ls_querysql = Select us line us text From User_Source Us where us name = + listPrcInfo[i] strName + and us type= +listPrcInfo[i] strType+ order by us line ; OracleCommand CommandText = ls_querysql; OracleCommand CommandType = CommandType Text;//如何解析mandText的值 来读取对象的程序内容 并按照我们在CONFIG中所对应的各种文件扩展名来保存文件: