ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (CKPT的触发)

oracle实验记录 (CKPT的触发)

原创 Linux操作系统 作者:fufuh2o 时间:2009-06-26 10:13:54 0 删除 编辑

这是会触发一个完全检查点
SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            849115
            849115
            849115
            849115
            849115
            849115
                                
已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            849115

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            849115
            849115
            849115
            849115
            849115
            849115

已选择6行。

SQL> alter system checkpoint;

系统已更改。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            849184
            849184
            849184
            849184
            849184
            849184

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            849184

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            849184
            849184
            849184
            849184
            849184
            849184

已选择6行。                                     完全检查点 写如了 控制文件的datafile scn,system scn,数据文件头的start scn

 

实验2 alter system switch logfile 来实验看下


SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            849184
            849184
            849184
            849184
            849184
            849184

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            849184

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------                                        环境
            849184
            849184
            849184
            849184
            849184
            849184

已选择6行。
SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            849184
            849184
            849184
            849184
            849184
            849184

已选择6行。

SQL> select checkpoint_change# from v$database; 

CHECKPOINT_CHANGE#
------------------
            849184

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            849184
            849184
            849184
            849184
            849184
            849184                                        也是一个完全ckpt

已选择6行。

 


SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            854178
            854178
            854178
            854178
            854178
            854178

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            854178
            854178
            854178
            854178
            854178
            854178

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            854178

SQL> alter database datafile 5 offline;

数据库已更改。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            854178
            854178
            854178
            854178
            854178       854559
            854178

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            854178
            854178
            854178
            854178
            854178
            854178

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            854178

SQL> shutdown immediatel
SP2-0717: 非法的 SHUTDOWN 选项
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145750508 bytes
Database Buffers           25165824 bytes
Redo Buffers                 262144 bytes
数据库装载完毕。
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            857631

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            857631
            857631
            857631
            857631
            854178
            857631

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            857631       857631
            857631       857631
            857631       857631
            857631       857631
            854178       854559
            857631       857631

已选择6行。

SQL>
补充: 正常关闭也是一个 完全CKPT,完全CKPT的特点就是startscn=systescn=datafilescn 在mount下可以看到startscn=systescn=datafilescn =stopscn


不完全 SCN ,文件级检查点

SQL> alter tablespace testtb offline;           

表空间已更改。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            882119              

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            882119
            882119
            882119
            882119
            882119
            883616       883616                 当 一个表空间offline时发生CKPT 注意 写入了STOP SCN ,datafile SCN (在控制文件中)

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            882119
            882119
            882119
            882119
            882119
                 0                 数据文件头部SCN 归为0 即start scn 标为0
 
已选择6行。


SQL> shutdown immediate;        这是一个完全CKPT,
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            884221
            884221
            884221
            884221
            884221
                 0

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            884221       884221
            884221       884221
            884221       884221
            884221       884221
            884221       884221
            883616       883616

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            884221

SQL>                                       注意 这个正常关闭产生的完全CKPT 没有影响到 TESTTB表空间的数据文件,没有写入DATAFILE SCN,STOP SCN,SYSTEM SCN,
                                           STARTSCN还是0

SQL> alter database open; 这个语句产生了一个CKPT 全的 但是只递增了1

数据库已更改。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            884222

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            884222
            884222
            884222
            884222
            884222
            883616       883616

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            884222
            884222
            884222
            884222
            884222
                 0

已选择6行。


SQL> alter tablespace testtb online;

表空间已更改。
SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            884222
            884222
            884222
            884222
            884222
            884877

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            884222
            884222
            884222
            884222
            884222
            884877

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            884222


SQL> shutdown immediate;       关闭 正常产生了一个全CKPT 
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145750508 bytes
Database Buffers           25165824 bytes
Redo Buffers                 262144 bytes
数据库装载完毕。
数据库已经打开。
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            886021

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            886021
            886021
            886021
            886021
            886021
            886021

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            886021
            886021
            886021
            886021
            886021
            886021

 

 

总结,当发生表空间offline时候,触发一个文件级CKPT,写入数据文件中datafilescn,stopscn,并且其数据文件头部SCN 写为0
之后的一系列CKPT 都与该表空间无关 不写入。之后online产生一个对该表空间产生一个CKPT,写入  datafilescn, startscn 并且 stop scn 为NULL
此时该表空间的datafilescn,startscn >system scn ,而后运行中产生的 全局CKPT 自动会同步system scn=startscn=stopscn

 

 


read only产生的 文件级CKPT


1初始环境


SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            887555

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            887555
            887555
            887555
            887555
            887555
            887555

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            887555
            887555
            887555
            887555
            887555
            887555

已选择6行。

SQL> alter tablespace testtb read only; 产生一个CKPT

表空间已更改。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            887555
            887555
            887555
            887555
            887555
            887925

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            887555
            887555
            887555
            887555
            887555
            887925       887925          

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            887555   

SQL> alter  system  checkpoint;

系统已更改。


SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            887948

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            887948
            887948
            887948
            887948
            887948
            887925       887925

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            887948
            887948
            887948
            887948
            887948
            887925

SQL> alter tablespace testtb read write;

表空间已更改。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            887948
            887948
            887948
            887948
            887948
            888032

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            887948
            887948
            887948
            887948
            887948
            888032

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            887948


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145750508 bytes
Database Buffers           25165824 bytes
Redo Buffers                 262144 bytes
数据库装载完毕。
数据库已经打开。
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            888283

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            888283
            888283
            888283
            888283
            888283
            888283

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            888283
            888283
            888283
            888283
            888283
            888283

已选择6行。

