数据库错误集

前言

本章博客用于记录工作学习数据库相关时遇到的问题,由于以前没有这个习惯,发现了问题,然后解决了就完了,当下次再遇到的时候,又要重新去按步骤解决,耗费时间,也不利于知识的积累,因此,以后我希望能够逐渐养成这个习惯,逐渐进步!

一、Oracle

1、插入数据报ORA-00001:违反唯一约束条件

错误还原: 在对接接口数据时(其他人给我们传数据,我们写入数据库),一直报该错误,我知道是数据重复了,但是我看了代码和存储过程,都没发现重复的判断在哪里,最后我将返回的信息完全打印出来,才发现了是进表时的index问题。
解决办法: 一般违反唯一约束条件就是主键重复了,但是这里不是,这里违反的unique约束,即唯一约束,表示该列的值不能重复,可以为一列,也可以是多列,我的情况就是多列的值不能重复。

2、死锁

问题还原: 接收数据的接口没有动静了,没有数据进入我们的数据库。也没有报错信息什么的,就卡在了那里。重启接收服务,可能会仍然没有数据进入,也可能进入几条然后又没有了。

解决办法: 因为确定了对方是有数据传给我们,但是我们数据不能进库,也没有报错,所以初步判断是表锁了,通过Toad for Oracle查看,发现确实是表被锁了。并且有很多的session,可以通过该软件直接kill sessionl。但是我不太会用这个软件就打算使用sql。

# 查看被锁表的信息,尤其是session_id和locked_mode(mode为3)  
select b.owner,b.object_name,a.session_id,a.locked_mode  
from v$locked_object a,dba_objects b  
where b.object_id = a.object_id;

-- 通过session_id 得到serial#
select b.username,b.sid,b.serial#,logon_time  
from v$locked_object a,v$session b  
where a.session_id = b.sid and b.sid='78'
order by b.logon_time;

-- kill掉被锁表的session,11为session_id ,22为serial#
alter system kill session '11,22';

造成原因: 接口中某张表在一直被访问,并且会一直修改字段。因为同事想往这张表中新增几条数据,他使用了select … for update 的方式往表里新增。造成了死锁的问题。
具体的原因还不太情况,目前只知道select for update 默认情况下,不使用of子句表示在select所有的数据表中加锁,这个时候并发访问该表,就导致了死锁。后面我让同事不要使用for update 的方式新增该表的数据,而是通过inser into 的方式。

二、MySQL

三、SQLServer

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值