无论您为应用程序部署了何种日志框架,例如 Log4j、java.util.logging、SLF4j 等,以下解决方案都有效:
-
获取已在启用跟踪代码的情况下编译的相应 Oracle JDBC 驱动程序(以“_g.jar”结尾)。只要 Oracle JDBC 驱动程序的 主要 版本与底层数据库匹配,最好在输出时获取 最新的次要版本(在我们的例子中为 11.2.0.4.0)每次通话的附加信息。
最新的诊断驱动程序将与旧版本的 Oracle 数据库兼容。您可以从Oracle's website here获取它们。
如果您使用 WebSphere 变量(即Oracle JDBC Driver)来指定 Oracle JDBC 驱动程序的位置,请将诊断 JDBC 驱动程序与常规驱动程序位于同一文件夹中(以便于跟踪)。尽管如此,您可以将它放在文件系统上的任何位置。
确保启动服务器的 WebSphere 用户具有访问驱动程序的适当文件系统权限,即 ojdbc6_g.jar。
-
在 WebSphere Admin Console 中,更改 JDBC 提供程序以指向新的驱动程序:
- 展开资源
- 展开JDBC
- 选择 JDBC 提供程序
- 选择“Oracle JDBC 驱动程序”(或服务器上已命名的任何 Java 数据库连接提供程序)
- 将“类路径”从“${ORACLE_JDBC_DRIVER_PATH}/ojdbc6.jar”更改为“${ORACLE_JDBC_DRIVER_PATH}/ojdbc6_g.jar >"
- 点击应用
-
设置跟踪日志级别:
- 展开服务器
- 展开服务器类型
- 点击WebSphere应用服务器
- 选择目标服务器
- 向下滚动到“疑难解答”子部分
- 选择“更改日志详细级别”
- 切换到运行时标签
- 将组件从“*=info”更改为“*=info: oracle.jdbc.*=all”(不带双引号)
- 点击应用
- 请注意,日志记录级别可以在运行时更改,即您可以提供“fine”、“finer”而不是“all” ”或“最佳”。每个logging level entails to is here的列表。
-
找到服务器日志文件夹:
- 重复 5a 到 5e
- 选择“记录和跟踪”
- 选择“诊断跟踪”
- 在“General Properties/Trace Output”部分下,File Name 应提供跟踪文件的名称(默认为 ${SERVER_LOG_ROOT}/trace.log) .请注意,跟踪日志文件可能会根据大小或日期处于滚动/旋转模式
重启 WebSphere 服务器
执行调用 PL/SQL 函数调用的代码
WebSphere 现在应该在trace.log 文件中捕获所有详细JDBC 调用,即使用三个参数和值parameter 1 调用schema_user.plsql_package.procedure(), parameter 2 和 parameter 3 将导致({call ...} 是我从 Spring 的 JdbcTemplate* 调用存储过程的方式,但您可以在低级别看到 Oracle驱动程序将其转换为 PL/SQL 匿名块调用):
...
[1/20/15 10:22:14:431 EDT] 00000020 driver Z 263D263D Enter: 1, "parameter 1", 2
[1/20/15 10:22:14:431 EDT] 00000020 driver 1 263D263D Public Enter: 1, "parameter 1"
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 1, "parameter 1", 2
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 1, "parameter 1", 2, 0
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 1, "parameter 1", 2, 0
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 1, oracle.sql.NUMBER@42764276
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.0409ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.1926ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.2515ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.3107ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver 1 263D263D Exit [0.4817ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver Z 263D263D Exit [0.5556ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver Z 263D263D Enter: 2, "parameter 2"
[1/20/15 10:22:14:431 EDT] 00000020 driver 1 263D263D Public Enter: 2, "parameter 2"
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 2, "parameter 2"
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 2, "parameter 2"
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.0049ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.0691ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver 1 263D263D Exit [0.1276ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver Z 263D263D Exit [0.2008ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver Z 263D263D Enter: 3, "parameter 3"
[1/20/15 10:22:14:431 EDT] 00000020 driver 1 263D263D Public Enter: 3, "parameter 3"
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 3, "parameter 3"
[1/20/15 10:22:14:431 EDT] 00000020 driver 2 263D263D Enter: 3, "parameter 3"
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.0036ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver < 263D263D Exit [0.0549ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver 1 263D263D Exit [0.1094ms]
[1/20/15 10:22:14:431 EDT] 00000020 driver Z 263D263D Exit [0.161ms]
...
[1/20/15 10:22:14:433 EDT] 00000020 driver 2 32B732B7 Enter: "
{call schema_user.plsql_package.procedure(
param_1 => :param_1,
param_2 => :param_2,
param_3 => :param_3)}"
...
[1/20/15 10:22:14:434 EDT] 00000020 driver 2 32B732B7 Return:
BEGIN schema_user.plsql_package.procedure(
param_1 => :param_1,
param_2 => :param_2,
param_3 => :param_3); END;
...
Oracle JDBC 驱动程序对应用程序进行的存储过程调用执行缓存。因此,在第一次调用之后,日志文件并没有像第一次尝试那样捕获所有需要的信息——捕获信息的范围不会像第一次调用那样全面。此外,跟踪记录足够详细,可能会使解析感兴趣的部分变得笨拙。
因此,为了在第一次调用后清除驱动程序的缓存存储过程调用,请按照以下说明进行操作:
登录 WebSphere Admin Console(集成解决方案控制台)
导航到资源 -> JDBC -> 数据源
选中处理过程调用的适当数据源框(如果有任何不同)
点击网格表顶部的“管理状态...”按钮
在“JCA 生命周期管理”页面上,选中同一资源
点击“清除”按钮
另外,如果您在 Windows 环境中运行/测试您的 WebSphere,您可以使用 SnakeTail 工具到 tail(如 Unix/ Linux 系统)trace.log 文件(非常快且响应速度快,缓冲区大小较大)。