Oracle数据提交与事务隔离实验

oradebug挂起lgwr进程

原文作者:dbsnake 崔华

实验参考原文链接:

Oracle 里未 commit 的数据除了当前 session 之外,其他 session 是看不到的。

Oracle里未成功 commit 的数据我们也可能能看到。

同时启4个 session:

session 1: 创建测试表test,插入一条数据但不提交

SCOTT@PROD>create table test (id number,name varchar2(20));

SCOTT@PROD>insert into test values (1,'lvxinghao');

SCOTT@PROD>select * from test;

session 2:查看test表,由于session 1未commit,session 2查看不到这条数据

SCOTT@PROD>select * from test;

SCOTT@PROD>select count(*) from test;

session 3:sys用户查看并把lgwr进程suspend住(挂起):

操作系统查看LGWR进程号

[oracle@rhel64 ~]$ ps -ef | grep lgwr | grep -v grep

sys用户查看lgwr后台进程对应操作系统pid:

SYS@PROD>select spid from v$process where pname='LGWR';

挂起lgwr进程

SYS@PROD>oradebug setospid 5528

SYS@PROD>oradebug suspend

alert日志中信息显示

[oracle@rhel64 ~]$ tail -f $ORACLE_BASE/diag/rdbms/prod/PROD/trace/alert_PROD.log

session 1:执行commit命令,由于lgwr进程被挂起,commit命令hang住

SCOTT@PROD>commit;

session 2:再次查看test表中数据,能够显示出来

SCOTT@PROD>select * from test;

SCOTT@PROD>select count(*) from test;

从结果来看,之前看不到的那条记录现在已经能看到了,即session 1对于session2而言已经commit了,尽管由于lgwr被挂起,session1的commit操作并没有成功的做完。

Oracle 里 commit 操作时,

1、修改事务所对应的 undo segment header 中 slot 的状态;

2、改完状态后再 flush log buffer;

session 3中把lgwr 挂起了,步骤2 无法完成,但步骤1还可以完成。

只要步骤1做完了,其他的 session 就能看到这个事务所做的改变了(通过ITL中记录的 transaction id 去 check相应的 undo segment header 中 slot 的状态),也就是说对于其他 session 而言,这个事务已经 commit 了,虽然这个事务其实并没有成功commit。

(解除挂起lgwr进程,可以使用oradebug resume)

session 4:shutdown abort之后startup启动实例

SYS@PROD>shutdown abort;

SYS@PROD>startup;

告警日志显示有instance recovery

session 1:再次查看test表,数据不存在。

SCOTT@PROD>conn scott/tiger

SCOTT@PROD>select * from test;

SYS@PROD>oradebug help

HELP           [command]                 Describe one or all commands

SETMYPID                                 Debug current process

SETOSPID                         Set OS pid of process to debug

SETORAPID       ['force']        Set Oracle pid of process to debug

SETORAPNAME                    Set Oracle process name to debug

SHORT_STACK                              Get abridged OS stack

CURRENT_SQL                              Get current SQL

DUMP           [addr]  Invoke named dump

DUMPSGA        [bytes]                   Dump fixed SGA

DUMPLIST                                 Print a list of available dumps

EVENT                              Set trace event in process

SESSION_EVENT                      Set trace event in session

DUMPVAR

[level]  Print/dump a fixed PGA/SGA/UGA variable

DUMPTYPE

 Print/dump an address with type info

SETVAR

Modify a fixed PGA/SGA/UGA variable

PEEK           [level]      Print/Dump memory

POKE                Modify memory

WAKEUP                          Wake up Oracle process

SUSPEND                                  Suspend execution

RESUME                                   Resume execution

FLUSH                                    Flush pending writes to trace file

CLOSE_TRACE                              Close trace file

TRACEFILE_NAME                           Get name of trace file

LKDEBUG                                  Invoke global enqueue service debugger

NSDBX                                    Invoke CGS name-service debugger

-G               Parallel oradebug command prefix

