1/7用友股份-LE支持服务业务本部技术方案--《NC57查询引擎报创建视图失败》建立日期:2013-07-01修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-JS-2013-00732/7文档控制创建记录适用范围审阅人日期审阅签字所属部门发布范围内部员工伙伴客户发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-7-01魏享林产品支持部V1.0版本领域模块备注3/7目录NC57查询引擎报创建视图失败.................................................................................4一、系统环境................................................................................................................4二、问题描述................................................................................................................4三、检查分析................................................................................................................4(一)查看后台日志,发现在访问系统视图,判断视图是否存在时,取数据库类型不正确.......................................................................................4(二)NC中取数据库类型的两种机制............................................................5(三)修改代码,在取得数据库类型失败时,不往缓存中添加该数据源对应的信息....................................................................................................6(四)用jsp文件清空MetaCache的内容,可以在不重启中间件情况下解决此问题........................................................................................................6四、解决方法................................................................................................................74/7NC57查询引擎报创建视图失败一、系统环境NC版本:NC57;中间件:Was水平集群;数据库:Oracle;操作系统:Windows二、问题描述在系统中进行查询引擎报表,提示“缺失关键字”等错误,某些端口有问题,有些端口正常。三、检查分析(一)查看后台日志,发现在访问系统视图,判断视图是否存在时,取数据库类型不正确可以看出,程序误认为当前数据库是SQLServer。5/7(二)NC中取数据库类型的两种机制大部分的代码都是从连接中取得数据库元数据,再从元数据取得数据库类型,这种处理方式是安全的,不会出问题。个别代码取数据库连接时,会直接从缓存中去取。如果创建缓存时,数据库未启动或有故障,导致取得的数据库类型不正确,这样缓存中记录的数据库类型就是不正确的。6/7(三)修改代码,在取得数据库类型失败时,不往缓存中添加该数据源对应的信息(四)用jsp文件清空MetaCache的内容,可以在不重启中间件情况下解决此问题如果用户希望在不重启中间件下解决此问题,可以通过一个jsp清空MetaCache中的内容来解决,这样下次要访问MetaCache时,会再次从数据库查询。7/7四、解决方法修改代码,在向MetaCache中添加记录时,增加对数据库类型是否有效的健壮性判断。或者运行jsp,将MetaCache中的内容清空,使用jsp,不需要重启中间件。