oralce 保存图像 奇怪死锁 很简单的一个程序 保存图片文件进数据库中 用了两年了 一直正常 昨天突然犯病 updateblob 无响应 导致其它客户端 全部死锁 至今不知道是怎么回事 郁闷要死 数据库 为 oracle 805 目前库文件大小 10G。请高手指点如何解决,无法言表感谢之意! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 救命啊 还没好啊 我跟踪调试过 到 updateblob这条语句时 一切都停了 没有返回值 没有错误信息 什么都没有 如果这时重启软件 做别的操作 只要不涉及存图像的那个表,都不会有问题 ,但如果哪怕是想看看以前存的图像 就不行了 好像oralce在失败那一刻 锁住存图像的那个表,只能重启所有oracle服务才行。 使用toad 数据库管理工具 ,查看当前session 的IO Wait 等等,看看具体死锁的原因 是否和 next_extent的大小有关系,修改到2M了。 查看alter_(sid).log根据ora-060错误,找到trace文件,把里面发生死锁的X图发出来。 通常开发发生死锁有两种情况1、外键上没有加上索引2、两个session互相等待资源。 图像本身应该没什么不同。程序上提供两种方式保存图像 ,一种是扫描,一种是选择文件。扫描没方现问题,就是选择文件时不时来一下。但用户一般把客户端机器重启后,死锁就杀掉了,再用程序一般 都有好。e358d8f32004e9a79f61a604061bf6db593bf68090fa9d&a=56&b=59][/img] 主表表结构如下: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 HY2004PCTUSED 40PCTFREE 10INITRANS 1MAXTRANS 255STORAGE ( 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 ) )NOCACHEPARALLEL ( DEGREE 1 INSTANCES 1 );CREATE INDEX HY2004.IDX_CERTIFICATE_CREW_CODE ON HY2004.T_PUB_CERTIFICATE_MANAGERCREATE INDEX HY2004.IDX_CER_KIND ON HY2004.T_PUB_CERTIFICATE_MANAGERCREATE INDEX HY2004.IDX_CER_NAME ON HY2004.T_PUB_CERTIFICATE_MANAGERCREATE 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 HY2004PCTUSED 40PCTFREE 10INITRANS 1MAXTRANS 255STORAGE ( INITIAL 14410K NEXT 2M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT )LOGGING NOCACHEPARALLEL ( DEGREE 1 INSTANCES 1 );CREATE INDEX HY2004.IDX_CERTIFICATE_IMAGE_C_CODE ON HY2004.T_PUB_CERTIFICATE_IMAGECREATE UNIQUE INDEX HY2004.PK_CODE ON HY2004.T_PUB_CERTIFICATE_IMAGEALTER TABLE HY2004.T_PUB_CERTIFICATE_IMAGE ADD ( CONSTRAINT PK_CODE PRIMARY KEYALTER TABLE HY2004.T_PUB_CERTIFICATE_IMAGE ADD ( CONSTRAINT FK_IMAGE_MANAGER FOREIGN KEY (C_CODE) 图像一般就是几百K,JPG文件,扫描参数比较固定。直接扫描存入数据库没有问题,但当扫描存成文件,然后再调入保存,就有可能死锁,但不是很频繁。代码应该没问题,调文件比扫描可简单多了。 设计数据库表的时候 会故意让表数据冗余 oracle不等于号怎么表示 9i RMAN恢复问题 高手帮帮忙啊~~ 求关于树的问题 .sh怎么换行啊? 有没有人能告诉我,几个关于oracle日志的问题 急!急!关于ORACLE的Managerment Server问题 请教大侠,UTL_FILE文件写入错误? 执行存储过程总是出现未响应(原来是正常的),与系统表空间满了有无关系? oracle scheduler运行不了 关于oracle 9i连sql server2000的问题
1、外键上没有加上索引
2、两个session互相等待资源。
但用户一般把客户端机器重启后,死锁就杀掉了,再用程序一般 都有好。e358d8f32004e9a79f61a604061bf6db593bf68090fa9d&a=56&b=59][/img]
主表表结构如下: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)
图像一般就是几百K,JPG文件,扫描参数比较固定。直接扫描存入数据库没有问题,但当扫描存成文件,然后再调入保存,就有可能死锁,但不是很频繁。代码应该没问题,调文件比扫描可简单多了。