Oracle 事务

摘要:
Oracle将其添加为SQL兼容。它用于强制提交可能损坏或有问题的事务。COMMIT语句示例让我们看一个示例,演示如何在Oracle中使用COMMIT语句发出提交。Oracle SET TRANSACTION语句在Oracle中,SET TRANSACTIION语句可用于设置各种事务状态,例如只读、读/写、隔离级别、为事务分配名称或为事务分配回滚段。

Oracle事务

事务是什么
事务在数据库中是工作的逻辑单元,单个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制,可以确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。
 
事务特性
SQL92标准对数据库事务的特点进行如下定义:
 
原子性(Atomicity):一个事务里面所有包含的SQL语句都是一个整体,是不可分割的,要么不做,要么都做。
一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。
隔离性(Isolation):数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务在并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。
持久性 (Durability) : 当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。
一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(consistency)、隔离性(Isolation)和持久性(Durability),这就是ACID特性。
 
以下是解释如何在Oracle 中使用事务的主题列表:

Oracle COMMIT语句(提交事务)

在Oracle中,COMMIT语句可以用来提交当前事务的所有更改。提交后,其他用户将能够看到您的更改。本文要为大家带来的就是COMMIT语句的用法。
 

COMMIT语句语法:

Oracle / PLSQL中COMMIT语句的语法是:
 
COMMIT [ WORK ] [ COMMENT clause ] [ WRITE clause ] [ FORCE clause ];

参数

WORK:可选的。它被Oracle添加为符合SQL标准。使用或不使用WORK参数来执行COMMIT将产生相同的结果。
COMMENT clause:可选的。 它用于指定与当前事务关联的注释。 该注释最多可以包含在单引号中的255个字节的文本中。 如果出现问题,它将与事务ID一起存储在名为DBA_2PC_PENDING的系统视图中。
WRITE clause:可选的。 它用于指定将已提交事务的重做信息写入重做日志的优先级。 用这个子句,有两个参数可以指定:WAIT 或 NOWAIT (如果省略,WAIT是默认值)IMMEDIATE或BATCH(IMMEDIATE是省略时的默认值)
FORCE clause:可选的。 它用于强制提交可能已损坏或有疑问的事务。 有了这个子句,可以用3种方式指定FORCE:FORCE'string',[integer]或FORCE CORRUPT_XID'string'或FORCE CORRUPT_XID_ALL

注意

必须拥有DBA权限才能访问系统视图 - DBA_2PC_PENDING和V$CORRUPT_XID_LIST。
必须拥有DBA权限才能指定COMMIT语句的某些功能。

COMMIT语句示例

我们来看一个示例,演示如何使用COMMIT语句在Oracle中发出提交。
 
COMMIT;
此COMMIT示例将执行与以下相同的操作:
 
COMMIT WORK WRITE WAIT IMMEDIATE;
在此示例中,隐含了WORK关键字,并且省略WRITE子句将缺省为WRITE WAIT IMMEDIATE,因此它与前面的COMMIT语句是等效的。
 
添加备注
我们来看一个显示如何使用COMMENT子句的COMMIT示例:
 
例如,您可以通过两种方式使用注释编写COMMIT:
 
COMMIT COMMENT 'This is the comment for the transaction';
SQL
或者 -
 
COMMIT WORK COMMENT 'This is the comment for the transaction';
由于始终隐含WORK关键字,因此这两个COMMIT示例都是等效的。 如果事务出错或存在疑问,COMMIT会将包含在引号中的注释与事务ID一起存储在DBA_2PC_PENDING系统视图中。
 
强制最后,看一下显示如何使用FORCE子句的COMMIT示例。
 
例如,可以通过两种方式编写可疑事务的COMMIT:
 
COMMIT FORCE '22.14.67';
或者 -
 
COMMIT WORK FORCE '22.14.67';
由于始终隐含WORK关键字,因此这两个COMMIT示例都会强制执行由事务ID “22.14.67”标识的已损坏或疑问事务。
 

Oracle ROLLBACK语句(回滚事务)

在Oracle中,ROLLBACK语句可以用来撤销当前事务或有问题的事务。本教程就将教大家如何使用ROLLBACK语句。 
 

ROLLBACK语法

ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name  | FORCE 'string' ];

参数

WORK:可选的。 它被Oracle添加为符合SQL标准。 使用或不使用WORK参数来发出ROLLBACK会导致相同的结果。
TO SAVEPOINT savepoint_name:可选的。 ROLLBACK语句撤消当前会话的所有更改,直到由savepoint_name指定的保存点。 如果省略该子句,则所有更改都将被撤消。
FORCE ‘string’:可选的。它用于强制回滚可能已损坏或有问题的事务。 使用此子句,可以将单引号中的事务ID指定为字符串。 可以在系统视图中找到名为DBA_2PC_PENDING的事务标识。
必须拥有DBA权限才能访问系统视图:DBA_2PC_PENDING和V$CORRUPT_XID_LIST。
您无法将有问题的事务回滚到保存点。

ROLLBACK语语法示例

我们来看一个示例,演示如何使用ROLLBACK语句在Oracle中发出回滚。
 
例如:
 
ROLLBACK;
此ROLLBACK示例执行与以下操作相同:
 
ROLLBACK WORK;
在这个例子中,隐含了WORK关键字,所以前面2个ROLLBACK语句是等价的。 这些示例将回滚当前事务。
 

Savepoint

可以通过两种方式将ROLLBACK写入保存点:
 
ROLLBACK TO SAVEPOINT savepoint1;
或者
 
ROLLBACK WORK TO SAVEPOINT savepoint1;
由于始终隐含着WORK关键字,因此这两个ROLLBACK示例都会将当前事务回滚到名为savepoint1的保存点。
 

Force

