使用 Orac 进行 Oracle 数据库管理
Orac 是一款用 Perl/Tk 编写的开源数据库管理工具。它主要由 DBA(数据库管理员)编写并为 DBA 服务。然而,它对于开发者和任何想要更多了解他们的数据库如何(以及运行状况如何)工作的人来说也非常有用。
Orac 提供了任何 DBA 可能需要的大部分功能。它包括帮助管理物理数据库文件、用户、数据库对象(例如表、视图、序列等)的脚本,以及帮助调整数据库和解决“锁定”冲突的脚本。
Orac 通过提供友好的 GUI 和脚本的逻辑组织,构建在这个广泛可用的 SQL 脚本集合之上。当然,Orac 是可扩展的,因为源代码很容易获得。更棒的是,Orac 有一个简单的方法来添加对更多 SQL 脚本的支持,而无需编辑哪怕一行代码。因此,对于那些已经拥有自己常用脚本的 DBA 来说,Orac 更加有用。
顺便说一句,Orac 程序的名称来源于 BBC 科幻电视剧《布莱克七人组》中的一台超级计算机,绝非取自 Oracle 数据库或 Oracle 公司。无意暗示与 Oracle 公司有任何关联。
许多经验丰富的 DBA 几乎完全使用命令行实用程序来管理数据库。Oracle 提供了许多工具,例如 sqlplus 用于查询数据库,svrmgrl 用于启动和关闭数据库,以及 sqlldr 用于加载 ASCII 文件。与 Oracle 数据库一样,这些简单的命令行工具已被证明是稳固、可靠和高效的。
不幸的是,对于市场上各种高端数据库管理工具,情况并非总是如此。配置和设置可能很困难。它们通常很慢,有时可能不清楚该工具到底在做什么。一些商业 DBA 工具甚至需要使用专有的脚本语言。(顺便说一句,我在 Pentium 75/64M 上运行 Oracle 8.0.5、WordPerfect 8 和 Orac 1.1.11,对于单用户实验来说,它工作得很好。)
Orac 提供了一种优雅的方式来捕获和组织许多 DBA 完成工作所需的各种脚本。它代表了拥有一堆在命令行执行的临时脚本和复杂的商业工具之间的中间地带。
当然,商业产品始终会有一席之地,您最终可能会决定购买一个。然而,从在实际环境中使用像 Orac 这样的免费工具所获得的知识,只会是一种益处。
Orac 是一个 Perl 脚本,它执行两个基本任务。它从数据库检索信息并将信息呈现给用户。几个重要的 Perl 模块被用来完成这项工作。首先,使用 DBI.pm 来建立与数据库的连接。这是一个简单的代码片段,它连接到名为 ORA1 的 Oracle 数据库,并获取构成数据库的文件列表。
#!/usr/bin/perl -w use DBI; $dbh = DBI->connect('ORA1','ADMIN','ADMINPASS','Oracle'); $sth = $dbh->prepare ("select file_name from dba_data_files"); $sth->execute; while (@row = $sth->fetchrow()) { print "File Name: @row\n"; } $sth->finish; $dbh->disconnect; exit;
当然,Orac 从文件中读取其 SQL,而不是将语句硬编码到 Perl 脚本中,但基本原理保持不变。
一旦所需的数据到手,使用 Tk 模块中的例程显示它们就相当简单了。列表 1 中的脚本与上面的脚本类似,但它没有使用简单的 print 将信息发送到标准输出,而是使用 Tk 在 X Window 系统中显示结果。图 1 显示了运行 Perl/Tk 脚本的结果。

图 1. 列表 1 的输出显示
同样,Orac 以非常灵活的方式使用 Tk。Orac 在程序启动后从文本文件加载其菜单。概括来说,Orac 在程序启动后从文本文件加载它执行的 SQL 脚本和构成程序的菜单。有没有想到这会带来什么?稍后会详细介绍。图 2 显示了 SQL 如何在 Orac 中执行。
DBA 面临许多常见任务,例如用户管理、数据库性能,当然还有实际的数据库文件。我们将看看最后一项,数据库文件管理,以展示如何使用 Orac 来简化这项任务。
对 Oracle 存储概念的完整解释超出了本文的范围。简而言之,数据库由表空间组成,表空间可以包含多个数据文件。一个表空间由 1 到 n 个数据文件组成。每个数据文件都包含表、视图、存储过程等的实际数据库信息。通常,数据被隔离,以便系统相关信息存储在与应用程序相关数据不同的表空间/数据文件中。由于数据文件的大小在数据库创建时是固定的,因此 DBA 必须监控可用空间,并在数据文件耗尽空间之前添加或扩展它们。顺便说一句,较新版本的 Oracle 具有更复杂的空间管理技术,可以缓解其中一些问题。
图 3 显示了数据库中表空间的列表以及剩余的可用空间。Orac 汇总了每个表空间的总空间。换句话说,如果一个表空间由三个数据文件组成,则显示这三个文件中的总可用空间。这引出了 Orac 的另一个伟大功能。每个报告都包含一个名为“查看 SQL”的按钮,该按钮显示为生成报告而运行的确切查询。如果对报告的生成方式有任何疑问,您可以快速找到实际的源代码并进行所需的改进或更正。
如前所述,Orac 在启动时从文本文件加载 SQL 及其用户界面。Orac 完全能够为 Oracle 以外的数据库加载用户界面和相关的 SQL。事实上,开发人员正在努力开发 Informix,并且还为 Sybase 完成了一些工作。Orac 团队非常希望看到未来支持更多数据库,例如 MySQL、mSQL 和 PostgreSQL,并且我们正在积极寻找志愿者来提供帮助。
开发人员正在努力的另一个领域是 dbish(数据库接口 shell)。该模块为用户提供了一种将即席 SQL 输入到数据库的方法。初始模块已经编码完成,目前正在测试中。当您阅读本文时,大多数错误可能已被修复。
虽然 Orac 的部分功能使用 Tk 来绘制一些原始图表,但肯定还有改进的空间。在不久的将来,Orac 将利用 GD 和 GIFgraph Perl 模块中的功能来提供更好的图表和图形功能。
这些只是正在进行工作的一些领域。Orac 团队正在积极征求任何想要使 Orac 成为更好程序的任何人的反馈。
