关于SCN的总结测试 (68天)

scn是数据库对自身变化的一个标记。通过一个序列号能够反映出数据库在那个时间点正在进行的操作,scn没有选用时间来作为基准单位,可能也是因为时间的不确定性,比如当前时间为2014年3月14号晚上八点整,如果修改了系统时间,改为晚上七点钟,name重启数据库以后,那个时间段的操作就都乱套了。这个scn在一般的库上都看似比较大,根据数据库的设计角度来说,这个scn能够使用很长很长的时间。 scn的变化也基本分为四类,实例级别scn,数据文件scn,数据文件头scn,结束scn,为了测试scn的变化情况,准备了下面的场景 1)全局检查点更新 如alter system checkpoint,数据库级scn应该会发生变化。 2)resize 数据文件 把数据文件的大小进行改变 3)切换redo日志文件 4)归档当前日志文件 5)创建表 6)插入数据 7)插入一些数据,频繁的commit 8)插入一些数据,频繁的rollback 测试的结果如下,对于发生变化的部分都用黄色进行了标注。可以比对测试场景对比学习一下。有些场景没有涉及到,目的只是向大家分享一下日常的操作中scn的变化。

测试场景

database level

datafile&header

redo log

chk_change#

ctl_change#

ctl_time

curr_scn

archive_change#

chk_change#

last_change#

first_change#

nxt_change#

beginning

3626097

3626320

2014-05-09 02:56:11

3626335

3626097

pool_data 3626318others 3626097

504377

514666

alter system checkpoint;

3626336

3626336

2014-05-09 02:56:36

3626337

3626097

3626336

504377

514666

resize datafile

3626336

3626338

2014-05-09 02:56:38

3626346

3626097

3626336

504377

514666

alter system switch logfile;

3626336

3626349

2014-05-09 02:56:38

3626350

3626097

3626336

504377

514666

alter system archive log current;

3626336

3626354

2014-05-09 02:56:39

3626355

3626354

3626336

504377

514666

create table aaaa as select * from dba_objects;

3626336

3626354

2014-05-09 02:56:39

3626417

3626354

3626336

504377

514666

insert into aaaa select *from aaaa;commit;

3626336

3626354

2014-05-09 02:56:39

3626442

3626354

3626336

504377

514666

insert,commit;insert,commit;insert,commit;…

3626336

3626354

2014-05-09 02:56:39

3626459

3626354

3626336

504377

514666

insert,insert,insert...rollback

3626336

3626354

2014-05-09 02:56:39

3626462

3626354

3626336

504377

514666

生成scn快照的脚本如下,对于每一个操作,都可以使用下面的脚本从数据库级,数据文件,数据文件头,在线日志等维度进行scn的查验。

sqlplus -s n1/n1 <<EOF
set pages 20
prompt ######scn from database level
col checkpoint_change# format 99999999999999999
col RESETLOGS_CHANGE# format 99999999999999999
col PRIOR_RESETLOGS_CHANGE# format 99999999999999999 
col CONTROLFILE_CHANGE# format 99999999999999999 
col ARCHIVELOG_CHANGE# format 99999999999999999 
col CURRENT_SCN format 99999999999999999
col control_time format a20
set linesize 200
select RESETLOGS_CHANGE# ,RESETLOGS_TIME,PRIOR_RESETLOGS_CHANGE#,CHECKPOINT_CHANGE#,CONTROLFILE_CHANGE# ,to_char(CONTROLFILE_TIME,'yyyy-mm-dd hh24:mi:ss') control_time,ARCHIVELOG_CHANGE#,CURRENT_SCN from v\$database;


prompt #####scn from datafile


col checkpoint_change# format 99999999999999999
col creation_change# format 99999999999999999
col checkpoint_change# format 99999999999999999
col last_change# format 99999999999999999
col online_change# format 99999999999999999
col online_time format a20
col last_time format a20
col checkpoint_time format a20
col creation_time format a9
col file# format 999
set linesize 200
select file#,creation_change#,creation_time,checkpoint_change#,to_char(checkpoint_time,'yyyy-mm-dd hh24:mi:ss') checkpoint_time,last_change#,to_char(last_time,'yyyy-mm-dd hh24:mi:ss')last_time,offline_change#,online_change#,to_char(online_time,'yyyy-mm-dd hh24:mi:ss')online_time from v\$datafile;




