我们通过Oracle JDBC驱动程序(11.2)(使用Spring JDBCTemplate*框架)进行PL/SQL函数调用,并且我们在WebSphere服务器的日志记录详细信息(运行时)中设置了com.ibm.ws.rsadapter.JDBC.*=all,但是CCD_ 1文件中捕获的数据不包含实际翻译的PL/SQL函数调用,也不包含传递给该函数的参数的值。
如何实现此日志记录详细信息?我们也在使用SLF4j库进行日志记录。
无论您为应用程序部署了什么日志框架,即Log4j、 获得一个相应的Oracle JDBC驱动程序,该驱动程序已在启用跟踪代码的情况下编译(以"_g.jar">结尾)。只要Oracle JDBC驱动程序的主版本与底层数据库的版本匹配,最好获得最新的次版本(在我们的案例中,为11.2.0.4.0),因为它为每次调用输出附加信息。 最新的诊断驱动程序将与Oracle数据库的旧版本兼容。您可以从Oracle的网站获取它们。 如果您使用WebSphere变量(即 确保启动服务器的WebSphere用户具有访问驱动程序的适当文件系统权限,即ojdbc6-g.jar. 在WebSphere管理控制台中,更改JDBC提供程序以指向新的驱动程序: 设置跟踪日志记录级别: 找到服务器日志记录文件夹: 重新启动WebSphere服务器 执行调用PL/SQL函数调用的代码 WebSphere现在应该捕获 Oracle JDBC驱动程序确实对应用程序进行的存储过程调用执行缓存。因此,在第一次调用之后,日志文件并没有像第一次尝试时那样捕获所有需要的信息——捕获的信息的范围不会像第一次调用那样全面。此外,跟踪日志记录足够详细,可能会使解析感兴趣的部分变得笨拙。 因此,为了在第一次调用后清除驱动程序缓存的存储过程调用,请按照以下说明进行操作: 登录WebSphere管理控制台(集成解决方案控制台) 导航到资源->JDBC>数据源 如果有任何不同的,请检查处理过程调用的适当数据源框 单击网格表顶部的">管理状态…"按钮 在">JCA生命周期管理"页面上,选中相同资源 点击">清除"按钮 此外,如果您在Windows环境中运行/测试WebSphere,则可以使用SnakeTail工具对java.util.logging
、SLF4jOracle JDBC Driver
)来指定Oracle JDBC驱动程序的位置,请将诊断JDBCtrace.log
文件中JDBC调用的所有细节,即使用parameter 1
、parameter 2
和parameter 3
这三个参数和值调用schema_user.plsql_package.procedure()
,这将导致({call ...}
是我从Spring的trace.log
0调用存储过程的方式,但您可以看到,在底层,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;
...
tail
(类似于Unix/Linux系统)trace.log
文件(速度快,响应快,缓冲区大)进行测试。