[20150910]关于对象级检查点.txt

[20150910]关于对象级检查点.txt

--oracle从8i以后基本使用增量检查点取代原来的检查点模式,但是如果一个对象表被drop,truncate时也要将这些脏块写文件.
--这个叫Object level Checkpoint,如何验证这个过程,实际上很简单仅仅需要检查v$bh或者x$bh视图,或者转储脏块看看里面
--的内容是否存在变化,来验证这个过程,还是通过例子来说明:

--我个人喜欢使用bbed观察,效果与块转储一直。

1.建立测试环境:

SCOTT@test> @ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> show parameter alert
NAME                      TYPE     VALUE
------------------------- -------- --------
log_checkpoints_to_alert  boolean  TRUE

--设置log_checkpoints_to_alert=true,主要是为了测试需要,如果存在full checkpoint以及增量检查会写alert日志文件。

create table t1 as select 1 id1 ,cast('aaaa' as varchar2(20)) name from dual ;
create table t2 as select 2 id1 ,cast('bbbb' as varchar2(20)) name from dual ;

SCOTT@test> select rowid,t1.* from t1;
ROWID                     ID1 NAME
------------------ ---------- --------------------
AABMuyAAEAAAACjAAA          1 aaaa

SCOTT@test> @rowid AABMuyAAEAAAACjAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
    314290          4        163          0 4,163                alter system dump datafile 4 block 163 ;

SCOTT@test> select rowid,t2.* from t2;
ROWID                     ID1 NAME
------------------ ---------- --------------------
AABMuzAAEAAAAITAAA          2 bbbb

SCOTT@test> @rowid AABMuzAAEAAAAITAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
    314291          4        531          0 4,531                alter system dump datafile 4 block 531 ;

alter system checkpoint;

--查看alert日志:
Fri Sep 11 09:26:47 2015
Beginning global checkpoint up to RBA [0xe09.dcac.10], SCN: 13200870007
Completed checkpoint up to RBA [0xe09.dcac.10], SCN: 13200870007

2.测试:

SCOTT@test> @bh 4 163
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC91E120       4         163     1 data block         xcur                1          0          0          0          0          0 000000008FD54000 T1
00000000BC91E120       4         163     1 data block         free                0          0          0          0          0          0 0000000093ED4000

SCOTT@test> @bh 4 531
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC78AD68       4         531     1 data block         xcur                1          0          0          0          0          0 0000000090D20000 T2

update t1 set name=upper(name) where id1=1;
update t2 set name=upper(name) where id1=2;

SCOTT@test> @bh 4 163
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC91E120       4         163     1 data block         xcur                1          0          0          0          0          0 0000000094B60000 T1
00000000BC91E120       4         163     1 data block         cr                  1  315968373          3          0          0          0 000000008FD54000 T1
00000000BC91E120       4         163     1 data block         free                0          0          0          0          0          0 0000000093ED4000

SCOTT@test> @bh 4 531
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC78AD68       4         531     1 data block         xcur                1          0          0          0          0          0 00000000925AA000 T2
00000000BC78AD68       4         531     1 data block         cr                  1  315968377          3          0          0          0 0000000090D20000 T2

--如果仔细看可以发现BA地址(0000000090D20000)的state,在修改后从XCUR变成了CR。

truncate table t2;

SCOTT@test> truncate table t2;
Table truncated.

SCOTT@test> @bh 4 163
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC91E120       4         163     1 data block         xcur                1          0          0          0          0          0 0000000094B60000 T1
00000000BC91E120       4         163     1 data block         cr                  1  315968373          3          0          0          0 000000008FD54000 T1
00000000BC91E120       4         163     1 data block         free                0          0          0          0          0          0 0000000093ED4000

SCOTT@test> @bh 4 531
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC78AD68       4         531     1 data block         cr                  1  315968377          3          0          0          0 0000000090D20000

--表T2的state仅仅存在CR。

--观察alert日志:
Fri Sep 11 09:26:47 2015
Beginning global checkpoint up to RBA [0xe09.dcac.10], SCN: 13200870007
Completed checkpoint up to RBA [0xe09.dcac.10], SCN: 13200870007
--并没有写增量检查点。

