ORA-01461 / BLOB / 休眠
Posted
技术标签:
【中文标题】ORA-01461 / BLOB / 休眠【英文标题】:ORA-01461 / BLOB / Hibernate 【发布时间】:2013-03-14 17:17:00 【问题描述】:我有一个 Oracle Database 10.2.0.4 实例。
我有基于 spring 框架 3.0.5、hibernate 3.5.6 的 java 应用程序。
我有一个带有 BLOB 列 (blobContent BLOB
) 的表和一个带有 java.sql.Blob
字段的实体(在休眠 XML 映射中映射为 <property name="blobContent" type="blob"/>
)。
我使用 Oracle10gDialect。
我得到 ORA-01461 定期尝试在此表中插入行。
我尝试了几个 Oracle JDBC 驱动程序(10.2.0.4、10.2.0.5 和 11.2.0.3),但都没有成功。
我在谷歌上搜索和搜索这个问题的金属链接数据库失败了。
我反编译了 Oracle JDBC 驱动程序并检查了从方法 oracle.jdbc.driver.OraclePreparedStatement.setBinaryStream(int, InputStream, long)
到 oracle.jdbc.driver.DBConversion
直到 oracle.jdbc.driver.OracleConversionInputStream
的代码。
就这段代码而言,一切看起来都还可以:)
请告知如何跟踪此问题...可能在 Oracle 方面(?)...可能正在寻找一些隐式转换... 我可能错过了一些关于这个问题的已知 Oracle metalink 文章吗?
【问题讨论】:
您是否尝试通过INSERT
语句插入 LOB?
是否有理由不使用字节数组来映射 blob 内容?
@Rachcha 是的,我正在尝试插入 BLOB。但是一些偶尔的插入语句会因 ORA-01461 而失败。看起来 Oracle 或 Oracle JDBC 驱动程序有时决定将参数值处理为 Oracle LONG 类型。我无法理解它为什么以及在什么情况下会进行这种转换。由于某些情况,我很难在测试环境中重现此问题。这就是我在这里向专家提问的原因。
@SamiKorhonen,是的,当然,有一个重要原因:blob 内容的大小可以很小,也可以很大,甚至可以很大。新的 jdbc API 添加方法 setBinaryStream(int, InputStream, long) 以支持超过 2Gb 的内容大小。解析这个方法代码,我发现处理流有三个分支:大小超过 1g,超过一些物理连接参数和其他使用字节数组时小 blob 的情况。内存消耗非常关键和重要。
也许这个答案可以帮助你:***.com/questions/9156019/…
【参考方案1】:
我认为跟随 oracle 错误是我的错误的主要原因。升级数据库后,我将再次检查问题并接受我自己的答案。我希望它对其他人有用。
顺便说一下,我们的平台也是 AIX/64x。
Oracle 错误 9018715“没有长列类型的更新和插入中出现间歇性 ORA-1461”
B 型 - 缺陷
在产品版本 11.1.0.7.0 中已修复
2 级严重性 - 服务严重中断
产品版本 10.2.0.4.0
状态 93 - 已关闭,未由 Filer 验证
平台 212 - POWER 系统上的 IBM AIX(64 位)
创建于 2009 年 10 月 14 日
平台版本 5.3
201 年 12 月 27 日更新
基本错误不适用
数据库版本 10.2.0.4.0
影响平台通用
产品来源甲骨文
问题:
ORA-1461: 只能绑定 LONG 值以插入 LONG 列 在客户端应用程序中经常收到。
该错误出现在插入和更新语句中,以及不同的表中。 语句属于这种类型: 插入列 (, , ,..) 值(:1,:2,:3,...:n); 或者 更新集 = :1, = :2, = :3,.. = :n 其中 =:m; 并且没有一列是 lONG 类型的。
诊断分析:
将 rdbms 从 10.2.0.3 升级到后开始出现错误 10.2.0.4。 它经常发生,并且在不同的表上。一旦错误出现 发生,重新执行相同的sql通常会成功。
数据库字符集:WE8ISO8859P15。 Windows 客户端。 NLS 设置:NLS_LANG=American_America.WE8ISO8859P15。
应用程序通过 Jdbc 瘦驱动程序版本 10.2.0.1 连接。 使用 jdbc 驱动程序版本 10.1.0.5 进行的测试也失败了。
【讨论】:
我有相同的 Oracle 版本和相同的问题。感谢您发布此答案。以上是关于ORA-01461 / BLOB / 休眠的主要内容,如果未能解决你的问题,请参考以下文章
ORA-01461 带有 MERGE INTO 语句和 clob 列
oracle: sql语句报ora-01461/ora-00911错误
这两个不同的 ORA 错误(ORA-12899 和 ORA-01461)如何链接在一起