文章
| DBA:可管理性 跟踪文件管理器:利用 Oracle 和 PHP 管理分布式跟踪文件 本工具结合了 PHP 的强大功能与 PL/SQL 的易用性,可在浏览器中管理分布式跟踪文件。
如果您是一位 DBA 或开发人员,使用支持 Oracle 的工具,则您几乎肯定会在某些时候跟踪活动的数据库会话,通常是为了寻找不正常运行的 SQL 或者某些其他不当编程。 启动跟踪很简单,并且可以使用标准 dbms_system.set_sql_trace_in_session 调用说明或者通过调用“更深入”的跟踪实用程序 dbms_support.start_trace_in_session(它还可检测绑定变量值和等待事件)将其应用到会话中。 但是,有时候对所生成跟踪文件的访问多少有些困难;您必须确保您可以访问数据库所在服务器上的 USER_DUMP_DIRECTORY。当数据库连接普遍基于客户端时,该数据库服务器可能并不总是可访问的。如果还要执行 TKPROF 指令将原始跟踪文件变得更具可读性,则一般需要具有从命令行访问数据库服务器的权限。如果 DBA 需要为多个不同服务器上的多个不同数据库提供支持,则访问所生成的跟踪文件以及使用 TKPROF 对这些文件进行格式化的工作就变得更困难了。 在本文中,我将说明一种此问题的解决方案,即我自己开发的跟踪文件管理器 (TFM)。使用 Oracle 服务器中提供的外部调用接口启动 TKPROF 命令,并使用 UTL_FILE 实用程序读入操作系统中的文件,可以非常容易地将您的跟踪文件数据返回到最初生成这些信息的数据库中。 使用一个简单的 PHP 前端对生成跟踪数据的一个或所有数据库执行 OCI 调用,您可以轻松地检索跟踪文件并执行 TKPROF 命令,而无需直接连接数据库所在的服务器。 虽然该实用程序是针对我们的本地环境开发的,但它写得比较通用,可以轻松地部署到任何 Windows 或 Unix/Linux 环境中。我们已经在使用 Oracle 9.2.0.4 的 Windows NT/Windows 2000 环境上以及在使用 Oracle 10.1.0.2 的 Red Hat Enterprise Linux 3 环境上成功部署了该实用程序。 用途 该 TFM 实用程序具有三个核心功能:
有关完整的部署说明,请参见 TFMdeployment.zip 中的源代码。它包含所有必要的 PHP、PL/SQL、Java 源代码以及此处所需的授权和环境设置;它还包含一个内容丰富的自述文件 Readme.txt。 安全性 虽然该实用程序主要旨在显示分布式跟踪文件,但它还提供了删除不必要文件的功能,这意味着至少应该提供基本的访问控制。 因此我们选择了基于 HTTP 服务器的简单访问保护。(请参见此 Apache 教程。)此方法包括一个 .htpasswd 文件以及一个指向该文件的 .htaccess 文件,用以执行所有必要的限制。 为防止数据包嗅探,还可以使用 HTTPS 或登录组件(用于审计追踪等)对安装进行更好的保护。但是,就当前实用程序所部署的环境而言,基于 HTTP 服务器的简单保护已经足够了。 我还建议您禁用对 user.conf 所在目录的目录浏览,可能还要对其进行一定程度的操作系统级保护。 工作流 该实用程序的主页是目标屏幕。(请参见图 1。)该屏幕包含一个数据库列表,您已经在这些数据库上部署了 TFDADMIN(请参见“部署”部分)帐户并装载了相关对象。
该屏幕允许您选择查看警报文件、后台跟踪文件或用户跟踪文件。如果您选择“Show Background Trace Files”,将为您提供 BACKGROUND_DUMP_DEST 参数中所指定目录的内容列表。该列表中不显示警报日志。(请参见图 2。)
如果您选择“Show User Trace Files”,将为您提供 USER_DUMP_DEST 参数中所指定目录的内容列表。(请参见图 3。)
在本屏幕中您会看到,每个 .trc 文件都有两个选项:SRT 和 TKP。SRT 选项的意思是“显示原始跟踪文件”,它将为您检索该文件的内容,并在浏览器屏幕上显示其内容。(请参见图 4。)
在输入所需的 TKPROF 参数后(或者使用默认参数),该实用程序将会生成并发出一条命令行指令,在数据库所在的服务器上运行 tkprof。然后它将为您重新显示用户跟踪文件屏幕,并将新的 .prf 与其父级 .trc 文件对齐显示。(请参见图 6。)
此后您还可以使用另一个选项 SFT,其含义是“显示格式化的跟踪文件”。该屏幕将为您显示使用 TKPROF 后的格式化内容。(请参见图 7。)
您在图 6 中还会看到删除任意文件或所有文件的选项。如果选择此选项,则会看到下一步的“Are You Sure?”屏幕,其中显示所选择的文件并提供确认或取消选项。在选择 Confirm 后,将会为您显示前一屏幕,并显示剩下的文件。格式化的跟踪文件与其父级原始跟踪文件一起被删除。该删除功能在 SFT 屏幕上的使用方法与此相同。 如果在目标屏幕(图 1)上选择了“Show Alert File”,将为您显示当前警报文件的内容。(请参见图 8。)
在该屏幕左上方的一个附加选项是“Archive this file”。如果您选择此选项,则当前警报文件的全部内容被复制到一个备份文件中,并生成一个新的空警报文件。(请参见图 9。)
如果查看“后台跟踪文件”屏幕(图 2),您会看到一个已经存档的警报文件,名为 0040527144418_alert_berlindev01.log。这种“存档警报文件”功能对您可能有用,也可能没有用(取决于您愿意使警报日志保持何种清洁程度)。 从列表中选择 Oracle.DataAccess.dll,然后单击 Select 按钮,最后单击 OK 按钮,使您的项目识别 ODP.NET 数据提供程序。 限制条件 本实用程序假定远程数据库具有对参数 USER_DUMP_DEST 和 BACKGROUND_DUMP_DEST 中所指定目录的读取访问权限。它还需要在 init.ora 中将这两个目录指定为 UTL_FILE 指令。如果您的环境无法保证这两个条件,则需要找到一种替代方法将跟踪文件数据读入数据库中。 由于该实用程序使用数据库本身作为读取远程服务器上的跟踪文件并集中提供数据服务的传输机制,因此远程数据库必须处于活动状态 也就是说,该实用程序不能为您显示那些由于崩溃或其他原因而停止的数据库的跟踪文件。 结论 开发 TFM 的主要原因之一是 Oracle 数据库(既包括产品版也包括开发/测试版)的广泛采用,从而要求我们在 Skandia 的团队来支持这些数据库。会话跟踪实用程序可以通过 SQL*Plus 从远程非常方便地应用于任何会话,但是随后对所产生跟踪文件的查看至少需要对数据库所在服务器的磁盘映射。如果要管理 10 或 15 个数据库,这种方法就变得繁杂了。当我们希望对跟踪文件执行 TKPROF 时甚至变得更加困难,这是因为这时通常需要具有相应服务器的命令行访问权限。 如果结合 PL/SQL 的易用性和 PHP 的强大功能,则很容易访问 Oracle 数据库并在浏览器中提供检索到的数据。这种功能使您有可能构建一个中央“命令站点”,通过它提供和控制您所有的分布式跟踪信息。通过利用 PHP 和 Oracle 的功能,我们已经能够装配一个有趣的、节省劳力的小工具,这对 DBA 和开发人员都有好处。 Paul Gallagher ( pgallagher@skandia.de) 是一位独立的 Oracle DBA/顾问,目前在德国柏林的 Skandia Versicherungs AG 工作。作者感谢同在 Skandia 工作的 Karsten Gresch 为开发本工具而作出的贡献。
|