3.通过bbed观察:
BBED> set dba 4,163
        DBA             0x010000a3 (16777379 4,163)

BBED> p *kdbr[0]
rowdata[0]
----------
ub1 rowdata[0]                              @8177     0x2c

BBED> x /rncn
rowdata[0]                                  @8177
----------
flag@8177: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8178: 0x00
cols@8179:    2

col    0[2] @8180: 1
col    1[4] @8183: aaaa

BBED> set dba 4,531
        DBA             0x01000213 (16777747 4,531)

BBED> p *kdbr[0]
rowdata[0]
----------
ub1 rowdata[0]                              @8177     0x2c

BBED> x /rncn
rowdata[0]                                  @8177
----------
flag@8177: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8178: 0x02
cols@8179:    2

col    0[2] @8180: 2
col    1[4] @8183: BBBB

--注意看数据块的内容可以发现dba=4,531的块的信息已经写盘(name内容变成了大写),而dba=4,163的块信息依旧name内容是小写。
--说明T2相关的块信息已经写入数据文件。

SCOTT@test> @spid
       SID    SERIAL# SPID   C50
---------- ---------- ------ --------------------------------------------------
       399       1781 21284  alter system kill session '399,1781' immediate;

SCOTT@test> select * from V$SESSION_EVENT where sid=399;
       SID EVENT                                    TOTAL_WAITS TOTAL_TIMEOUTS TIME_WAITED AVERAGE_WAIT   MAX_WAIT TIME_WAITED_MICRO   EVENT_ID WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
---------- ---------------------------------------- ----------- -------------- ----------- ------------ ---------- ----------------- ---------- ------------- ----------- --------------------
       399 Disk file operations I/O                           8              0           0          .03          0              2314  166678035    1740759767           8 User I/O
       399 direct path sync                                   1              0           2         2.41          2             24055 2093619153    1740759767           8 User I/O
       399 control file sequential read                      14              0           0            0          0               163 3213517201    4108307767           9 System I/O
       399 local write wait                                   3              0           4         1.38          2             41252 1570123276    1740759767           8 User I/O
       399 enq: RO - fast object reuse                        2              0           5         2.51          5             50110  143262751    4217450380           1 Application
       399 log file sync                                      6              0           5          .89          2             53564 1328744198    3386400367           5 Commit
       399 db file sequential read                           30              0          15          .52          5            154818 2652584166    1740759767           8 User I/O
       399 SQL*Net message to client                         52              0           0            0          0               139 2067390145    2000153315           7 Network
       399 SQL*Net message from client                       51              0      276079       5413.3     185635        2760785228 1421975091    2723168908           6 Idle
       399 SQL*Net break/reset to client                      5              0           0            0          0               226 1963888671    4217450380           1 Application
       399 events in waitclass Other                          6              3          37         6.14         37            368495 1736664284    1893977003           0 Other
11 rows selected.

--你可以看到event='enq: RO - fast object reuse',这个就是truncate table t2的缘故。

4.继续测试drop的情况:
--因为测试的时间问题,主要是避开中间执行增量检查,先做一次full checkpoint。

alter system checkpoint;

--alert日志,在输出一个full checkpoint.
Fri Sep 11 09:26:47 2015
Beginning global checkpoint up to RBA [0xe09.dcac.10], SCN: 13200870007
Completed checkpoint up to RBA [0xe09.dcac.10], SCN: 13200870007
Fri Sep 11 09:46:27 2015
Beginning global checkpoint up to RBA [0xe09.e485.10], SCN: 13200871682
Completed checkpoint up to RBA [0xe09.e485.10], SCN: 13200871682

SCOTT@test> @bh 4 163
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC91E120       4         163     1 data block         xcur                1          0          0          0          0          0 0000000094B60000 T1
00000000BC91E120       4         163     1 data block         cr                  1  315968373          3          0          0          0 000000008FD54000 T1
00000000BC91E120       4         163     1 data block         free                0          0          0          0          0          0 0000000093ED4000

