关于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 条评论
登录 后参与评论

相关文章

来自专栏Pythonista

自动化部署nginx负载均衡及监控短信报警

开发脚本自动部署及监控 1.编写脚本自动部署反向代理、web、nfs; 要求: I、部署nginx反向代理三个web服务,调度算法...

852
来自专栏kl的专栏

mysql日志binlog消费初体验

早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从20...

5308
来自专栏MYSQL轻松学

Mysql5.5&Mysql5.6&Mysql5.7特性

Mysql5.5 特性,相对于Mysql5.1 性能提升 默认InnoDB plugin引擎。具有提交、回滚和crash恢复功能、ACID兼容。 行级锁(一致性...

3525
来自专栏腾讯云Elasticsearch Service

当Elasticsearch遇见Kafka--Logstash kafka input插件

Elasticsearch作为当前主流的全文检索引擎,除了强大的全文检索能力和高扩展性之外,对多种数据源的兼容能力也是其成功的秘诀之一。而Elasticsear...

1075
来自专栏大数据学习笔记

Hadoop基础教程-第12章 Hive:进阶(12.4 Hive Metastore)(草稿)

第12章 Hive:进阶 12.4 Hive Metastore 12.4.1 三种配置方式 Hive Metastore有三种配置方式,分别是: Embedd...

2687
来自专栏微信终端开发团队的专栏

微信 SQLite 数据库修复实践

微信在后台服务器不保存聊天记录,微信在移动客户端所有的聊天记录都存储在一个 SQLite 数据库中,一旦这个数据库损坏,将会丢失用户多年的聊天记录。

4231
来自专栏乐沙弥的世界

快速体验Percona XtraDB Cluster(PXC)

Percona XtraDB Cluster(简称PXC)集群是基于Galera 2.x library,事务型应用下的通用的多主同步复制插件,主要用于解决强一...

672
来自专栏Rainbond开源「容器云平台」

GitHub开源的MySQL在线更改Schema工具

1273
来自专栏Golang语言社区

高可用性、负载均衡的mysql集群解决方案

一、mysql的市场占有率 二、mysql为什么受到如此的欢迎 三、mysql数据库系统的优缺点 四、网络服务器的需求 五、什么是mysql的集群 六、什么是负...

5695
来自专栏IT大咖说

知数堂联合创始人叶金荣:MySQL 5.7新时代

摘要 MySQL 5.7版本新增了很多特别实用的功能,截止目前已经发布5.7.17版本,也越来越成熟了,而且Group Replication也GA了。就让我们...

3636

扫码关注云+社区