结论:
read only与 offline(TS)很象,区别在于 read only时候用户还可以读取 该文件中信息 所以read only产生的CKPT 不仅写入了STOP SCN,DATAFILESCN ,更写入了
数据文件头的STARTSCN,offline(TS)已经不可读到信息,所以oracle将offline表空间的数据文件头部SCN写为0 标明,read write后也产生一个CKPT 使得该表空间数据文件
STARSCN=DATAFILESCN>SYSTEMSCN stop scn变会NULL,之后oracle 正常运行中产生全局CKPT 会自动同步STARSCN=DATAFILESCN=SYSTEMSCN

 

 

begin backup 这个是比较重要的也是比较容易出问题的
 
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            888283

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            888283
            888283
            888283
            888283                                   实验环境
            888283
            888283

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            888283
            888283
            888283
            888283
            888283
            888283

已选择6行。

 

SQL> alter tablespace testtb begin backup;

表空间已更改。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------                    
            888283
            888283
            888283
            888283
            888283
            888976                                产生了 文件级CKPT

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            888283
            888283
            888283
            888283
            888283
            888976                      给这个文件加锁了

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            888283          

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            889668

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            889668
            889668
            889668
            889668
            889668
            888976

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            889668
            889668
            889668
            889668
            889668
            888976


SQL> shutdown abort;                   强行关闭了 没有执行end backup
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145750508 bytes
Database Buffers           25165824 bytes
Redo Buffers                 262144 bytes
数据库装载完毕。
SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            889668
            889668
            889668
            889668
            889668
            888976

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            889668
            889668
            889668
            889668
            889668
            888976

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            889668

SQL>
                                         此时该文件startscn=datafile scn 不等于SYSTEM SCN


SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01113: 文件 6 需要介质恢复
ORA-01110: 数据文件 6: 'D:\自建表空间数据文件\TESTTB.DBF'   必须执行recover 介质恢复
SQL> recover datafile 6;
完成介质恢复。
SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            889668
            889668
            889668
            889668
            889668
            889811

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            889668

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            889668
            889668
            889668
            889668
            889668
            889811       889811

已选择6行。                                                            奇怪了 这是为什么造成的呢 readonly数据文件 也可以出现这种情况呀 在来看看为什么一定要
                                                                       介质恢复

SQL> alter database open;

数据库已更改。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            909813
            909813
            909813
            909813
            909813
            909813

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            909813

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            909813
            909813
            909813
            909813
            909813
            909813

已选择6行。

SQL> alter tablespace testtb read only;

表空间已更改。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            909813
            909813
            909813
            909813
            909813
            911343       911343

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            909813

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            909813
            909813
            909813
            909813
            909813
            911343

已选择6行。

SQL> start force mount;
SP2-0310: 无法打开文件 "force.sql"
SQL> startup force mount;
ORACLE 例程已经启动。

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145750508 bytes
Database Buffers           25165824 bytes
Redo Buffers                 262144 bytes
数据库装载完毕。
SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            909813
            909813
            909813
            909813
            909813
            911343

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            909813

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            909813
            909813                                   stop scn没有是因为 不是正常关闭 oracle没有写进controlfile中STOP SCN
            909813
            909813
            909813
            911343       911343

已选择6行。

  通过以上结论可以看出 未 end backup 不是 是因为   stopscn为NULL在MOUNT下 ,mount下stopscn为NULL 只需要例程恢复 由SMON自动完成
 
那是因为啥呢 结论很简单,当 offline(ts),read only时 都会产生CKPT 并写入STOP SCN , 等于做了一个标注,stopscn=startscn=datafilescn时候不需要恢复
未endbackup则 datafilescn=startscn 不等于systemscn 并且没有写进控制文件stopscn  所以必须recover recover 出startscn=datafilescn=stopscn
原因是begingbackup时候 对数据文件加了SCN 使齐不变 备份时候的SCN ,但数据仍然可以 写进 数据文件,所产生的CKPT由SYSTEMSCN 来记录endbackup后 startscn,datafilescn会自动同步到system scn

 


SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            931768

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            931768
            931768
            931768
            931768
            931768
            931768

已选择6行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            931768
            931768
            931768
            931768
            931768
            931768

已选择6行。

SQL> alter tablespace testtb begin backup;

表空间已更改。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            931768
            931768
            931768
            931768
            931768
            931780

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            931768

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            931768
            931768
            931768
            931768
            931768
            931780

已选择6行。

SQL> alter tablespace testtb end backup;

表空间已更改。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            931768
            931768
            931768
            931768
            931768
            931780

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            931768

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
            931768
            931768
            931768
            931768
            931768
            931780

已选择6行。

SQL>

 


~
08.08.19~~~~~~~~~~~~~~~实验

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1766408
           1766408
           1766408
           1766408
           1766408
           1766408

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1766408

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1766408
           1766408
           1766408
           1766408
           1766408
           1766408

已选择6行。


SQL> alter system switch  logfile;

系统已更改。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1766408
           1766408
           1766408
           1766408
           1766408
           1766408

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1766408

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1766408
           1766408
           1766408
           1766408
           1766408
           1766408

已选择6行。

SQL> alter tablespace testtb begin backup;

表空间已更改。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1766408
           1766408
           1766408
           1766408
           1766408
           1766500

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1766408

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1766408

SQL> alter system switch logfile;

系统已更改。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1766477

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1766477
           1766477
           1766477
           1766477
           1766477
           1766500

已选择6行。

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1766477
           1766477
           1766477
           1766477
           1766477
           1766500

已选择6行。

SQL>


SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1766477
           1766477
           1766477
           1766477
           1766477
           1766500

已选择6行。
SQL> alter tablespace testtb end backup;

表空间已更改。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1766477
           1766477
           1766477
           1766477
           1766477
           1766500

已选择6行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1766477

SQL>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12020513/viewspace-607610/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    427944