1. 目的
测试验证一下,alter database begin backup命令执行以后在数据库进行的dml操作,数据是否写回到了数据文件当中。
2. 创建一个新的表空间
--创建tbs_xb表空间
SQL> create tablespace tbs_xb datafile '/data/oracle/oradata/zlzcs/xb01.dbf' size 50m autoextend on;
Tablespace created.
--查看数据文件
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/data/oracle/oradata/zlzcs/system01.dbf
/data/oracle/oradata/zlzcs/undotbs01.dbf
/data/oracle/oradata/zlzcs/sysaux01.dbf
/data/oracle/oradata/zlzcs/users01.dbf
/data/oracle/oradata/zlzcs/xb01.dbf
--通过操作系统命令查看数据文件大小
[root@localhost zlzcs]# ll -h
total 6.1G
-rw-r----- 1 oracle oinstall 469M May 3012:48 backup
-rw-r----- 1 oracle oinstall 10M May 30 15:27 control01.ctl
-rw-r----- 1 oracle oinstall 10M May 30 15:27 control02.ctl
-rw-r----- 1 oracle oinstall 10M May 30 15:27 control03.ctl
-rw-r----- 1 oracle oinstall 51M May 30 15:20 redo01.log
-rw-r----- 1 oracle oinstall 51M May 30 15:20 redo02.log
-rw-r----- 1 oracle oinstall 51M May 30 15:27 redo03.log
-rw-r----- 1 oracle oinstall 51M May 30 15:19 redo04.log
-rw-r----- 1 oracle oinstall 51M May 30 15:20 redo05.log
-rw-r----- 1 oracle oinstall 51M May 30 15:20 redo06.log
-rw-r----- 1 oracle oinstall 51M May 30 15:20 redo07.log
-rw-r----- 1 oracle oinstall 51M May 30 15:20 redo08.log
-rw-r----- 1 oracle oinstall 241M May 3015:27 sysaux01.dbf
-rw-r----- 1 oracle oinstall 481M May 3015:26 system01.dbf
-rw-r----- 1 oracle oinstall 48M May 30 12:21 temp01.dbf
-rw-r----- 1 oracle oinstall 4.5G May 3015:27 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5.1M May 3015:26 users01.dbf
-rw-r----- 1 oracle oinstall 51MMay 30 15:26 xb01.dbf—文件大小初始为51M
--查询user_segments表
SQL> select segment_name,blocks,bytes/1024/1024 from user_segments where segment_name='TB_TEST';
SEGMENT_NAME BLOCKS BYTES/1024/1024
------------------------------------------------------------ ---------------
TB_TEST 8 .0625
3. 在新的表空间上创建测试表,并插入数据
--创建测试表tb_test
SQL> create table tb_test (idinteger,name varchar2(50)) tablespace tbs_xb;
Table created.
--修改数据库为备份状态
SQL> alter database begin backup;
Database altered.
--插入数据
SQL> begin
2 for i in 1..10000000 loop
3 insert into tb_test values(i,'striverzhaolizheng'||i);
4 end loop;
5 end;
6 /
4. 查看scn的变化
--查看数据库的scn
SQL>select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
784154
--查看数据文件的scn
SQL>select checkpoint_change# from v$datafile;
CHECKPOINT_CHANGE#
------------------
783972
783972
783972
783972
783972
--查看数据文件头的scn
SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
783972
783972
783972
783972
783972
控制文件中记录的数据文件scn和数据文件头部记录的scn是一致的。但是数据库的scn号是变化的.
5. 查看数据文件的大小是否发生变化
1.
SQL> select segment_name,blocks,bytes/1024/1024 fromuser_segments where segment_name='TB_TEST';
SEGMENT_NAME BLOCKS BYTES/1024/1024
------------------------------ ---------------
TB_TEST 4992 39
--通过操作系统命令查看文件变化
[root@localhost zlzcs]# ll -h
total6.1G
-rw-r-----1 oracle oinstall 469M May 30 12:48 backup
-rw-r-----1 oracle oinstall 10M May 30 15:44control01.ctl
-rw-r-----1 oracle oinstall 10M May 30 15:44control02.ctl
-rw-r-----1 oracle oinstall 10M May 30 15:44control03.ctl
-rw-r-----1 oracle oinstall 51M May 30 15:44redo01.log
-rw-r-----1 oracle oinstall 51M May 30 15:44redo02.log
-rw-r-----1 oracle oinstall 51M May 30 15:44redo03.log
-rw-r-----1 oracle oinstall 51M May 30 15:41redo04.log
-rw-r-----1 oracle oinstall 51M May 30 15:41redo05.log
-rw-r-----1 oracle oinstall 51M May 30 15:42redo06.log
-rw-r-----1 oracle oinstall 51M May 30 15:42redo07.log
-rw-r-----1 oracle oinstall 51M May 30 15:42redo08.log
-rw-r-----1 oracle oinstall 241M May 30 15:44 sysaux01.dbf
-rw-r-----1 oracle oinstall 481M May 30 15:44 system01.dbf
-rw-r-----1 oracle oinstall 48M May 30 12:21temp01.dbf
-rw-r-----1 oracle oinstall 4.5G May 30 15:44 undotbs01.dbf
-rw-r-----1 oracle oinstall 5.1M May 30 15:44 users01.dbf
-rw-r----- 1 oracleoinstall 57M May 30 15:44 xb01.dbf—增大为57m
--反复查看几次
--插入完成以后再查看
SQL> /
SEGMENT_NAME BLOCKS BYTES/1024/1024
-------------------- ---------- ---------------
TB_TEST 56320 440
--使用操作系统命令查看
[root@localhost zlzcs]# ll -h
total 6.5G
-rw-r----- 1 oracle oinstall 469M May 3012:48 backup
-rw-r----- 1 oracle oinstall 10M May 30 15:53 control01.ctl
-rw-r----- 1 oracle oinstall 10M May 30 15:53 control02.ctl
-rw-r----- 1 oracle oinstall 10M May 30 15:53 control03.ctl
-rw-r----- 1 oracle oinstall 51M May 30 15:53 redo01.log
-rw-r----- 1 oracle oinstall 51M May 30 15:51 redo02.log
-rw-r----- 1 oracle oinstall 51M May 30 15:50 redo03.log
-rw-r----- 1 oracle oinstall 51M May 30 15:50 redo04.log
-rw-r----- 1 oracle oinstall 51M May 30 15:50 redo05.log
-rw-r----- 1 oracle oinstall 51M May 30 15:51 redo06.log
-rw-r----- 1 oracle oinstall 51M May 30 15:51 redo07.log
-rw-r----- 1 oracle oinstall 51M May 30 15:51 redo08.log
-rw-r----- 1 oracle oinstall 241M May 3015:51 sysaux01.dbf
-rw-r----- 1 oracle oinstall 481M May 3015:51 system01.dbf
-rw-r----- 1 oracle oinstall 48M May 30 12:21 temp01.dbf
-rw-r----- 1 oracle oinstall 4.5G May 3015:51 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5.1M May 3015:51 users01.dbf
-rw-r----- 1 oracle oinstall 442M May 30 15:52 xb01.dbf --文件大小变为442m
--关闭数据库的备份模式
SQL> alter database end backup;
Database altered.
--再次查看scn号
SQL> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
787555
SQL> select checkpoint_change# from v$datafile;
CHECKPOINT_CHANGE#
------------------
787555
787555
787555
787555
787555
SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
787555
787555
787555
787555
787555
Scn号一致
6. 结论
从上面的实验可以得出,alter database begin backup只是锁住了数据文件头块的scn号,
但是数据还是会继续写入数据文件,当执行alter database end backup的时候,数据库就会用控制文件中最新的scn去更新每个数据文件头部块的scn。