将字符串转换为BLOB类型数据,写入服务器。

1,首先利用to_clob函数把varchar2字段转成 clob字段。

2  利用c2b上面函数将clob转成blob。

即: c2b(to_clob(varchar2字段))

 

  1. CREATE OR REPLACE FUNCTION C2B (b IN CLOB default empty_clob())
  2. RETURN BLOB
  3. -- typecasts BLOB to CLOB (binary conversion)
  4. IS
  5. res BLOB;
  6. b_len number := dbms_lob.getlength(b) ;
  7. dest_offset1 NUMBER := 1;
  8. src_offset1 NUMBER := 1;
  9. amount_c INTEGER := DBMS_LOB.lobmaxsize;
  10. blob_csid NUMBER := DBMS_LOB.default_csid;
  11. lang_ctx INTEGER := DBMS_LOB.default_lang_ctx;
  12. warning INTEGER;
  13. BEGIN
  14.  
  15. if b_len > 0 then
  16. DBMS_LOB.createtemporary (res, TRUE);
  17. DBMS_LOB.OPEN (res, DBMS_LOB.lob_readwrite);
  18. DBMS_LOB.convertToBlob (res,
  19. b,
  20. amount_c,
  21. dest_offset1,
  22. src_offset1,
  23. blob_csid,
  24. lang_ctx,
  25. warning
  26. );
  27. else
  28. select empty_blob() into res from dual ;
  29. end if ;
  30. RETURN res; -- res is OPEN here
  31. END C2B;

