oracle可以使用提交完成的事务,【体系结构】Oracle数据提交与事务隔离实验 oradebug挂起lgwr进程...
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 infoSETVAR
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 memoryDELETE 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进程...相关推荐
- java multipart/form-data 提交_从零开始实现multipart/form-data数据提交
在HTTP服务应用中进行数据提交一般都使用application/json,application/x-www-form-urlencoded和multipart/form-data这几种内容格式.这 ...
- Oracle数据库事务回滚和提交,数据库 事务提交和回滚
事务 - (transaction / tx) 原子性操作性(不可以分割的操作) - 要么全做, 要么全不做 事务的特点 - ACID 特性 A - atomicity 原子性 : 不可分割 ...
- oracle的mvcc解析,PostgreSQL原理:Oracle 和 MySQL 中MVCC机制详解
MVCC,Multi-version Concurrency Control ,顾名思义指的是多版本并发控制.在介绍MVCC之前我们先来简单了解下事务的隔离级别: read uncommitted:脏 ...
- 事务第02讲:数据库事务(MySQL)
事务第02讲:数据库事务[MySQL] 1. 什么是事务? 2. 事务基本要素 3. MySQL事务隔离级别 3.1 事务隔离级别概念 3.1.1 读未提交 3.1.2 读已提交 3.1.3 可重复读 ...
- 数据库 事务 四大特性 原子性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 数据库事务 ...
- 继续卷!面试又问Spring 事务有几种传播行为和隔离级别?
怕什么真理无穷 进一步有近一步的欢喜 面试又被问到了事务,来吧,要么卷起来,要么躺平.卷不动躺平会不会导致数据不一致? 事务概念 事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序 ...
- Spring事务(Transaction)的传播(propagation)属性以及隔离(isolation)级别
目录 1 Spring事务 1.1 定义 1.1.1 事务概念 1.1.2 事务分类 1.2 声明式事务 1.2.1 @EnableTransactionManagement工作原理 1.2.2 实现 ...
- mysql数据库事务传播特性_什么是事务的传播特性?
我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档) 在我们用SSH开发项目的时候,我们一般都是将事务设置 ...
- mysql事务能支持多大_MySQL事务调优
数据库事务 数据库事务是数据库系统执行过程中的一个逻辑处理单元,保证一个数据库操作要么成功,要么失败. 数据库事务具有以下四个基本属性: 原子性(Atomicity) 一致性(Consistent) ...
最新文章
- Day 33 并发编程3
- Spring MVC与JAX-RS比较与分析
- 剑指offer 算法(树的两个节点的最低祖先)
- 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题...
- java深度学习(一)Maven创建一个新的ND4J工程
- android 设备占用_如何查看正在占用Android设备的空间
- 图的单源最短路径(Dijkstra算法)
- android 隐藏输入法时自动关闭弹窗,Android监听输入法弹窗和关闭的实现方法
- 模线性同余方程组求解
- 最新三网免挂码支付系统源码+免授权版
- 华为安装gsm框架_华为Mate20手机怎么下载安装谷歌服务助手,GMS框架安装教程
- 电源完整性之Cadence Sigrity Power DC_电热协同仿真
- 华为android已锁定,教你如何查看华为手机是否己解锁bootloader
- Python-从txt中获取所有带有书名号的内容,并去除重复内容
- 洛谷P4704 太极剑(乱搞)
- CTP接口开发案例(内附源码)
- python视频教程410集免费_Python Web开发—进阶提升 490集超强Python视频教程 真正零基础学习Python视频教程...
- jdk1.7安装详细过程
- JS(JavaScript)详解
- 阿里巴巴联合欧莱雅发布移动端 AI 痘痘检测应用
热门文章
- sem_我知道的关键词1
- 理解离散傅立叶变换(三.复数)
- vue3.0 视频播放插件(vue-vedio-player)
- rtmp协议封装h264与h265打包flv发送
- 关于整型数据符号位扩展的问题
- 使用OpenCV的ANN_MLP神经网络实现数字识别
- mysql if exists 数据表_使用IF NOT EXISTS创建数据表
- linux方向键ascii_上下左右 方向键的ASCII码值是多少?
- 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 分级管理
- 开源IT从业者最受欢迎5大技能