oracle多个数据库:多个Oracle数据库创建一个Excel报表

="t18"> 微软 Excel 电子表格广泛应用于当今商业环境中 尽管 Excel 能够读取和显示分隔文件但 .xls 专有格式提供了其他些富于表现力特性其中包括字体格式和多工作表电子表格 许多商业和开放源代码工具都提供了生成可由 Excel 读取报表功能 比如您可以使用 Oracle Reports 生成个电子表格或使用 SQL*Plus 输出个由逗号分隔文件 利用现有些工具可以访问多个数据源 但报表格式和特定查询结果紧密联系而区别数据源有时会生成区别结果 (比如对两个区别数据库中表进行 SELECT * FROM emp 查询返回来数量和类型将必然区别) 出于各种各样原因您可能要访问几个区别数据源然后在个电子表格中整理返回结果: 数据库治理员可能希望比较区别数据库配置 应用开发人员可能需要检查区别数据库中 PL/SQL 对象版本 在数据库间移植数据时数据库治理员可能需要估计作业进度 员使用测试数据库调试应用可能需要将当前数据和生产环境中数据进行比较 根据数据库区别结构和用途可能还有其它原因促使您想要生成此类电子表格但所有原因都依靠于数据库功能要求和定义 本文将介绍说明如何使用 Apache Jakarta POI 开放源代码项目从几个区别数据源生成个电子表格 工作簿中个工作表将显示从某个给定 Oracle 数据库返回结果 在当前项目中您要达到要求是: 运行该软件Software创建个包含从个或多个 Oracle 数据库获得数据电子表格 用户将定义个随意 SQL 查询然后由各个配置数据库处理该查询 用户将定义个或多个数据库连接 生成个配置文件其中包括您定义数据连接和 SQL 查询 该配置文件格式为 XML 格式 将生成个工作表显示每个数据库返回结果 将依据服务器名称和 Oracle 系统标识符(又称为 Oracle SID)命名每个工作表 电子表格将以粗体显示列标题(基于数据库列) 该软件Software将用 Java 编写 将使用 JDBC 访问数据库 将使用 Jakarta POI 生成电子表格 您可以为生产系统添加许多要求 很明显上面列表中遗漏了口令加密方面内容 虽然现在已经能够处理 SQL 数据类型但是个更健全解决方案还应该能够处理些非凡数据类型如 BLOB( 2进制大对象)、CLOB(大对象)和 LONG. 目前只能个 XML 配置文件和个脚本来设置环境和执行 Java 类还未提供易于使用图形界面 由于只执行个查询因此必须保证该 SQL 查询无语法并基于每个数据库对象返回个结果集 且记录内容非常少 尽管如此假如达到了上面要求那么该还是相对轻易使用并且它能够快速生成包含许多数据库数据文档 假如需要还可以使用 Excel 编辑该文档格式 将多个数据源数据纳入了个电子表格中所以我们可以很方便对从各数据库提取数据进行比较了 此外您使用主要机制即 POI 应用编程接口 (API) 清楚可辨而不会被构建个功能齐备解决方案所需其他代码和资源所沉没 测试和要求 本文所生成软件Software是在安装有 Java 运行时环境 (JRE) 1.4.2、运行 windows 2000 系统 PC 机上编写和测试完成(要了解 JRE 1.5 相关问题参见边栏) Java 设计初衷就是实现平台无关性所以在任何安装有适当 JRE 机器上都应该能正常运行 使用该版本 JRE您无需访问其他外部 API(如 Xerces 和 Xalan)就能利用 XML 处理
配置 假如系统中有几种 JRE那么必须确保正确设置 PATH 环境变量 1.4.2 或更新版本 JRE而非老版本 JRE 可在 java.sun.com/j2se/1.4.2/docs/api 中 获取 JRE 1.4.2 版 Javadoc 文档 该软件Software下载中包含批处理文件中信息已经进行过更改可用于 Linux 环境而且这些信息已经在 Red Hat Linux 上测试通过 只是对 run.sh 进行了适当修改并没有更改并执行 run.bat 在 Linux 环境中可使用 OpenOffice.org 电子表格来显示电子表格 环境设置基本上就是两个环境变量设置: PATH 和 CLASSPATH 首先要正确设置 CLASSPATH以利用提供数据库访问和 Excel 电子表格功能 API 使用 run.bat 文件设置这变量这样就可以访问相应 Java 文档(.jar 文件) 您可能需要将指向 es12.jar(其中包含 Oracle JDBC 驱动)路径更改您系统上正确路径 在安装许多区别 Oracle 产品时都将自动安装该文件假如您系统中没有该文件本文前面提供有文件下载链接 假如 CLASSPATH 不包含这 jar试图载入 JDBC 驱动时会出现:
Driver not found: oracle.jdbc.driver.OracleDriver java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