示例:

  1. declare bb blob;
  2. begin
  3. bb := c2b(to_clob('abc'));
  4. dbms_output.put_line(dbms_lob.getlength(bb));
  5.  
  6. insert into tkk0308
  7. values(2, bb);
  8.  
  9. commit;
  10. 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 线程:

  1. OS Thread Id: 0x3e38 (97)
  2.  
  3. Child SP IP Call Site
  4.  
  5. 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)
  6.  
  7. 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
  8.  
  9. 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)
  10.  
  11. 000000000d8ace30 000007fef2b2ca45 System.Data.OracleClient.OracleLob.Write(Byte[], Int32, Int32)
  12.  
  13. 000000000d8acf10 000007fef2b1c021 System.Data.OracleClient.OracleParameterBinding.CreateTemporaryLobForValue(System.Data.OracleClient.OracleConnection, System.Data.OracleClient.OracleType, System.Object)
  14.  
  15. 000000000d8acf60 000007fef2b1cb67 System.Data.OracleClient.OracleParameterBinding.PrepareForBind(System.Data.OracleClient.OracleConnection, Int32 ByRef)
  16.  
  17. 000000000d8acfd0 000007fef2b0e1b0 System.Data.OracleClient.OracleCommand.Execute(System.Data.OracleClient.OciStatementHandle, System.Data.CommandBehavior, Boolean, System.Data.OracleClient.OciRowidDescriptor ByRef, System.Collections.ArrayList ByRef)
  18.  
  19. 000000000d8ad0c0 000007fef2b0e7e5 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean, System.Data.OracleClient.OciRowidDescriptor ByRef)
  20.  
  21. 000000000d8ad150 000007fef2b0e6fd System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
  22.  
  23. 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
  24.  
  25. 000000000d8ad2b0 000007ff00c7dbb9 Genersoft.Platform.Core.DataAccess.Database.RunProcWithNoQuery(System.String, System.Data.IDbDataParameter[])
  26.  
  27. 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
  28.  
  29. 000000000d8ad3f0 000007ff00c7d168 Genersoft.Platform.Resource.ResourceManager.DataModelManager.SaveModelAllInfor(Genersoft.Platform.Resource.Metadata.DataModel.GspDataModel)
  30.  
  31. 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
  32.  
  33. 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
  34.  
  35. *** ERROR: Module load completed but symbols could not be loaded for Genersoft.Platform.RuntimeADP.Core.dll
  36.  
  37. 000000000d8ad7b0 000007ff00b8f92a Genersoft.Platform.RuntimeADP.Core.Manager.GSPBizEntityManager.AddBizEntity(Genersoft.Platform.RuntimeADP.SPI.IBusinessEntity, Genersoft.Platform.RuntimeADP.SPI.BizUnitAssignment, Boolean ByRef)
  38.  
  39. 000000000d8ad8b0 000007ff00b8f4d8 Genersoft.Platform.RuntimeADP.Core.Manager.GSPBizEntityManager.AddBizEntity(Genersoft.Platform.RuntimeADP.SPI.IBusinessEntity, Genersoft.Platform.RuntimeADP.SPI.BizUnitAssignment)
  40.  
  41. 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
  42.  
  43. *** ERROR: Module load completed but symbols could not be loaded for Genersoft.HR.Sys.RunTimeCore.dll
  44.  
  45. 000000000d8adb30 000007ff00b84a4f Genersoft.HR.Sys.RunTimeCore.Manager.HRSalaryRuntimeManager.SubSetSynchronization(System.String)
  46.  
  47. 000000000d8ae328 000007fef95a10b4 [DebuggerU2MCatchHandlerFrame: 000000000d8ae328]
  48.  
  49. 000000000d8ae410 000007fef95a10b4 [CustomGCFrame: 000000000d8ae410]
  50.  
  51. 000000000d8ae3d8 000007fef95a10b4 [GCFrame: 000000000d8ae3d8]
  52.  
  53. 000000000d8ae368 000007fef95a10b4 [GCFrame: 000000000d8ae368]
  54.  
  55. 000000000d8ae738 000007fef95a10b4 [HelperMethodFrame_PROTECTOBJ: 000000000d8ae738] System.RuntimeMethodHandle._InvokeMethodFast(System.IRuntimeMethodInfo, System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeType)
  56.  
  57. 000000000d8ae880 000007fef865587f System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, Boolean)
  58.  
  59. 000000000d8ae9c0 000007fef86a0426 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
  60.  
  61. 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
  62.  
  63. 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
  64.  
  65. 000000000d8aebd0 000007ff001efc76 Genersoft.Platform.AppFramework.RESTFulWebService.GSPHttpWebHandler.ProcessRequest(System.Web.HttpContext)
  66.  
  67. 000000000d8aecd0 000007fef3625c25 System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()*** WARNING: Unable to verify checksum for System.Web.ni.dll
  68.  
  69. 000000000d8aed90 000007fef35f337a System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)
  70.  
  71. 000000000d8aee40 000007fef3607030 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)
  72.  
  73. 000000000d8aef00 000007fef35f2879 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object)
  74.  
  75. 000000000d8aef60 000007fef35f777c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)
  76.  
  77. 000000000d8aefe0 000007fef35f6477 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)
  78.  
  79. 000000000d8af110 000007fef3d5d6dd DomainNeutralILStubClass.IL_STUB_COMtoCLR(Int64, Int32, Int32 ByRef)
  80.  
  81. 000000000d8af448 000007fef960e93e [GCFrame: 000000000d8af448]
  82.  
  83. 000000000d8af488 000007fef960e93e [ContextTransitionFrame: 000000000d8af488]
  84.  
  85. 000000000d8af4c8 000007fef960e93e [GCFrame: 000000000d8af4c8]
  86.  
  87. 000000000d8af6b0 000007fef960e93e [ComMethodFrame: 000000000d8af6b0]

