很简单的一个程序 保存图片文件进数据库中 用了两年了 一直正常 昨天突然犯病 updateblob 无响应 导致其它客户端 全部死锁 至今不知道是怎么回事 郁闷要死 数据库 为 oracle 805 目前库文件大小 10G。请高手指点如何解决,无法言表感谢之意!

解决方案 »

  1.   

    救命啊  还没好啊  我跟踪调试过 到 updateblob这条语句时  一切都停了  没有返回值 没有错误信息  什么都没有  如果这时重启软件 做别的操作 只要不涉及存图像的那个表,都不会有问题 ,但如果哪怕是想看看以前存的图像 就不行了  好像oralce在失败那一刻 锁住存图像的那个表,只能重启所有oracle服务才行。
      

  2.   

    使用toad 数据库管理工具 ,查看当前session 的IO Wait 等等,看看具体死锁的原因
      

  3.   

    是否和  next_extent的大小有关系,修改到2M了。
      

  4.   

    查看alter_(sid).log根据ora-060错误,找到trace文件,把里面发生死锁的X图发出来。
      

  5.   

    通常开发发生死锁有两种情况
    1、外键上没有加上索引
    2、两个session互相等待资源。
      

  6.   

    图像本身应该没什么不同。程序上提供两种方式保存图像 ,一种是扫描,一种是选择文件。扫描没方现问题,就是选择文件时不时来一下。
    但用户一般把客户端机器重启后,死锁就杀掉了,再用程序一般 都有好。e358d8f32004e9a79f61a604061bf6db593bf68090fa9d&a=56&b=59][/img]
      

  7.   


    主表表结构如下:CREATE TABLE HY2004.T_PUB_CERTIFICATE_MANAGER
    (
      C_CODE              CHAR(15)                  NOT NULL,
      C_REQUEST_CODE      CHAR(15),
      CREW_CODE           CHAR(8),
      C_NAME              VARCHAR2(255),
      C_NUMBER            VARCHAR2(30),
      C_KIND              CHAR(15),
      C_CORP              VARCHAR2(255),
      C_START_TIME        DATE,
      C_CALCULATE_TIME    DATE,
      C_OVER_TIME         DATE,
      C_PLACE             VARCHAR2(15),
      C_MOOD              VARCHAR2(15),
      C_CHARGE            VARCHAR2(15),
      C_MONEY             NUMBER(18,2),
      C_IMAGE             BLOB,
      DESTROY_EMP         CHAR(20),
      DESTROY_TIME        DATE,
      CREATE_EMP          VARCHAR2(20),
      CREATE_TIME         DATE,
      M_NAME              VARCHAR2(20),
      M_DATE              DATE,
      C_TLIY              VARCHAR2(255),
      AUDITING            CHAR(1),
      AUDITING_EMP        VARCHAR2(20),
      AUDITING_TIME       DATE,
      C_ATTENTIONID       NUMBER(10),
      C_CHANGE_STATE      CHAR(1)                   DEFAULT '0',
      C_DUTY              VARCHAR2(20),
      C_SIGN_PLACE        VARCHAR2(50),
      C_IMAGE_EXIST       CHAR(1),
      C_YN_TRANSACT       CHAR(1),
      C_YN_TRANSACT_OVER  CHAR(1),
      P_UPD_TIME          DATE
    )
    TABLESPACE HY2004
    PCTUSED    40
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          6410K
                NEXT             1312K
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      5
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    LOGGING 
    LOB (C_IMAGE) STORE AS 
          ( TABLESPACE  HY2004 
            ENABLE      STORAGE IN ROW
            CHUNK       2048
            PCTVERSION  10
            NOCACHE
            INDEX       (
              TABLESPACE HY2004
              STORAGE    (
                          INITIAL          10K
                          NEXT             1
                          MINEXTENTS       1
                          MAXEXTENTS       121
                          PCTINCREASE      50
                          FREELISTS        1
                          FREELIST GROUPS  1
                          BUFFER_POOL      DEFAULT
                         ))
            STORAGE    (
                        INITIAL          40K
                        NEXT             20K
                        MINEXTENTS       1
                        MAXEXTENTS       121
                        PCTINCREASE      50
                        FREELISTS        1
                        FREELIST GROUPS  1
                        BUFFER_POOL      DEFAULT
                       )
          )
    NOCACHE
    PARALLEL ( DEGREE 1 INSTANCES 1 );CREATE INDEX HY2004.IDX_CERTIFICATE_CREW_CODE ON HY2004.T_PUB_CERTIFICATE_MANAGER
    CREATE INDEX HY2004.IDX_CER_KIND ON HY2004.T_PUB_CERTIFICATE_MANAGER
    CREATE INDEX HY2004.IDX_CER_NAME ON HY2004.T_PUB_CERTIFICATE_MANAGER
    CREATE UNIQUE INDEX HY2004.PK_T_PUB_CERTIFICATE_MANAGER ON HY2004.T_PUB_CERTIFICATE_MANAGER
    图像表表结构如下:CREATE TABLE HY2004.T_PUB_CERTIFICATE_IMAGE
    (
      P_CODE      CHAR(15)                          NOT NULL,
      C_CODE      CHAR(15)                          NOT NULL,
      P_WIDTH     CHAR(4),
      P_HEIGHT    CHAR(4),
      P_COMPRESS  CHAR(1),
      P_IMAGE     LONG RAW,
      P_SORT      CHAR(20)
    )
    TABLESPACE HY2004
    PCTUSED    40
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          14410K
                NEXT             2M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    LOGGING 
    NOCACHE
    PARALLEL ( DEGREE 1 INSTANCES 1 );
    CREATE INDEX HY2004.IDX_CERTIFICATE_IMAGE_C_CODE ON HY2004.T_PUB_CERTIFICATE_IMAGE
    CREATE UNIQUE INDEX HY2004.PK_CODE ON HY2004.T_PUB_CERTIFICATE_IMAGEALTER TABLE HY2004.T_PUB_CERTIFICATE_IMAGE ADD (
      CONSTRAINT PK_CODE
     PRIMARY KEY
    ALTER TABLE HY2004.T_PUB_CERTIFICATE_IMAGE ADD (
      CONSTRAINT FK_IMAGE_MANAGER 
     FOREIGN KEY (C_CODE) 
     
      

  8.   


    图像一般就是几百K,JPG文件,扫描参数比较固定。直接扫描存入数据库没有问题,但当扫描存成文件,然后再调入保存,就有可能死锁,但不是很频繁。代码应该没问题,调文件比扫描可简单多了。