Progress数据库报Field字段缺失FIELDS短语错误(仅Citrix复现)求助
Progress 错误码8826 触发原因排查
报错原文:Field
from record (recid ) was missing from FIELDS phrase.
适用版本:Progress 11.4 / 11.7
复现场景:仅Citrix终端服务器环境可复现,本地连接同远程数据库无异常,动态查询未配置fields/except语句,报错记录字段填充正常,仅部分记录触发
可能触发原因
- Citrix环境Progress客户端字符集与数据库、本地环境配置不匹配
当Citrix客户端字符集与数据库端字符集不一致时,含特殊字符(非ASCII字符、生僻符号)的字段元数据会被客户端解析失败,动态查询默认拉取全字段时会判定该字段未被包含,触发8826报错。可对比本地与Citrix环境的Progress客户端*conv字符集配置参数是否一致。 - Citrix运行账号存在字段级访问权限限制
若Citrix环境下程序运行使用的数据库账号和本地测试账号权限不同,存在字段级权限拦截或RLS(行级安全)限制,部分字段对该账号不可见,动态查询遍历全字段时会判定字段缺失。可对比两个环境使用的数据库账号权限配置。 - Citrix客户端schema缓存与远程数据库结构不一致
若查询涉及的表近期有字段变更,Citrix环境的客户端schema缓存未同步更新,新增字段未被加载到本地缓存,触发报错的记录刚好用到了未同步的字段。可在Citrix环境的数据库连接语句中添加-noSchemaCache参数禁用缓存后重试。 - Citrix会话资源限制导致元数据加载不全
若Citrix对单会话分配的内存上限较低,大表的全量字段元数据无法完整加载,动态查询触发到未加载的字段时就会报错。可通过显式在查询的FIELDS短语中列出所有需要用到的字段临时验证,若显式指定后不再报错即可确认是该问题,该类边界问题已在Progress 12.x版本中修复,可考虑升级版本解决。
内容的提问来源于stack exchange,提问作者JulesVerne
相关产品推荐
相关产品推荐