varchar2_to_blob,应用向数据库更新LOB字段时的超时问题的更多相关文章

  1. 转 oracle数据库更新时间字段数据时的sql语句

    https://www.cnblogs.com/sun-rain/p/4921512.html ---Oracle数据库-时间函数 ---格式化时间插入update t_user u set u.mo ...

  2. 2.6 数据库更新特定字段SQL/语句块

    1.更新单表中某一字段 1.1适用于单条或者因为in条件1-1000条数据 下面是更改CMS_CONTRACT_INFO 表中合同编号为CMCC987最后更新时间为当前时间,或者注释里特定时间. UP ...

  3. 通过JDBC取Oracle数据库的时间字段时,时间丢失,只剩日期

    通过JDBC连接Oracle数据库,在查询的时候发现时间字段取出来值后只剩下了日期,时间消失了.查资料发现跟Oracle jdbc驱动版本有关,这里先贴出解决方案: 修改数据库的连接方式: try { ...

  4. 解决mysql数据库插入中文字段时出现??? 的问题

    1.检查并修改mysql的my.ini的配置文件   default-character-set=utf8 2.建立数据库是要指定字符集   create database mydb default ...

  5. 关于EF更新数据库,更新指定字段的设置

    1.关于EF跟新数据库更新指定字段的设置 在EF提交到数据库的时候或许某些字段不想更新.或者自己更新一个模型到数据库去! 1.更新数据不更新一些字段 /// <summary> /// 数 ...

  6. Oracle数据库更新时间的SQL语句

    ---Oracle数据库更新时间字段数据时的sql语句---格式化时间插入update t_user u set u.name='pipi',u.modifytime=to_date('2015-10 ...

  7. 关于EntityFramework 更新数据记录时字段全部更新问题和不从数据库中获取直接更新记录

    一.一直对这个比较疑惑感觉只修改一条数据记录的一个字段结果更新Savechages后跟踪生成sql竟然是全部被修改,感觉微软怎么这么傻,总觉得会有其它方式可以只更新部分字段,但一直没有找到相关设置,最 ...

  8. <笔记>更新某条数据库记录必须更新所有字段

    今天用TP更新数据库数据时,用id得到模型对象,再通过该对象更新其他字段的数据,发现报错

  9. mongodb 数据库导入.cvs文件时某些字段类型变成NumberLong的解决办法

    在mongodb中导入数据时,会在数据库中生成字段记录为NumberLong的数据,可以使用以下方式将其转换为String db.Account.find().forEach( function(it ...

随机推荐

  1. linux内核分析——扒开系统调用的三层皮(上)

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 系统调用 ...

  2. ASP.NET MVC3的学习

    ASP.NET MVC第一次课(2013-12-25晚学完)     1.ASP.NET MVC 的特点       分离任务          可扩展        强大的URL重写(路由)机制   ...

  3. BZOJ 1040 树形DP+环套树

    就是有n个点n条边,那么有且只有一个环那么用Dfs把在环上的两个点找到.然后拆开,从这条个点分别作树形Dp即可. #include <cstdio> #include <cstrin ...

  4. 炫酷的Linux终端命令大全-1

    1. 命令行日常快捷键. CTRL + U            ------------------------------- 剪切光标前的内容 CTRL + K             ----- ...

  5. bootstrap 之 xs,sm,md,lg && 主要颜色

    mobile – xs ( <768px ) tablet – sm ( 768~991px ) desktop – md ( 992~1170px ) large desktop – lg ( ...

  6. opendir()函数

    opendir() 函数打开一个目录句柄,可由 closedir(),readdir() 和 rewinddir() 使用. 若成功,则该函数返回一个目录流,否则返回 false 以及一个 error ...

  7. [转]OOAD基本概念

    转载地址:http://www.cnblogs.com/zfc2201/archive/2012/12/09/2810532.html 尊重原作者,转载请注明 学习目标: 1.理解与掌握面向对象的概念 ...

  8. 黑马----JAVA泛型基础

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA范型-基础 一.泛型的概念 1.实现了参数化类型 2.用于编写可应用于多种类型的代码,即所编写的代码可应用于许多许多的类 ...

  9. 一键编译go文件命令.bat

    一键编译go文件命令.bat    , 请新建 一键编译go文件命令.bat    文件,放到你的xxx.go文件目录下 ( 欢迎加入go语言群: 218160862 , 群内有实践) 点击加入 @e ...

  10. [原创]IIS7.5下配置ASP+PHP环境及错误处理(0xc0000135)

    IIS7.5下配置ASP+PHP环境及错误处理(0xc0000135) http://user.qzone.qq.com/93701178/blog/1398155812 操作系统更新至Win7或Wi ...