数据备份

oracle通过scn来维护数据的一致性,是备份恢复的主要机制,备份恢复离不开scn, scn思想贯穿始终,嗯嗯,开篇就来scn吧...//
 
oracle内部4个scn,三个实在controlfile里,一个在datafilel里,拿我的小环境查下:
系统检查点scn
SQL> select checkpoint_change# from v$ database;

CHECKPOINT_CHANGE#
------------------
                        874834
当一个检查点动作完成后,oracle就把系统检查点的scn存储到控制文件中去。
 
数据文件检查点scn
SQL> column name format a100
SQL> set pagesize 14
SQL> set linesize 300
SQL> select name,checkpoint_change# from v$datafile;
NAME                                                                                                 CHECKPOINT_CHANGE#
---------------------------------------------------------------------------------------------------- ------------------
+DATA/oracl/datafile/system.256.729079823                                                                        874834
+DATA/oracl/datafile/sysaux.257.729079825                                                                        874834
+DATA/oracl/datafile/undotbs1.258.729079825                                                                      874834
+DATA/oracl/datafile/users.259.729079825                                                                         874834

当一个检查点动作完成后,oracle也把数据文件检查点scn单独记录到控制文件中。
 
终止scn
SQL> select name,last_change# from v$datafile;

NAME                                                                                                                                                                                                 LAST_CHANGE#
---------------------------------------------------------------------------------------------------- ------------
+DATA/oracl/datafile/system.256.729079823
+DATA/oracl/datafile/sysaux.257.729079825
+DATA/oracl/datafile/undotbs1.258.729079825
+DATA/oracl/datafile/users.259.729079825
联机读写模式下面的所有的数据文件的终止 SCN 为空或者无限大。
 
数据文件中的启动scn

SQL> select name,checkpoint_change# from v$datafile_header;
NAME                                                                                                 CHECKPOINT_CHANGE#
---------------------------------------------------------------------------------------------------- ------------------
+DATA/oracl/datafile/system.256.729079823                                                                        874834
+DATA/oracl/datafile/sysaux.257.729079825                                                                        874834
+DATA/oracl/datafile/undotbs1.258.729079825                                                                      874834
+DATA/oracl/datafile/users.259.729079825                                                                         874834

数据文件的检查点信息写入到每一个数据文件的头部。
再说说4个scn之间的关系吧:
数据库正常运行期间,控制文件中的系统检查点scn、数据文件检查点scn、数据文件头部的启动scn都相同,此时只有控制文件中的终止scn为null状态。
数据库正常关闭期间,系统执行一个checkpoint,将所有位于控制文件中的数据文件终止scn置成与数据文件头部的启动scn一致,数据库安全关闭之后,四个scn应该是相同的。
--PS:通常通过查看这四个scn状态来判断数据库是否正常关闭。
数据库启动的过程:
1 、数据文件头部的启动 SCN 与控制文件中数据文件检查点 SCN 比较, 如果相同,继续。若不同需介质恢复。
2 、数据文件头部的启动 SCN 与控制文件中数据文件终止 SCN 比较, 如果相同,那么表示正常关机,不需要恢复。若不相同此时将需要实例恢复。
3 、数据库打开,控制文件中数据文件终止 SCN 被设置为 NULL , 数据库被打开,并且正常使用。此时所有数据块都已提交,所有数据库的修改都没有在数据库关闭的过程中丢失。
数据库正常关闭:
SQL> shutdown immediate;         -------将终止scn置为与启动scn一致
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area    238530560 bytes
Fixed Size                                    1335724 bytes
Variable Size                         159387220 bytes
Database Buffers                     75497472 bytes
Redo Buffers                                2310144 bytes
Database mounted.
SQL> select checkpoint_change# from v$ database
    2    ;

CHECKPOINT_CHANGE#
------------------
                        880843

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
                        880843
                        880843
                        880843
                        880843
SQL> select last_change# from v$datafile;

LAST_CHANGE#
------------
            880843
            880843
            880843
            880843

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
                        880843
                        880843
                        880843
                        880843
比较数据文件头部启动scn与控制文件中数据文件检查点scn
比较数据文件头部启动scn与控制文件中终止scn
SQL> alter database open;

Database altered.

SQL> select checkpoint_change# from v$ database;

CHECKPOINT_CHANGE#
------------------
                        880846

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
                        880846
                        880846
                        880846
                        880846

SQL> select last_change# from v$datafile;

LAST_CHANGE#       ------------------把所有数据文件终止scn设为null
------------
 
 

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
                        880846
                        880846
                        880846
                        880846


 
 
 
SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                                    880630

SQL> select current_scn from v$ database;

CURRENT_SCN
-----------
         880634
可以通过如下脚本来观察系统scn的变化速率: 获取数据库scn的两种方法:
set serveroutput on
     declare
    a number;
     begin
         for i in 1..100 loop
             select current_scn into a from v$ database;
            dbms_output.put_line(a);
         end loop;
     end;
 
数据库非正常关闭
SQL> startup mount
ORACLE instance started.

Total System Global Area    238530560 bytes
Fixed Size                                    1335724 bytes
Variable Size                         159387220 bytes
Database Buffers                     75497472 bytes
Redo Buffers                                2310144 bytes
Database mounted.
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
                        880846

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
                        880846
                        880846
                        880846
                        880846

SQL> select last_change# from v$datafile;

LAST_CHANGE#
------------                                        ------终止scn为null

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
                        880846
                        880846
                        880846
                        880846



数据库开启前比较v$datafile_header.checkpoint_change#v$database.checkpoint_change#
v$datafile_header.checkpoint_change#和v$datafile.last_change#此时启动scn与终止scn不同,那么数据库需要实例恢复。
 
SQL> alter database open;

Database altered.

SQL> select checkpoint_change# from v$ database;

CHECKPOINT_CHANGE#
------------------
                        905596

SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
                        905596
                        905596
                        905596
                        905596

SQL> select last_change# from v$datafile;

LAST_CHANGE#
------------

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
                        905596
                        905596
                        905596
                        905596
此时数据库smon进程做了实例恢复,所谓实例恢复 就是指内存和进程, 数据库把 redo 中需要恢复的数据读入内存 .其过程分为前滚、数据库开启、回滚三个阶段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值