[20171115]redo and commit.txt

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: [20171115]redo and commit.txt --//参考Jonathan Lewis的https://jonathanlewis.wordpress.com/2011/08/19/redo-2/ --//很早以前的帖子,自己觉得很有意思,重复测试: --//事务已经提交,但是redo log buffer还没有写到磁盘.

[20171115]redo and commit.txt

--//参考Jonathan Lewis的https://jonathanlewis.wordpress.com/2011/08/19/redo-2/
--//很早以前的帖子,自己觉得很有意思,重复测试:

--//事务已经提交,但是redo log buffer还没有写到磁盘.看看发生什么情况?

1.环境:
SCOTT@book> @&r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.建立测试环境:
--//session 1:
create table t1(n1 number);
insert into t1 values(1);
commit;

--//session 2:
$ ps -ef  | grep ora_lgwr_boo[k]
oracle    9275     1  0 08:29 ?        00:00:00 ora_lgwr_book

SYS@book> oradebug setospid 9275
Oracle pid: 13, Unix process pid: 9275, image: oracle@xxxx (LGWR)

SYS@book> oradebug suspend
Statement processed.

--//这样做的目的认为挂起写redo日志文件.

3.测试:
--//session 1:
update t1 set n1 = 2;
commit;
--//挂起!!

--//session 2:
SYS@book> select * from scott.t1;

        N1
----------
         2

SYS@book> @ &r/wait
P1RAW            P2RAW            P3RAW  P1         P2  P3  SID  SERIAL#  SEQ# EVENT         STATE   WAIT_TIME_MICRO SECONDS_IN_WAIT
---------------- ---------------- ----- --- ---------- --- ---- -------- ----- ------------- ------- --------------- ---------------
00000000000001B8 0000000017701BD7 00    440  393223127   0  274        5    84 log file sync WAITING        26787924              27


--//可以发现session 1的提交已经生效,做一个shutdown abort.  然后重启数据库
SYS@book> shutdown abort
ORACLE instance shut down.
SYS@book> startup
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.
Database opened.

SYS@book> select * from scott.t1;
        N1
----------
         1

--//回到原来的值.

--//也许你认为提交根本就是挂起了,根本没有完成.
--//但是你简单做一个放大,假设commit时间很长,commit主要操作修改块,做一个快速提交,然后修改undo 事务槽标识,标识事务已经提交,然后将
--//这些修改从日志缓存写入日志文件.

--//提交的当中还没有完成前(至少认为写入日志文件才会完成),这个时候你另外的会话已经可以看到提交的结果.

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
缓存 Oracle 关系型数据库
Oracle中控制commit的三个参数 commit_write, commit_logging和 commit_wait
Oracle中控制commit的动作有三个参数 commit_write, commit_logging和 commit_wait,按重要性分别说明如下
277 0
|
存储 SQL 关系型数据库
【redo log、bin log、undolog、purge操作、group commit】
【redo log、bin log、undolog、purge操作、group commit】
200 0
|
关系型数据库 Oracle
|
分布式计算 Hadoop 关系型数据库
|
缓存 Oracle 关系型数据库
[20170419]关于块scn号.txt
[20170419]关于块scn号.txt --//数据块里面有许多scn号相关。 --//数据块本身有三处记录的相应的SCN:数据块头的SCN(block scn)、ktbbh结构下的 kscnbas,kscnwrp(cleanout scn)、ITL信息中的...
1040 0
|
监控 Oracle 关系型数据库
[20170308]关于redo dump.txt
[20170308]关于redo dump.txt --//前一阵子在探究是否可以备库的备用日志来恢复主库,当主库在线日志丢失的情况下.遇到一些问题. DUMP OF REDO FROM FILE '/mnt/ramdisk/book/redo01.
713 0
|
Oracle 关系型数据库 数据库
[20170215]再次理解flush redo.txt
[20170215]再次理解flush redo.txt --链接: http://blog.itpub.net/267265/viewspace-1992583/ http://blog.itpub.net/267265/viewspace-1992840/ 在Oracle 11g里,Data Guard 切换多了一个新的功能:flush redo。
1186 0
|
SQL 数据库管理 关系型数据库
[20161003]触发器与redo.txt
[20161003]触发器与redo.txt --对于触发器,我个人认为对于dba是最讨厌的东西,它使得维护变得困难,不小心就陷入陷阱里面. --我曾经跟开发讲过建立一个触发器相当于给表建立一个索引.
714 0
|
SQL Oracle 关系型数据库
[20160406] 恢复until scn NNN.txt
[20160406] 恢复until scn NNN.txt --昨天别人问的问题,如果使用rman恢复,restore database until scn NNN;是恢复到NNN,还是NNN-1.
838 0