prompt #####scn from datafile header
col tablespace_name format a10
col resetlogs_change# format 99999999999999999
col creation_time format a9
--col undo_opt_current_change# format 99999999999999999
col checkpoint_time format a20
set linesize 200
select file#,creation_change#,creation_time,tablespace_name,resetlogs_change#,resetlogs_time,checkpoint_change#,checkpoint_time,checkpoint_count from v\$datafile_header;


prompt #####scn from redo   
col first_change# format 99999999999999999
col next_change# format 99999999999999999
col sequence# format 99999999999999999
select *from (select recid,sequence#,first_change#,next_change# from v\$log_history )
where rownum<20;


EOF
exit



--对如上的测试场景中scn的变化进行总结,一共会生成9个快照。
ksh showscn.sh >beginning_snshowscn.shot.lst0
sqlplus -s n1/n1 <<EOF


alter system checkpoint;  --全局,数据文件,数据文件头部scn都递增,保持一致
EOF
ksh showscn.sh > checkpoint_snshowscn.shot.lst1
sqlplus  -s n1/n1 <<EOF
alter database datafile '/u03/ora11g/oradata/TEST01/pool_data02.dbf' resize 160M;   -->只有数据库级scn递增
EOF
ksh showscn.sh > resize_datafile_snshowscn.shot.lst2
sqlplus  -s n1/n1 <<EOF
alter system switch logfile;  -->日志文件scn递增
EOF
ksh showscn.sh > redo_switch_snshowscn.shot.lst3
sqlplus  -s n1/n1 <<EOF
alter system archive log current;
EOF
ksh showscn.sh >archive_current_snshowscn.shot.lst4


sqlplus  -s n1/n1 <<EOF
create table aaaa as select * from dba_objects;
EOF
ksh showscn.sh >create_tab_snshowscn.shot.lst5


sqlplus -s n1/n1 <<EOF
insert into aaaa select *from aaaa;
commit;
EOF
ksh showscn.sh >insert_tab_snshowscn.shot.lst6


sqlplus  -s n1/n1 <<EOF
insert into aaaa select *from aaaa where rownum<10;
commit;
insert into aaaa select *from aaaa where rownum<10;
commit;
insert into aaaa select *from aaaa where rownum<10;
commit;
insert into aaaa select *from aaaa where rownum<10;
commit;
insert into aaaa select *from aaaa where rownum<10;
commit;
insert into aaaa select *from aaaa where rownum<10;
commit;
insert into aaaa select *from aaaa where rownum<10;
commit;
insert into aaaa select *from aaaa where rownum<10;
commit;
EOF
ksh showscn.sh >over_commit_snshowscn.shot.lst7


sqlplus  -s n1/n1 <<EOF
insert into aaaa select *from aaaa where rownum<10;
insert into aaaa select *from aaaa where rownum<10;
insert into aaaa select *from aaaa where rownum<10;
insert into aaaa select *from aaaa where rownum<10;
insert into aaaa select *from aaaa where rownum<10;
insert into aaaa select *from aaaa where rownum<10;
insert into aaaa select *from aaaa where rownum<10;
insert into aaaa select *from aaaa where rownum<10;
rollback;
EOF
ksh showscn.sh >rollback_snshowscn.shot.lst8

运行脚本的日志如下:

System altered.
Database altered.
System altered.
System altered.
Table created.
13470 rows created.
Commit complete.
9 rows created.
Commit complete.
9 rows created.
Commit complete.
9 rows created.
Commit complete.
9 rows created.
Commit complete.
9 rows created.
Commit complete.
9 rows created.
Commit complete.
9 rows created.
Commit complete.
9 rows created.
Commit complete
9 rows created.
9 rows created.
9 rows created.
9 rows created.
9 rows created.
9 rows created.
9 rows created.
9 rows created.
Rollback complete.

--生成的快照如下:
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 beginning_snshowscn.shot.lst0
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 checkpoint_snshowscn.shot.lst1
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 resize_datafile_snshowscn.shot.lst2
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 redo_switch_snshowscn.shot.lst3
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 archive_current_snshowscn.shot.lst4
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 create_tab_snshowscn.shot.lst5
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 insert_tab_snshowscn.shot.lst6
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 over_commit_snshowscn.shot.lst7
-rw-r--r-- 1 ora11g dba 3144 May  9 02:56 rollback_snshowscn.shot.lst8

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2060
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6798
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2762
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4878
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4708
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3135
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4617
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2707

扫码关注云+社区