下载文件中有个 lib 目录其中包含有 POI jar (poi-2.5.1-final-20040804.jar) 假如 CLASSPATH 不包含这文件试图创建个工作表对象时将出现以下:
Exception in thread "" java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook

The broadcast.jar 包含有些文件利用它们可以集中这些 API 功能然后基于配置连接和 SQL 查询来 构建电子表格 配置文件 (config.xml) 应该位于执行 broadcast.jar 目录中 假如不是将出现(文件系统路径正确):
java.io.FileNotFoundException: C:\config.xml (The system cannot find the file specied)

XML 配置 从 1.4 版本起用于 XML 处理 Java API 就已经加入了 Java 2 平台中 利用该 API可通过系列标准 Java 平台 API 来处理 XML 文档 因此当前项目也就无需另外添加 XML 处理包了 只使用个简单配置文件就可以配置个 SQL 查询和多个数据库连接 XML 格式极其适用于配置文件它使得配置数据易于您理解可以通过标准处理思路方法来顺利访问配置数据 存储在配置文件中数据很有限也就不需要担心出现 "file bloat" 情况当使用 XML 标记符来标记大量数据时会出现 "file bloat" 此外 the hierarchical organization of our configuration data benefits from the organization allowed for through nesting entities in XML. 每个连接节点包含单数据合用后就可以创建个数据库连接 下面是个配置文件举例:
<?xml version="1.0"?> <broadcast> <connection-config> <database> <server-name>server001</server-name> <port>1521</port> <sid>ORCL</sid> <username>sysdba</username>
<passWord>my1manager</password> </database> <database> <server-name>server002</server-name> <port>1521</port> <sid>PROD</sid> <username>sysdba</username> <password>my1manager</password> </database> </connection-config> <sql-statement>select * from v$parameter</sql-statement> </broadcast>


XMLConfigVO 类包含和读取和分析该 XML 文档代码 没有参数构造器后类将读取 config.xml 文件并创建个新 DocumentBuilderFactory例子 本例没有使用 DTD(文档类型定义)或模式验证 该厂生成了个可供分析文档对象假如需要还可操作该文档 接下来将选择和 //broadcast/connection-config/database XPath 表达式节点 这些节点包含创建数据库连接所需元素: 服务器名端口、Oracle SID、您名和密码 最后将使用//broadcast/sql-statement XPath 表达式进行查询以获取 SQL 语句 至此利用存取器(getter 思路方法其形式为 getXXXX)可以从 XMLConfigVO取回所有数据 使用 JDBC Java 数据库连接性 (JDBC) technology 是个 Java API它向 Oracle 数据库提供连接能力以取回数据用于填充电子表格 JDBC API 还有个非凡的处利用它还可在 Oracle 数据库间建立连接用于发送 SQL 语句并处理结果 本文中只使用了这 API 部分功能不需要执行 DML 或设置事务处理 尽管支持所有类型数据库但这里我们要将处理限定到个范围内该范围内可清楚地映射到 Excel 电子表格 Oracle JDBC 驱动依靠于 tnsnames.ora 或其他标准 Oracle 客户连接信息 只要系统中有 JRE 且 Oracle JDBC 驱动类存在于 CLASSPATH (且网络中有数据库)那么 Java 类就有足够资源来创建到 Oracle 数据库连接 es12.jar 包含 Oracle 专用 JDBC 驱动和类它们也是本项目必须要件 它应该包含在 CLASSPATH 中这样您才能够运行该般可以须 /jdbc/lib 找到该文件你也可以从 OTN 中下载 该文件 OracleConnectionVO 类包含和 JDBC 连接相关信息和处理 oracle.jdbc.driver.OracleDriver 将是个 URL其形式为 jdbc:oracle:thin:@:@:@将通过它来创建连接 Jakarata POI 正如我在 以前文章中所述Jakarta POI File API 以纯 Java 方式实施 OLE 2 复合文档格式且通过 HSSF API 可以用 Java 来读写 Excel 文件 在该篇文章中使用了这 API 来读取 Excel 文件 这里我们将使用它来写个 Excel 文件 (POI 也为您提供了打开已有电子表格并对它进行操作功能) 假如你想了解 POI 列多功能请参见 “HSSF 特性指南”其中提供有代码例子演示了开发人员经常需要功能 要创建个工作表对象以下代码(在 BroadcastDriver 类):
HSSFWorkbook wb = HSSFWorkbook(fs);

在 POISheetGenerator 类完成以创建工作表然后它加入工作表中: HSSFSheet sheet = wb.createSheet(sheetname); 列标题字体为粗体配置如下:
HSSFFont boldFont = wb.createFont; boldFont.Boldweight(HSSFFont.BOLDWEIGHT_BOLD); HSSFCellStyle boldStyle = wb.createCellStyle; boldStyle.Font(boldFont);

