(本文档仅供参考)有时候
使用场景:
1、数据库报错往往会影响真实问题原因的分析,所以为了排查一些看似和smartbi相关但实际又是数据库jdbc驱动抛出的异常问题,可以通过java代码直接调用jdbc接口实现相关查询看是否正常,从而对比smartbi的逻辑是否有误。另外有时候报表加载慢,根据提供的CPU,定位是数据库那边执行了SQL后返回结果慢,但是将一样的SQL放到数据库中,返回结果并不需要很长时间,此时也可以测试通过Java调用jdbc驱动执行SQL,看执行SQL所需要的时间。接口实现相关查询看是否正常,从而对比smartbi的逻辑是否有误;
2、打开smartbi报表加载慢,根据提供的CPU采样,定位是数据库那边执行了SQL后返回结果慢,但是将一样的SQL放到数据库工具(不一定基于jdbc)中执行,返回结果并不需要很长时间,此时也可以测试通过Java调用jdbc驱动执行SQL,对比通过加载当前驱动执行SQL所花费的时间;
3、打开smartbi报表查询的数据和直接在数据库工具(不一定基于jdbc)中查询的结果不一致,此时也可以测试通过Java调用jdbc驱动执行SQL,对比通过加载当前驱动执行SQL查询的数据是否和smartbi报表展示的一致。
操作步骤:
1、检查数据库驱动位置,如果驱动是war自带的,则跳过此步骤,如果是额外添加的数据库动态驱动jar,需要将数据库驱动放在..smartbi/WEB-INF/lib目录下再重启。
...
如果是额外添加的数据库动态驱动jar,需要找到jar的绝对路径,注意如果是docker部署的,其jar路径不是通过linux ssh工具展示的绝对路径。
如下图是exe安装版本的添加的一个mysql动态驱动jar路径:
此时记下路径:D:\Smartbi\SmartbiInsight\Tomcat\bin\dynamicLibraryPath\mysql
如下图是docker环境下部署添加的一个动态驱动,需要加载的jar在图中的HADOOP_HIVE目录:
此时需要记下路径:/tomcat/smartbiconfig/dynamicLibraryPath/HADOOP_HIVE
其中开头的/tomcat是docker路径下 Tomcat的根目录。
2、下载testjdbcdata.jsp,并将testjdbcdata.jsp文件放到vision文件夹下,不需要重启。文件夹下,不需要重启应用服务器。
(若是测试存储过程查询,下载testjdbcPro.jsp),暂不支持Oracle等带出参的存储过程)
3、访问页面执行数据库语句3、浏览器
执行SQL查询
浏览器访问 http://IP:PORT/smartbi/vision/testjdbcdata.jsp,在页面上填写待测试的数据库信息,其中查询SQL可选填。
注:IP和PORT需根据实际地址进行修改。
...
jsp,在页面上填写待测试的数据库信息,其中查询SQL可选填,显示查询结果可选勾。
注:(1)IP和PORT需根据实际地址进行修改。
(2)勾选显示查询结果会查询出对应的结果集,由于是直接与数据库进行交互,请尽可能减少数据量。
如果是动态驱动则需要设置驱动类目录,将步骤1 的路径填入到驱动类目录右边输入框:
执行存储过程查询
若为存储过程查询,浏览器访问地址修改为http://ip:port/smartbi/vision/testjdbcPro.jsp,其中“查询存储过程”根据实际进行填写即可。,其中“查询存储过程”根据实际进行填写即可,驱动类目录填写规则同上。
4、点击提交按钮,查看返回结果。
如果查询SQL勾选显示结果集,显示效果如下图: 如果查询SQL勾选了显示结果集,在数据库连接正常且查询不报错时,显示效果如下图:
如果查询SQL不填内容就提交,则jsp页面只执行创建连接和关闭连接测试,其他项的耗时会显示未执行。 如果查询SQL不填内容就提交,则jsp页面只执行创建连接和关闭连接测试,测试结果只有创建连接耗时会显示时间,除了查询SQL显示空字符串外,其他项一般显示未执行。
在数据库连接正常且查询不报错并且不勾选显示查询结果时,网页的提交按钮下方可以看到类似如下的结果:
如果创建连接或者执行sql报错,或者是驱动类目录填写有误,则错误信息后会显示一部分错误原因:
如果创建连接或者执行sql报错,则错误信息后会显示一部分错误原因。
在服务器最新的smartbi.log中,可以看到如下日志:
如果存储过程有返回多个结果集,查询结果会分别显示各个结果集的信息:
如果在smartbi查询报错,但是在数据库中查询没问题,若通过此方式仍会报错,则需排查驱动的问题。若通过此方式可正常查询,可将结果截图发回,再进一步跟踪此问题;
...