开发工具:VS2008 C#,ORACLE管理工具 QQ:595789813
来源:互联网 发布:商品价签打印软件 编辑:程序博客网 时间:2024/06/05 23:53
开发工具:VS2008 C#,ORACLE管理工具
对操作系统进行备份和还原也许是最常用的。实际业务环境升级后,因多方面原因存在严重问题,这时很可能需要还原到升级前的状态。因此数据库建立备份并能进行还原就很有意义。本文是一个使用C#(VS2008)结合Oracle客户端完成还原点的建立与恢复的完整例子。
明确还原目标
在建立还原点时,首先要明确还原对象,我们所提及的还原并不是简单地对数据库某个时间点整个数据库的备份与还原,因为在升级后发生的实际业务数据是不能进行还原的。
会引起重要问题的主要是程序,在数据库中体现在包、函数和存储过程以及与流程相关的参数、方案等核心字典数据与界面层的一致性。而具体业务中产生的数据如收费项目、收费明细等,是不能进行还原的,明确还原目标后,问题的解决就有方向性了。
要建立还原点,首先要了解数据库中关键对象的存放位置,对于包、函数等可以在ORACLE的数据库视图user_source中找到。
备份:建立还原对象列表
在建立C#的工程之后,今天我们利用配置文件app.config.xml,设定了相应的“导出对象”,“ORACLE连接”等内容,如图 001:
这样参数就可以在CONFIG中进行调整了。在进行备份时,我们首先要取得相关的程序列表,下面的语句可以找到我们需要的导出对象:复制代码可以使用configurationAppSettings来取得配置文件中的设置,如导出对象、数据库连接、回滚目录,如:复制代码首先针对“导出对象”所定义的串进行拆分,ls_typeinfo存放需要导出的类型,并建立ORACLE的数据库连接,再根据需要取得数据查询结果:复制代码通过循环,获得信息列表存放到对象列表listPrcInfo中,它包括两个项目,分别就是:对象名strName,对象类别 strType。
备份:有进度地产生各个对象体
生成了对象列表后,再根据每个对象名和对象类别来读取内容,相对来说就比较简单,只要使用以下方法:复制代码来读取对象的程序内容,并按照我们在CONFIG中所对应的各种文件扩展名来保存文件:
注意,由于我们数据库程序需要使用SQLPLUS来进行导入,因此最后一行我们需要写入结束标志符,即“/”符号,它的最后内容是这样的:
由于表的导出我们依赖数据库的导出功能,只要使用exp命令导出指定的字典表即可。即与具体业务无关的核心字典表,如功能列表、参数列表、菜单项目等,基本上使用类似于以下的命令结构即可完成 :复制代码其中的%1所对应的项目,是我们需要导出的表项目,由于导入功能的特殊性,会在导入功能中着重介绍。
对操作系统进行备份和还原也许是最常用的。实际业务环境升级后,因多方面原因存在严重问题,这时很可能需要还原到升级前的状态。因此数据库建立备份并能进行还原就很有意义。本文是一个使用C#(VS2008)结合Oracle客户端完成还原点的建立与恢复的完整例子。
明确还原目标
在建立还原点时,首先要明确还原对象,我们所提及的还原并不是简单地对数据库某个时间点整个数据库的备份与还原,因为在升级后发生的实际业务数据是不能进行还原的。
会引起重要问题的主要是程序,在数据库中体现在包、函数和存储过程以及与流程相关的参数、方案等核心字典数据与界面层的一致性。而具体业务中产生的数据如收费项目、收费明细等,是不能进行还原的,明确还原目标后,问题的解决就有方向性了。
要建立还原点,首先要了解数据库中关键对象的存放位置,对于包、函数等可以在ORACLE的数据库视图user_source中找到。
备份:建立还原对象列表
在建立C#的工程之后,今天我们利用配置文件app.config.xml,设定了相应的“导出对象”,“ORACLE连接”等内容,如图 001:
这样参数就可以在CONFIG中进行调整了。在进行备份时,我们首先要取得相关的程序列表,下面的语句可以找到我们需要的导出对象:
- selectdistinctus.name,us.typefromuser_sourceuswhereus.typein('PROCEDURE','FUNCTION','PACKAGE','PACKAGEBODY');
- ls_configs=(string)(configurationAppSettings.GetValue("导出对象",typeof(string)));
- ls_querysql="SelectdistinctUs.Name,us.typeFromUser_SourceUswhereus.typein("+ls_typeinfo+")orderbyus.Name,us.Type";
- oracleCommand1.CommandText=ls_querysql;
- oracleCommand1.CommandType=CommandType.Text;//如何解析commandText的值
- OracleDataReadermyReader=oracleCommand1.ExecuteReader(CommandBehavior.CloseConnection);
- while(myReader.Read())//使用oracleDateReader前进到下一条记录
备份:有进度地产生各个对象体
生成了对象列表后,再根据每个对象名和对象类别来读取内容,相对来说就比较简单,只要使用以下方法:
- ls_querysql = " Select us.line, us.text From User_Source Us where us.name = '" + listPrcInfo.strName +"' and us.type='"+listPrcInfo.strType+"' order by us.line ";
- oracleCommand1.CommandText = ls_querysql;
- oracleCommand1.CommandType = CommandType.Text;//如何解析commandText的值
注意,由于我们数据库程序需要使用SQLPLUS来进行导入,因此最后一行我们需要写入结束标志符,即“/”符号,它的最后内容是这样的:
由于表的导出我们依赖数据库的导出功能,只要使用exp命令导出指定的字典表即可。即与具体业务无关的核心字典表,如功能列表、参数列表、菜单项目等,基本上使用类似于以下的命令结构即可完成 :
- exp.exe his3/his3@mytest file=d:\roll\roll.dat tables=(%1)
- 本版最新发布本版最后下载
Expert Oracle RAC 12cOracle DBA手记·4:数据安全警示录完整版Oracle ADF 11gR2 Development: Beginner’s GuideOracle Essbase 9 Implementation Guide剑破冰山:Oracle开发艺术Oracle DBA高效入职指南Oracle11G题库Oracle双机热备安装手册Oracle存储过程超详细使用手册Getting Started with Oracle Event Processing 11g
Oracle DBA手记·4:数据安全警示录完整版《Oracle DBA手记:数据库诊断案例与性能优化实践》PDF下载Expert Oracle RAC 12cOracle入门很简单Oracle11G题库Oracle Database 11g DBA手册Oracle Database 11g SQL开发指南剑破冰山:Oracle开发艺术Oracle PL/SQL程序设计(第5版)Getting Started with Oracle Event Processing 11g