记一次oracle sql语句未提交引起的生产问题

问题:今天帮助同事排查生产问题,遇到一个oracle执行语句未提交引起的坑。以下记录警醒自己。

现象:页面上某一个按钮点击之后,总会有不确定性的延迟--并不是正常延迟。

排查:查看日志,发现总是执行到一个服务中,执行失败。这个服务中有三条sql语句,前两条是更新update,第三条是删除delete。这几个操作总是发生不定性的错误,执行延迟等问题。

分析:oracle中DML语句执行需要提交commit,如果不提交的话,执行同一个表会发生锁表或锁行。这就会导致某条sql语句执行巨慢的现象--并不是数据量大的问题。公司框架提供了两种执行数据库操作语句的方法,一个是不断开连接的,一种是断开连接并进行提交的,正常情况下执行DML语句的话,使用断开连接的;执行查询语句的话,一般使用不断开连接的,因为后面会打开游标取查询结果数据。这个生产问题,便是用错了这两种执行sql的方法造成的。

总结:

使用公司封装的架构方法,为了兼容各种情况,一般会提供各种场景使用到的方法,使用者使用的时候要看清楚每一层,框架提供了哪些方法,有什么不同,不要盲目的生搬硬套,选择适合当下业务场景的方法。

oracle数据库有表锁、行锁两种锁。

行锁:一般是排他锁,被锁定的行不能被更改、删除,只能被select,但是加排他锁之前一般会先加表级锁,。

表锁:一般是共享锁,是不可以对该表执行DDL语句的,但DML操作都不限制,行级锁之前需要先加表结构共享锁。

并发:对于高并发​更新的数据库表使用行级锁,避免使用表级锁,页级锁(mysql);

数据库操作语句的分类:

  • DDL:数据库模式定义语言,关键字:create
  • DML:数据操纵语言,关键字:Insert、delete、update
  • DCL:数据库控制语言 ,关键字:grant、remove
  • DQL:数据库查询语言,关键字:select

锁表及解锁:

1、查看哪些表被锁定了:sqlplus / as sysdba;

select t2.username,
       t2.sid,
       t2.serial#,
       t3.object_name,
       t2.OSUSER,
       t2.MACHINE,
       t2.PROGRAM,
       t2.LOGON_TIME,
       t2.COMMAND,
       t2.LOCKWAIT,
       t2.SADDR,
       t2.PADDR,
       t2.TADDR,
       t2.SQL_ADDRESS,
       t1.LOCKED_MODE
  from v$locked_object t1, v$session t2, dba_objects t3
 where t1.session_id = t2.sid
   and t1.object_id = t3.object_id
 order by t2.logon_time;

2、解除锁定

alter system kill session 'sid,seial#';

此外:oracle提供了三种语句提交方式

1、显式提交:用COMMIT命令直接完成的提交为显式提交。其格式为:SQL>COMMIT;或者代码语句中最后commit。
2、隐式提交: 用SQL命令间接完成的提交为隐式提交。这些命令是:ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
3、自动提交:若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON;

如何查看oracle数据库是否开启自动提交服务:

sqlplus / as sysdbs;

show auto;

OFF-未开启;ON-开启。

设置自动提交:

set autocommit on;

在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成,在Oracle数据库中,在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。因为Oracle数据库的默认事务隔离级别是提交读(Read Committed)。

提交数据有三种类型:显式提交、隐式提交及自动提交

需要注意的是,无论AUTOCOMMIT设置为何值,当退出SQL*Plus时,当前会话所有的DML操作所改变的数据都会被提交。

发布了23 篇原创文章 · 获赞 0 · 访问量 2941

猜你喜欢

转载自blog.csdn.net/kris_lh123/article/details/102555421