-R               Parallel oradebug prefix (return output

SETINST              Set instance list in double quotes

SGATOFILE               Dump SGA to file; dirname in double quotes

DMPCOWSGA       Dump & map SGA as COW; dirname in double quotes

MAPCOWSGA               Map SGA as COW; dirname in double quotes

HANGANALYZE    [level] [syslevel]        Analyze system hang

FFBEGIN                                  Flash Freeze the Instance

FFDEREGISTER                             FF deregister instance from cluster

FFTERMINST                               Call exit and terminate instance

FFRESUMEINST                             Resume the flash frozen instance

FFSTATUS                                 Flash freeze status of instance

SKDSTTPCS                Helps translate PCs to names

WATCH

 Watch a region of memory

DELETE         watchpoint    Delete a watchpoint

SHOW           watchpoints        Show  watchpoints

DIRECT_ACCESS   Fixed table access

CORE                                     Dump core without crashing process

IPC                                      Dump ipc information

UNLIMIT                                  Unlimit the size of the trace file

PROCSTAT                                 Dump process statistics

CALL           [-t count] [arg1]...[argn]  Invoke function with arguments

SYS@PROD>

吕星昊

2016.3.27

oracle可以使用提交完成的事务,【体系结构】Oracle数据提交与事务隔离实验 oradebug挂起lgwr进程...相关推荐

  1. java multipart/form-data 提交_从零开始实现multipart/form-data数据提交

    在HTTP服务应用中进行数据提交一般都使用application/json,application/x-www-form-urlencoded和multipart/form-data这几种内容格式.这 ...

  2. Oracle数据库事务回滚和提交,数据库 事务提交和回滚

    事务  -  (transaction / tx) 原子性操作性(不可以分割的操作) - 要么全做, 要么全不做 事务的特点  -  ACID 特性 A - atomicity  原子性 : 不可分割 ...

  3. oracle的mvcc解析,PostgreSQL原理:Oracle 和 MySQL 中MVCC机制详解

    MVCC,Multi-version Concurrency Control ,顾名思义指的是多版本并发控制.在介绍MVCC之前我们先来简单了解下事务的隔离级别: read uncommitted:脏 ...

  4. 事务第02讲:数据库事务(MySQL)

    事务第02讲:数据库事务[MySQL] 1. 什么是事务? 2. 事务基本要素 3. MySQL事务隔离级别 3.1 事务隔离级别概念 3.1.1 读未提交 3.1.2 读已提交 3.1.3 可重复读 ...

  5. 数据库 事务 四大特性 原子性Atomic 一致性Consistent 隔离性Insulation Isolation 持久性Duration 隔离级别

    https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1/9744607?fr=aladdin 数据库事务 ...

  6. 继续卷!面试又问Spring 事务有几种传播行为和隔离级别?

    怕什么真理无穷 进一步有近一步的欢喜 面试又被问到了事务,来吧,要么卷起来,要么躺平.卷不动躺平会不会导致数据不一致? 事务概念 事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序 ...

  7. Spring事务(Transaction)的传播(propagation)属性以及隔离(isolation)级别

    目录 1 Spring事务 1.1 定义 1.1.1 事务概念 1.1.2 事务分类 1.2 声明式事务 1.2.1 @EnableTransactionManagement工作原理 1.2.2 实现 ...

  8. mysql数据库事务传播特性_什么是事务的传播特性?

    我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档) 在我们用SSH开发项目的时候,我们一般都是将事务设置 ...

  9. mysql事务能支持多大_MySQL事务调优

    数据库事务 数据库事务是数据库系统执行过程中的一个逻辑处理单元,保证一个数据库操作要么成功,要么失败. 数据库事务具有以下四个基本属性: 原子性(Atomicity) 一致性(Consistent) ...

最新文章

  1. Day 33 并发编程3
  2. Spring MVC与JAX-RS比较与分析
  3. 剑指offer 算法(树的两个节点的最低祖先)
  4. 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题...
  5. java深度学习(一)Maven创建一个新的ND4J工程
  6. android 设备占用_如何查看正在占用Android设备的空间
  7. 图的单源最短路径(Dijkstra算法)
  8. android 隐藏输入法时自动关闭弹窗,Android监听输入法弹窗和关闭的实现方法
  9. 模线性同余方程组求解
  10. 最新三网免挂码支付系统源码+免授权版
  11. 华为安装gsm框架_华为Mate20手机怎么下载安装谷歌服务助手,GMS框架安装教程
  12. 电源完整性之Cadence Sigrity Power DC_电热协同仿真
  13. 华为android已锁定,教你如何查看华为手机是否己解锁bootloader
  14. Python-从txt中获取所有带有书名号的内容,并去除重复内容
  15. 洛谷P4704 太极剑(乱搞)
  16. CTP接口开发案例(内附源码)
  17. python视频教程410集免费_Python Web开发—进阶提升 490集超强Python视频教程 真正零基础学习Python视频教程...
  18. jdk1.7安装详细过程
  19. JS(JavaScript)详解
  20. 阿里巴巴联合欧莱雅发布移动端 AI 痘痘检测应用

热门文章

  1. sem_我知道的关键词1
  2. 理解离散傅立叶变换(三.复数)
  3. vue3.0 视频播放插件(vue-vedio-player)
  4. rtmp协议封装h264与h265打包flv发送
  5. 关于整型数据符号位扩展的问题
  6. 使用OpenCV的ANN_MLP神经网络实现数字识别
  7. mysql if exists 数据表_使用IF NOT EXISTS创建数据表
  8. linux方向键ascii_上下左右 方向键的ASCII码值是多少?
  9. 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 分级管理
  10. 开源IT从业者最受欢迎5大技能