我们在更新表记录BLOB列时遇到了问题。我们得到了"ORA-03146: TTC字段的无效缓冲区长度“错误。我们基本上是在保存数据库的PDF附件。问题发生在从Oracle 12.0.1.2升级到19c (19.3.0.0)之后,现在出现了更大规模的错误。我们有一个.Net应用程序,通过ODP.NET (Oracle.DataAccess)连接到Oracle,并使用NHibernate。我们使用DBUA完成了从Oracle 12.1.0.2到Oracle 19.3.0.0的升级,DB服务器在Windows 2012平台上。
该错误发生在执行命令:{OpsSqlPrepare2(): SQL: UPDATE SIRIUS.Attachment SET Request = :p0, LOANREQUEST = :p1, ARCHIVE = :p2, FILENAME = :p3, FILESIZE = :p4, BINARYCONTENT = :p5, ATTACHMENTTABLE = :p6, ATTACHMENTTYPE = :p7, NOTE = :p8, MIMETYPE = :p9, CUSTOMID = :p10, ISEXTERNAL = :p11, ISSEND = :p12, DocumentNameDial = :p13, DOCUMENTENUMTYPE = :p14, AttachmentTypeDial = :p15 WHERE ID = :p16}
之后
BINARYCONTENT
是一个BLOB列。
错误与我们拥有的两个环境不同:
Oracle 19c/Oracle client 19c - ORA-03146: TTC字段的无效缓冲区长度
Oracle 19c/Oracle客户端12 - ORA-03138:由于违反安全策略而终止连接
发布于 2021-01-14 14:52:09
JDBC应用程序在ORA-03146中失败:数据库升级到19c后,TTC字段的缓冲区长度无效(Doc 2729562.1)
将12c数据库更新为19.6可能会导致这一问题。在这种情况下,数据库从12.1.0.2升级。ORA-3137 三一六是一个协议异常,这意味着数据库没有为长绑定使用用户缓冲区中的所有数据。此问题在Bug:30955880 - ORA-3137 三一六 / ORA-3137 三一六更新LOB中讨论,该大BIND作为未发布的Bug 31625618 - DML的副本在LOB列上使用LONG BIND失败,当绑定大小>256 K字节时,将出现ORA-3137 三一六错误。
然后:
当绑定长度>256 k字节时,在LOB列上执行DML的客户机(JDBC/OCI)间歇性地失败,当绑定长度>256 k字节: ORA-03137:来自客户端拒绝的格式错误的TTC数据包:三一六 ORA-03137:来自客户端拒绝的格式错误的TTC数据包:三一六 ORA-03146: TTC字段的无效缓冲区长度。
我引用这个部分是为了强调这个问题并不是JDBC特有的。
修正了Bug 31625618作为19c版本的一次性补丁存在于19.10以下。
这个错误在数据库版本19.10中得到了修复,该版本将于下周发布。
目前你在19.3。应用必要的修补程序。
https://dba.stackexchange.com/questions/283236
复制相似问题