varchar2_to_blob,应用向数据库更新LOB字段时的超时问题
将字符串转换为BLOB类型数据,写入服务器。
1,首先利用to_clob函数把varchar2字段转成 clob字段。
2 利用c2b上面函数将clob转成blob。
即: c2b(to_clob(varchar2字段))
CREATE OR REPLACE FUNCTION C2B (b IN CLOB default empty_clob())
RETURN BLOB
-- typecasts BLOB to CLOB (binary conversion)
IS
res BLOB;
b_len number := dbms_lob.getlength(b) ;
dest_offset1 NUMBER := 1;
src_offset1 NUMBER := 1;
amount_c INTEGER := DBMS_LOB.lobmaxsize;
blob_csid NUMBER := DBMS_LOB.default_csid;
lang_ctx INTEGER := DBMS_LOB.default_lang_ctx;
warning INTEGER;
BEGIN if b_len > 0 then
DBMS_LOB.createtemporary (res, TRUE);
DBMS_LOB.OPEN (res, DBMS_LOB.lob_readwrite);
DBMS_LOB.convertToBlob (res,
b,
amount_c,
dest_offset1,
src_offset1,
blob_csid,
lang_ctx,
warning
);
else
select empty_blob() into res from dual ;
end if ;
RETURN res; -- res is OPEN here
END C2B;
示例:
declare bb blob;
begin
bb := c2b(to_clob('abc'));
dbms_output.put_line(dbms_lob.getlength(bb)); insert into tkk0308
values(2, bb); commit;
end;
OK!
问题背景:
一个元数据更新保存功能,经常性的处于卡死状态,有时会出现进一步阻塞其他功能的SQL执行(从数据库端查询阻塞信息时能够确认)。
在应用服务器上抓取dump,确实能够看到应用一直在向数据库写一个lob字段,但是按照常理来说,网络传输应该是很短暂的。
验证方法:
1、在应用服务器上使用sqlplus直接更新一个LOB字段(从应用服务器传输内容),或使简单的控制台程序向数据库更新一个LOB,验证响应时间。
2、让应用服务器绕过防护墙,通过核心交换机直连数据库服务器,做差异对比。
结合应用服务器的dump和数据库端的会话状态、等待事件,应用和数据库间确实是在传输一个LOB字段的内容。当然,按照正常情况下网络传输时间应该很短暂。
请联系客户管理员,确认应用服务器到数据库间是否有企业级防护墙等硬件设备,检查防护墙的配置和日志是否有异常。
SQL:
|
94 |
17186 |
ACTIVE |
SQL*Net more data from client |
LC0039999 |
WORKGROUP\WIN-DIV4VRINJ9H |
w3wp.exe |
Dump 线程:
OS Thread Id: 0x3e38 (97) Child SP IP Call Site 000000000d8acc78 0000000076f9fefa [NDirectMethodFrameStandalone: 000000000d8acc78] System.Data.Common.UnsafeNativeMethods.OCILobWrite(System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, UInt32 ByRef, UInt32, IntPtr, UInt32, Byte, IntPtr, IntPtr, UInt16, CHARSETFORM) 000000000d8acbf0 000007fef2b0395b DomainNeutralILStubClass.IL_STUB_PInvoke(System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, UInt32 ByRef, UInt32, IntPtr, UInt32, Byte, IntPtr, IntPtr, UInt16, CHARSETFORM)*** WARNING: Unable to verify checksum for System.Data.OracleClient.ni.dll 000000000d8acd30 000007fef2afedfb System.Data.OracleClient.TracedNativeMethods.OCILobWrite(System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, System.Data.OracleClient.OciHandle, Int32 ByRef, UInt32, IntPtr, UInt32, Byte, UInt16, CHARSETFORM) 000000000d8ace30 000007fef2b2ca45 System.Data.OracleClient.OracleLob.Write(Byte[], Int32, Int32) 000000000d8acf10 000007fef2b1c021 System.Data.OracleClient.OracleParameterBinding.CreateTemporaryLobForValue(System.Data.OracleClient.OracleConnection, System.Data.OracleClient.OracleType, System.Object) 000000000d8acf60 000007fef2b1cb67 System.Data.OracleClient.OracleParameterBinding.PrepareForBind(System.Data.OracleClient.OracleConnection, Int32 ByRef) 000000000d8acfd0 000007fef2b0e1b0 System.Data.OracleClient.OracleCommand.Execute(System.Data.OracleClient.OciStatementHandle, System.Data.CommandBehavior, Boolean, System.Data.OracleClient.OciRowidDescriptor ByRef, System.Collections.ArrayList ByRef) 000000000d8ad0c0 000007fef2b0e7e5 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean, System.Data.OracleClient.OciRowidDescriptor ByRef) 000000000d8ad150 000007fef2b0e6fd System.Data.OracleClient.OracleCommand.ExecuteNonQuery() 000000000d8ad200 000007ff001eee35 Genersoft.Platform.Core.DataAccess.Database.ExecuteWithNoQuery(System.String, System.Data.IDbDataParameter[], Boolean)*** ERROR: Module load completed but symbols could not be loaded for Genersoft.Platform.Core.DataAccess.dll 000000000d8ad2b0 000007ff00c7dbb9 Genersoft.Platform.Core.DataAccess.Database.RunProcWithNoQuery(System.String, System.Data.IDbDataParameter[]) 000000000d8ad300 000007ff00c7d787 Genersoft.Platform.Resource.ResourceManager.DataModelManager.SaveModel(Genersoft.Platform.Resource.Metadata.DataModel.GspDataModel)*** ERROR: Module load completed but symbols could not be loaded for Genersoft.Platform.Resource.DataModelManager.dll 000000000d8ad3f0 000007ff00c7d168 Genersoft.Platform.Resource.ResourceManager.DataModelManager.SaveModelAllInfor(Genersoft.Platform.Resource.Metadata.DataModel.GspDataModel) 000000000d8ad430 000007ff00c7c120 Genersoft.Platform.Resource.ResourceManager.MetadataService.SaveAndCheckInMetadata(System.String, System.String, System.String, System.String, System.String, System.String, System.String, System.String, System.String, System.DateTime, Genersoft.Platform.Resource.Metadata.IMetadataContent, System.String)*** ERROR: Module load completed but symbols could not be loaded for Genersoft.Platform.Resource.MetadataManager.dll 000000000d8ad600 000007ff00c73dd0 Genersoft.Platform.RuntimeADP.Core.Manager.GSPBizEntityManager.SaveBizEntity(Genersoft.Platform.RuntimeADP.SPI.IBusinessEntity, Boolean, Genersoft.Platform.RuntimeADP.SPI.BizUnitAssignment, Boolean, Boolean ByRef, System.Collections.Generic.Dictionary`2<System.String,Genersoft.Platform.Resource.Metadata.DataObject.GspDataTable>)*** WARNING: Unable to verify checksum for Genersoft.Platform.RuntimeADP.Core.dll *** ERROR: Module load completed but symbols could not be loaded for Genersoft.Platform.RuntimeADP.Core.dll 000000000d8ad7b0 000007ff00b8f92a Genersoft.Platform.RuntimeADP.Core.Manager.GSPBizEntityManager.AddBizEntity(Genersoft.Platform.RuntimeADP.SPI.IBusinessEntity, Genersoft.Platform.RuntimeADP.SPI.BizUnitAssignment, Boolean ByRef) 000000000d8ad8b0 000007ff00b8f4d8 Genersoft.Platform.RuntimeADP.Core.Manager.GSPBizEntityManager.AddBizEntity(Genersoft.Platform.RuntimeADP.SPI.IBusinessEntity, Genersoft.Platform.RuntimeADP.SPI.BizUnitAssignment) 000000000d8ad8f0 000007ff00b85894 Genersoft.HR.Sys.RunTimeCore.Manager.HRSalaryRuntimeManager.SubSetSynchronization(System.String, System.String, System.String, System.Collections.Generic.List`1<Genersoft.HR.Sys.Spi.HRWriteBackFieldMapping>, System.String)*** WARNING: Unable to verify checksum for Genersoft.HR.Sys.RunTimeCore.dll *** ERROR: Module load completed but symbols could not be loaded for Genersoft.HR.Sys.RunTimeCore.dll 000000000d8adb30 000007ff00b84a4f Genersoft.HR.Sys.RunTimeCore.Manager.HRSalaryRuntimeManager.SubSetSynchronization(System.String) 000000000d8ae328 000007fef95a10b4 [DebuggerU2MCatchHandlerFrame: 000000000d8ae328] 000000000d8ae410 000007fef95a10b4 [CustomGCFrame: 000000000d8ae410] 000000000d8ae3d8 000007fef95a10b4 [GCFrame: 000000000d8ae3d8] 000000000d8ae368 000007fef95a10b4 [GCFrame: 000000000d8ae368] 000000000d8ae738 000007fef95a10b4 [HelperMethodFrame_PROTECTOBJ: 000000000d8ae738] System.RuntimeMethodHandle._InvokeMethodFast(System.IRuntimeMethodInfo, System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeType) 000000000d8ae880 000007fef865587f System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, Boolean) 000000000d8ae9c0 000007fef86a0426 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) 000000000d8aea10 000007ff005635a5 Genersoft.Platform.AppFramework.Service.GSPRestfulContext.Invoke(System.String, System.String, System.String, Boolean, System.String[], Int32[] ByRef, System.String[] ByRef)*** ERROR: Module load completed but symbols could not be loaded for Genersoft.Platform.AppFramework.RestfulService.dll 000000000d8aead0 000007ff00563174 Genersoft.Platform.AppFramework.RESTFulWebService.GSPHttpWebHandler.Invoke(System.IO.BinaryReader, System.Web.HttpContext)*** ERROR: Module load completed but symbols could not be loaded for Genersoft.Platform.AppFramework.RESTFulWebService.dll 000000000d8aebd0 000007ff001efc76 Genersoft.Platform.AppFramework.RESTFulWebService.GSPHttpWebHandler.ProcessRequest(System.Web.HttpContext) 000000000d8aecd0 000007fef3625c25 System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()*** WARNING: Unable to verify checksum for System.Web.ni.dll 000000000d8aed90 000007fef35f337a System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef) 000000000d8aee40 000007fef3607030 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception) 000000000d8aef00 000007fef35f2879 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object) 000000000d8aef60 000007fef35f777c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest) 000000000d8aefe0 000007fef35f6477 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32) 000000000d8af110 000007fef3d5d6dd DomainNeutralILStubClass.IL_STUB_COMtoCLR(Int64, Int32, Int32 ByRef) 000000000d8af448 000007fef960e93e [GCFrame: 000000000d8af448] 000000000d8af488 000007fef960e93e [ContextTransitionFrame: 000000000d8af488] 000000000d8af4c8 000007fef960e93e [GCFrame: 000000000d8af4c8] 000000000d8af6b0 000007fef960e93e [ComMethodFrame: 000000000d8af6b0]
varchar2_to_blob,应用向数据库更新LOB字段时的超时问题的更多相关文章
- 转 oracle数据库更新时间字段数据时的sql语句
https://www.cnblogs.com/sun-rain/p/4921512.html ---Oracle数据库-时间函数 ---格式化时间插入update t_user u set u.mo ...
- 2.6 数据库更新特定字段SQL/语句块
1.更新单表中某一字段 1.1适用于单条或者因为in条件1-1000条数据 下面是更改CMS_CONTRACT_INFO 表中合同编号为CMCC987最后更新时间为当前时间,或者注释里特定时间. UP ...
- 通过JDBC取Oracle数据库的时间字段时,时间丢失,只剩日期
通过JDBC连接Oracle数据库,在查询的时候发现时间字段取出来值后只剩下了日期,时间消失了.查资料发现跟Oracle jdbc驱动版本有关,这里先贴出解决方案: 修改数据库的连接方式: try { ...
- 解决mysql数据库插入中文字段时出现??? 的问题
1.检查并修改mysql的my.ini的配置文件 default-character-set=utf8 2.建立数据库是要指定字符集 create database mydb default ...
- 关于EF更新数据库,更新指定字段的设置
1.关于EF跟新数据库更新指定字段的设置 在EF提交到数据库的时候或许某些字段不想更新.或者自己更新一个模型到数据库去! 1.更新数据不更新一些字段 /// <summary> /// 数 ...
- Oracle数据库更新时间的SQL语句
---Oracle数据库更新时间字段数据时的sql语句---格式化时间插入update t_user u set u.name='pipi',u.modifytime=to_date('2015-10 ...
- 关于EntityFramework 更新数据记录时字段全部更新问题和不从数据库中获取直接更新记录
一.一直对这个比较疑惑感觉只修改一条数据记录的一个字段结果更新Savechages后跟踪生成sql竟然是全部被修改,感觉微软怎么这么傻,总觉得会有其它方式可以只更新部分字段,但一直没有找到相关设置,最 ...
- <笔记>更新某条数据库记录必须更新所有字段
今天用TP更新数据库数据时,用id得到模型对象,再通过该对象更新其他字段的数据,发现报错
- mongodb 数据库导入.cvs文件时某些字段类型变成NumberLong的解决办法
在mongodb中导入数据时,会在数据库中生成字段记录为NumberLong的数据,可以使用以下方式将其转换为String db.Account.find().forEach( function(it ...
随机推荐
- 【转】Thread.sleep(0)的意义
Thread.sleep(0)的意义 2012-03-23 17:47 2188人阅读 评论(2) 收藏 举报 windows算法unixthread 我们可能经常会用到 Thread.Sleep 函 ...
- 自定义Toast解决快速点击时重复弹出,排队无止尽
解决办法:自定义MyToast类: public class MyToast { /** 之前显示的内容 */ private static String oldMsg ; /** Toast对象 * ...
- 什么是 kNN 算法?
学习 machine learning 的最低要求是什么? 我发觉要求可以很低,甚至初中程度已经可以. 首先要学习一点 Python 编程,譬如这两本小孩子用的书:[1][2]便可. 数学方面 ...
- Win10/UWP新特性—SharedStorageAccessManager 共享文件
首先先给大家推荐一个UWP/Win10开发者群:53078485 里面有很多大婶,还有很多学习资源,欢迎大家来一起讨论Win10开发! 在UWP开发中,微软提供了一个新的特性叫做SharedStor ...
- CSS教程:div垂直居中的N种方法[转]
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- IOS-当遇到tableView整体上移时的解决方案
方案一在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView或collectionView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关 ...
- http中get和post的区别
HTTP定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST. HTTP-GET和HTTP-POST是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语 ...
- 你必须牢记的*.Config-配置文件
在我们第一次写web应用程序的时候,我们很快会接触到一个文件,那就是配置文件——web.config.我们的第一个比较深刻 的使用就是我们不需要把我们的数据库链接零散的写在我们的代码中了,我们只需要在 ...
- 记录自己对EventLoop和性能问题处理的一点心得
1.EventLoop 这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序实现结构.这种结构多是基于IO多路转接的API(select.poll.epoll之类)以reactor模 ...
- 关于使用flexible.js自适应页面,发现文字很多时,字体会变大的问题的原因和解决方案
具体自己还没研究过 先把别人写的文章收藏一下 主要是webkit 有一个Font Boosting特性,当文字小到一定程度的时候会触发这个属性,放大字体来提升页面的阅读感 . http://www.3 ...