update t1 set name='BBBB' where id1=1;
drop table t1;

SCOTT@test> @bh 4 163
HLADDR           DBARFIL      DBABLK CLASS CLASS_TYPE         STATE             TCH CR_SCN_BAS CR_SCN_WRP CR_UBA_FIL CR_UBA_BLK CR_UBA_SEQ BA               OBJECT_NAME
---------------- ------- ----------- ----- ------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- --------------------
00000000BC91E120       4         163     1 data block         free                0          0          0          0          0          0 0000000093F32000
00000000BC91E120       4         163     1 data block         cr                  1  315969875          3          0          0          0 0000000094B60000
00000000BC91E120       4         163     1 data block         cr                  1  315968373          3          0          0          0 000000008FD54000
00000000BC91E120       4         163     1 data block         free                0          0          0          0          0          0 0000000093ED4000

5.通过bbed观察:

BBED> set dba 4,163
        DBA             0x010000a3 (16777379 4,163)

BBED> p *kdbr[0]
rowdata[0]
----------
ub1 rowdata[0]                              @8177     0x2c

BBED> x /rncn
rowdata[0]                                  @8177
----------
flag@8177: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8178: 0x03
cols@8179:    2

col    0[2] @8180: 1
col    1[4] @8183: BBBB

--注意看数据块的内容可以发现dba=4,163的块的信息已经写盘(name内容变成了大写'BBBB').
--说明T1相关的块信息已经写入数据文件。

SCOTT@test> select * from V$SESSION_EVENT where sid=399;
       SID EVENT                                    TOTAL_WAITS TOTAL_TIMEOUTS TIME_WAITED AVERAGE_WAIT   MAX_WAIT TIME_WAITED_MICRO   EVENT_ID WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
---------- ---------------------------------------- ----------- -------------- ----------- ------------ ---------- ----------------- ---------- ------------- ----------- --------------------
       399 Disk file operations I/O                           8              0           0          .03          0              2314  166678035    1740759767           8 User I/O
       399 direct path sync                                   1              0           2         2.41          2             24055 2093619153    1740759767           8 User I/O
       399 control file sequential read                      14              0           0            0          0               163 3213517201    4108307767           9 System I/O
       399 local write wait                                   3              0           4         1.38          2             41252 1570123276    1740759767           8 User I/O
       399 enq: RO - fast object reuse                        3              0           6         2.01          5             60152  143262751    4217450380           1 Application
       399 log file sync                                      8              0           7           .9          2             72297 1328744198    3386400367           5 Commit
       399 db file sequential read                           43              0          19          .45          5            194899 2652584166    1740759767           8 User I/O
       399 SQL*Net message to client                         63              0           0            0          0               169 2067390145    2000153315           7 Network
       399 SQL*Net message from client                       62              0      336818      5432.54     185635        3368175121 1421975091    2723168908           6 Idle
       399 SQL*Net break/reset to client                      5              0           0            0          0               226 1963888671    4217450380           1 Application
       399 events in waitclass Other                          8              3          75         9.36         38            749168 1736664284    1893977003           0 Other

11 rows selected.

--你可以看到event='enq: RO - fast object reuse',有增加1次。

--总结:
--从以上的测试说明:drop 以及 truncate时,涉及到的对象脏块会写盘。这个叫Object level Checkpoint。

时间: 2024-10-23 18:19:41

[20150910]关于对象级检查点.txt的相关文章

[20141202]改变文件大小与检查点.txt

[20141202]改变文件大小与检查点.txt Resize datafile会触发一个文件级检查点,真的是这样吗?自己做一个测试: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----------------------------------------------------------------

对象级存储正准备替代企业中的NAS