最后,看看ROLLBACK的一个例子,它显示了如何强制回滚一个有问题的事务。
 
例如,您可以通过两种方式编写有问题事务的ROLLBACK:
 
ROLLBACK FORCE '22.14.67';
或者
 
ROLLBACK WORK FORCE '22.14.67';
由于始终隐含着WORK关键字,因此这两个ROLLBACK示例都将强制回滚由事务 ID “22.14.67”标识的损坏或有问题的事务。
 

Oracle SET TRANSACTION语句(设置事务)

在Oracle中,SET TRANSACTION语句可以用来设置事务的各种状态,比如只读、读/写、隔离级别,为事务分配名称或将事务分配回滚段等等。本教程要为大家带来的就是SET TRANSACTION语句的语法以及示例,教大家如何正确使用该语句。
 

SET TRANSACTION语法

Oracle中SET TRANSACTION语句的语法是:
 
SET TRANSACTION [ READ ONLY | READ WRITE ]
                [ ISOLATION LEVEL [ SERIALIZE | READ COMMITED ]
                [ USE ROLLBACK SEGMENT 'segment_name' ]
                [ NAME 'transaction_name' ];

参数

   ● READ ONLY:可以将事务设置为只读事务。
   ● READ WRITE:可以将事务设置为读/写事务。
   ● ISOLATION LEVEL: 如果指定,它有两个选项:
        1.ISOLATION LEVEL SERIALIZE:如果事务尝试更新由另一个事务更新并未提交的资源,则事务将失败。
        2.ISOLATION LEVEL READ COMMITTED:如果事务需要另一个事务持有的行锁,则事务将等待,直到行锁被释放。
   ● USE ROLLBACK SEGMENT:可选的。 如果指定,它将事务分配给由'segment_name'标识的回退段,该段是用引号括起来的段名称。
   ● NAME:为'transaction_name'标识的事务分配一个名称,该事务用引号括起来。
 

SET TRANSACTION示例

下面我们来看一个演示如何在Oracle中使用SET TRANSACTION语句的示例。
 
只读
首先,下面来看看看如何使用SET TRANSACTION语句将事务设置为只读。
SET TRANSACTION READ ONLY NAME 'RO_example';
此示例会将事务设置为只读,并为其分配“RO_example”的名称。
 
读写
下面是如何使用SET TRANSACTION语句将事务设置为读/写的示例:
SET TRANSACTION READ WRITE NAME 'RW_example';

Oracle LOCK TABLE语句(锁表)

在Oracle中,LOCK TABLE语句可以用来锁定表、表分区或表子分区。本教程将和大家一起学习LOCK TABLE语句的详细用法。

LOCK TABLE语法

LOCK TABLE语句的语法是:
 
LOCK TABLE tables IN lock_mode MODE [ WAIT [, integer] | NOWAIT ];

参数

tables:用逗号分隔的表格列表。
lock_mode :它是以下值之一:
                                               lock_mode                                                      描述
ROW SHARE允许同时访问表,但阻止用户锁定整个表以进行独占访问。
ROW EXCLUSIVE允许对表进行并发访问,但阻止用户以独占访问方式锁定整个表并以共享方式锁定表。
SHARE UPDATE允许同时访问表,但阻止用户锁定整个表以进行独占访问。
SHARE允许并发查询,但用户无法更新锁定的表。
SHARE ROW EXCLUSIVE用户可以查看表中的记录,但是无法更新表或锁定SHARE表中的表。
EXCLUSIVE允许查询锁定的表格,但不能进行其他活动。
WAIT:它指定数据库将等待(达到指定整数的特定秒数)以获取DML锁定。
NOWAIT:它指定数据库不应该等待释放锁。

LOCK TABLE示例

下面是一个如何在Oracle中使用LOCK TABLE语句的例子:
 
LOCK TABLE suppliers IN SHARE MODE NOWAIT;
这个例子会锁定suppliers表在共享模式,而不是等待锁定被释放。
 

<wiz_tmp_tag contenteditable="false" style="display: none;">

 
 
 
 

免责声明:文章转载自《Oracle 事务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ClosedXML导出Excel简单使用多属性决策下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORACLE 常用函数——转换函数

------------------------------------------类型转换函数------------------------------------------------自动类型转换, ORACLE 可以自动根据具体情况进行如下转换:*字符串到数值*字符串到日期*数值到字符串*日期到字符串EX:--*字符串到数值SELECT '3....

oracle查看和修改最大连接数

第一步,在cmd命令行,输入sqlplus 或者直接在plsql中打开command window第二步,根据提示输入用户名与密码1. 查看processes和sessions参数 1 2 3 4 5 6 7 8 9 10 11 12 13 SQL> show parameter processes     NAME            ...

Flexigrid详解

一.代码案例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport"content="width=device-width, initial-scale=1.0">...

数据库事务中的隔离级别和锁+spring Transactional注解

转载自:https://www.cnblogs.com/yldIndex/p/spring_Transactional.html 数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性、安全性也是我们需要研究的问题。ACID 首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(Atomicity):即事务是...

Oracle19c启动监听listener服务

Oracle19c启动监听listener服务 操作系统:win10 Oracle版本:oracle19c 问题描述1 安装了oracle后,win+r输入services.msc发现oracle的服务中没有listener这个监听服务 问题描述2 Unable to OpenSCManager: err=5 TNS-12560: TNS: 协议适配器错误...

Oralce JDBC jar包下载

下载地址:https://pan.baidu.com/s/1sU7gu4biigEAw-3Bu7yIOA 下载包中包括以下文件: ojdbc5.jarojdbc5dms.jarojdbc5dms_g.jarojdbc5_g.jarojdbc6.jarojdbc6dms.jarojdbc6dms_g.jarojdbc6_g.jarsimplefan.jar...