在和迭代和结果集相关列时将应用上面定义单元格格式:
row.getCell(() x).CellStyle(boldStyle);

要将工作表写入磁盘中以下代码:
OutputStream = FileOutputStream("output.xls");
wb.write(out); out.close; broadcast.jar


broadcast.jar 包含了组成项目本身类: BroadcastDriver. BroadcastDriver 包含了用于这应用主要思路方法 创建 HSSFWorkbook 对象该对象用于容纳所有工作表 然后创建 XMLConfigVO 对象该对象用于从 config.xml 中读取连接和 SQL 查询 使用该对象中包含信息应用将迭代每个 OracleConnectionVO 并设置 JDBC 驱动JDBC 数据库 URL数据库名称数据库密码SQL 查询和工作表名称(形式为 -) 填充有数据工作表将加入工作表 当所有连接迭代完成后工作表将写入到文件系统中 OracleConnectionVO. OracleConnectionVO 中保存了 JDBC 驱动、JDBC 数据库 URL、数据库名称、数据库密码和 SQL 查询 XMLConfigVO. XMLConfigVO 创建 DocumentBuilderFactory 以分析 config.xml 文档 XPath 查询用于检索包含所需值 NodeList:
NodeList nodelist = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath);

当找到正确节点后您可以 getNodeValue 来取回它POISheetGenerator. 该类 populateSheet 思路方法完成大部分工作 经过设置后列标题将以粗体显示数据库连接已经打开查询将执行 检索了元数据我们需要元数据来确定将要迭代数量 元数据还包含了些列名称这些名称将作为正在处理工作表中列名 接下来将迭代结果集 本例中对各种数据处理都是很初级 对于第个返回对象将试图以数字(非凡是 Java 长)填充单元格 假如出现 NumberFormatException (该值不能转化为数字) toString用于该返回对象 toString 功能是在 Object 对象中定义 Object 是 Java 体系最底层所以不管返回是什么对象都可以保证该思路方法有效性 但是假如按照返回值对于对象意义性和相关性来分析那 toString 返回实际值将是极其多样 潜在应用 下面提代了些查询举例可将它们加入 config.xml 文件中以返回些 DBA 或应用开发人员想在数据库间进行比较数据 V$DATABASE 表包含了数据库般信息当您在比较数据库配置或解决备份和恢复问题时可能需要这些信息 尽管区别版本数据库字段数和类型区别以下查询都可以顺利执行并将显示合乎所指结果:
SELECT * FROM v$database

假如个 DBA 想记录些数据库版本信息那么很可能要用到表 V$VERSION 数据 在这种情况下可能要使用下下查询:
SELECT 'Name: 'name "Database Information" FROM v$database UNION ALL SELECT 'DBID: 'dbid FROM v$database UNION ALL SELECT * FROM v$version

在备份和恢复操作中要关注文件是主要有控制文件、重做日志文件和数据库数据文件本身 你可以使用以下查询检索这些文件位置:
SELECT * FROM ( SELECT ' ' "Tablespace" ,Name "File Name" FROM V$CONTROLFILE union SELECT ' ', Member FROM V$LOGFILE union SELECT Tablespace_Name, File_Name FROM DBA_DATA_FILES UNION SELECT ' ' ,'****AS OF: ' to_char(sysdate, 'MM/DD/YYYY HH24:MI:SS')
'****' FROM dual ) ORDER BY 1


Oracle Recovery Manager (RMAN) 般用于治理备份和恢复操作 当要检查备份活动或相要实现备份活动标准化时你可能要用到数据库中存储 RMAN 相关信息 和 RMAN 备份相关请求有:
SELECT * FROM V$BACKUP_SET

SELECT * FROM V$RMAN_CONFIGURATION


Oracle Applications DBA 在治理他们环境时可能会碰到系列问题 DBA 假如治理例子很多那他们可能希望比较已经应用补丁:
SELECT * FROM APPLSYS.AD_APPLIED_PATCHES ORDER BY PATCH_NAME

这些只是几种可能出现情况 任意查询只要没有句法而且在数据库有其对应对象那么它就是可以执行返回结果也可以显示在电子表格中 这里提供举例对技术人员来说较有吸引力 您也可以构想些业务用途比如访问特定应用数据库对象和查询 结论 Java 社区中提供了大量资源利用它们可以快速创建(得益于众多历经验证 API) 利用 Oracle JDBC 驱动您可以使用 Java 编程语言方便来访问数据库而利用 Jakarta 编程人员创建 POI您可以直接创建带多表格式化和其他特性 Excel 电子表格 除了探讨这些技术外文中所介绍这个软件Software还能自动执行些日常活动可适当减轻 DBA 工作负担
Tags:  oracle创建数据库 oracle数据库教程 oracle数据库 oracle多个数据库

延伸阅读

最新评论

发表评论