NAS文件服务器或文件管理器在过去的25年里一直是存储非结构化数据或非标准数据库数据的传统方式.面向非结构化数据,并不意味着数据本身没有结构,因为文件本质上就是一个二进制对象.基于以上原理,许多供应商已经为相同的非结构化数据同时提供对象级存储和文件级存储接口,我们有望看到新兴的对象存储成为传统文件服务器的替代者. 我们将在这篇文章中讨论混合使用对象级存储和文件存储两种方式来存储非结构化数据时的优劣对比,并研究IT部门在考察相关产品时应该考虑哪些重点. NAS历史回顾 NAS涵盖了源自IT世界两段

[20151116]rman 全备份以及增量0级备份.txt

[20151116]rman 全备份以及增量0级备份.txt --前一阵子写了一篇将as copy作为增量0级备份的帖子,今天对比全备份以及增量0级备份的不同. 1.测试环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- --------------------------------------

[20150911]关于增量检查点.txt

[20150911]关于增量检查点.txt --昨天被人问及我们的测试库,增量检查点的问题,我告诉对方,我设置了参数log_checkpoints_to_alert=true,当写增量检查点时会 --同时写入alert*.log日志文件,被问及时间间隔问题,实际上增量检查点的写入与许多因素相关,比如如果数据库修改很多,数据缓存 --大小,redo file的大小以及数量都存在关系. --但是我的测试库基本我自己用,没事看看增量检查点的间隔是多少,会与什么参数有关. $ grep -B1 "^In

[20150308]热备份和数据库检查点.txt

[20150308]热备份和数据库检查点.txt --今天看书,提到在热备份前,会做了一个数据文件检查点操作. --实际上这个很好理解: 开始热备份时候,做了一个数据文件检查点操作,因为热备份时备份要产生的日志很大,数据库必须要知道那个时候开始,做这项工作. 保证了在热备份期间,只有在发出热备份命令之后的时间里修改的块可能会被写到数据文件上. --自己做一个简单检查: SCOTT@test> @ver1 PORT_STRING                    VERSION       

《精通QTP——自动化测试技术领航》—第1章1.5节QTP精华—对象库(上)之基础攻略篇

1.5 QTP精华-对象库(上)之基础攻略篇 精通QTP--自动化测试技术领航 阶段要点 初步了解QTP中的测试对象模型. 明确Object Identification是管理对象模型的长官. 掌握智能识别原理.机制和各项设置. 对象库基本操作之添加.更新.对象闪烁.副对象库(Associate Repositorys). 一个有趣的实验证明,做项目时手工添加对象的好处与效率. Export Local Objects与Export and Replace Local Objects. 掌握并熟

深入探索CORBA对象生命周期之慨述

在服务器端,服务器的ORB在运行时从网络读取请求,并通过调用在第一个安装的消息拦截器上的receive_message( )开始处理请求.ORB用对象关键词以标识目标必须含有POA的名字,通过POA才能到达该对象.找到正确的POA后,下一步是寻找对象本身,这个工作如何完成取决于为对象的POA定义的策略.如果对象能够定位,ORB通过调用在第一个安装的请求拦截器上的target_invoke( )来继续处理请求,拦截器则使用DII函数invoke( )来依次继续处理请求,这在客户端中已经讨论过.这里

在Delphi与C++之间实现函数与对象共享

在Delphi中调用C++函数与C++调用Delphi函数相当直接,需要注意的是,Delphi 1默认的函数调用方式是Pascal方式,Delphi 4.Delphi 5的默认方式则是优化的cdecl调用方式,即register方式.要在C++ 与Delphi程序之间实现函数共享,除非有充分的原因,否则应该使用标准系统调用方式,即stdcall方式.为了使C++编译器不将函数标记为"mangled",使Delphi编译器误认为函数是采用cdecl调用方式,应该在C++代码中,以exte

java对象序列化的概念和实现

一 序列化的概念和实现方法 序列化的概念就是把一个Object直接转换成为Byte流写到硬盘或者通过网络进行传播.Java序列化技术可以将一个对象的状态写入一个Byte流里,并且可以从其它地方把该Byte流里的数据读出来,重新构造一个相同的对象.这种机制允许将对象通过网络进行传播,并可以随时把对象持久化到数据库.文件等系统里.Java的序列化机制是RMI.EJB等技术的技术基础.   序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将