AX 2012 R2数据库同步异常:删SQL列后仍报“Invalid column name”错误
AX 2012 AOT与SQL数据库精准同步问题解决步骤
核心问题根因
直接在SQL Server中删除列X,但AX的AOT元数据仍保留该列定义,导致AX运行时仍尝试访问该列引发报错。必须保证AOT元数据与SQL对象双向一致,不能仅修改其中一端。
分步解决方法
彻底移除AOT中的列X
打开AX客户端的AOT,定位到Data Dictionary > Tables > LedgerParameters > Fields节点,找到列X,右键选择Delete并保存AOT更改。这是解决问题的基础,只有AOT元数据移除后,同步操作才能正确更新SQL对象。执行强制全量同步
进入System administration > Common > Database > Synchronize database,勾选以下选项后执行同步:Synchronize all:同步所有表的元数据Force synchronization:强制AX用AOT元数据覆盖SQL中的对象,忽略增量差异判断
清理全链路缓存
- 客户端缓存:关闭AX客户端,删除路径
C:\Users\<你的用户名>\AppData\Local\Microsoft\Dynamics AX\6.0\下的所有缓存文件夹。 - AOS服务器缓存:在AOS服务器的命令提示符中,切换到AOS安装目录(默认
C:\Program Files\Microsoft Dynamics AX\60\Server\<AOS实例名>\bin\),执行命令:axutil clearcache,完成后重启AOS服务。
- 客户端缓存:关闭AX客户端,删除路径
重新生成完整CIL与全量编译
- 全量编译:在AOT中右键点击
Projects节点,选择Compile all,确保无编译错误。 - 完整CIL生成:进入
System administration > Setup > Services and Application Integration Framework > Inbound ports,点击Generate CIL,选择Full CIL generation,等待生成完成。
- 全量编译:在AOT中右键点击
验证一致性
在SQL Server中执行以下查询,确认LedgerParameters表中已无列X:SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('LedgerParameters') AND name = 'X'若查询无结果,再通过AX表浏览器打开LedgerParameters表验证是否正常。
排查引用残留
检查是否有自定义代码、表单、报表或扩展引用了列X:- 在AOT中使用
Find功能(快捷键Ctrl+F)搜索列X的名称,定位所有引用位置并修改/移除。 - 检查是否有第三方ISV解决方案或自定义扩展包引用该列,需同步调整。
- 在AOT中使用
内容的提问来源于stack exchange,提问作者Devv
相关产品推荐
相关产品推荐

