Oracle 实例恢复

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

--=======================

-- Oracle 实例恢复

--=======================

 

一、Oracle实例失败

    Oracle实例失败多为实例非一致性关闭所致,通常称为崩溃(crash)。实例失败的结果等同于shutdown abort

    实例失败的原因

        电源负载故障

        硬件故障

        后台进程失败

        异常关闭数据库

    实例失败后的状况

        数据库可能丢失已提交的事务以及存储了未提交的事务,导致数据库出现不一致的情况

    解决方案

        使用startup 重新启动实例。实例实现自动恢复,根据联机日志文件前滚提交的事务,回滚未提交的事务

        查看告警日志、跟踪日志等找出出现故障的原因

       

    更多常见的故障请参考:Oracle 常见故障及日常规划

   

二、检查点

    检查点在体系结构中已经讨论,实例的恢复与检查点息息相关,因此再次讨论检查点进程

   

    1.什么是检查点

        是一个数据库事件,用于减少崩溃恢复时间,检查点位置决定了实例恢复的起始位置

        由后台进程触发,触发时ckpt进程通知dbwn进程将数据缓冲区的脏数据写入到数据文件

        ckpt进程同时负责更新数据文件的头部信息及控制文件上的检查点信息

       

    2.检查点的触发条件

            在日志切换的时候(自动切换或手动切换)

            数据库用immediate transaction normal选项shutdown数据库的时候

            用户手动触发(alter system checkpoint)

            alter tablespace tablespace_name begin | end bakcup

            alter tablespace tablespace_name offline

            alter database datafile '<dir>' offline

            alter tablespace | datafile read only

           

    3.检测点队列

        是一个脏数据库链表

        检查点队列中的每一条修改过的记录包一个唯一的数据块标识符(日志文件号,块编号,偏移量)

        最早队列将被优先写入到数据文件(而不论期间是否被多次修改)

        最早队列被写入完成后将从队列中清除

       

    4.检查点的分类

        完全检查点

            Oracle 8i 以前,当检查点发生时,Oracle将脏缓冲列表上的数据全部写入到数据文件,称为完全检查点,又称常规检查点

            特定的触发条件

                alter system switch logfile

                shutdown normal,immediate,transactional

                alter system checkpoint

        增量检查点(fast-start checkpoint)

            主要是引入了检查点队列机制,sckpt将检查点队列中最老的RBA更新到控制文件,RBA(重做日志块地址)同时将作为实例恢复的起点

            增量检查点则细分了完全检查点,使得数据可以周期性按最老的数据块写入到数据文件

            每一个脏块会被移到检查点队列里面去,按照LRBALow RBA第一次对此块修改对应的redo block address)来排列

            最早写入检查点队列数据块的low rba值是最小的,即便该队列中的最小队列被修改多次,但修改后它在检查点队列里的顺序不会改变

            当执行增量检查点时,DBWn从检查点队列按照LRBA的顺序来保证先修改的数据可以按顺序优先被写出来实现检查点的增进

            此时ckpt进程使用轻量级的控制文件更新协议,将当前最低的RBA写入控制文件

            ckpt在进行轻量级更新时,并不会改写控制文件中数据文件的检查点信息及数据文件头信息

            仅仅是记录控制文件检查点SCN并根据增量检查点写出增进RBA信息

            通过将完全检查点转变为增量检查点将大大缩短实例的恢复时间

            注:更新数据文件头部及控制文件滞后于检查点事件的发生

            增量检查点的触发   

                满足初始话文件log_checkpoint_intervallog_checkpoint_timeout

                              fast_start_io_targetfast_start_mttr_target的设置的值

                最小的日志文件的大小

                Buffer Cacha中脏块的数量

   

        部分检查点

            表空间的脏数据写入到磁盘

            alter tablespace tablespace_name offline 触发

   

    5.完全检查点与增量检查点的差异

        完全检查点会将检查点的信息同时写入到控制文件及数据文件

        增量检查点则只将RBA写入到控制文件

   

    6.查看检查点的信息,设置LOG_CHECKPOINTS_TO_ALERT参数为true

        ALTER SYSTEM SET LOG_CHECKPOINTS_TO_ALERT = TRUE ;

   

    --查看log_checkpoints_to_alert参数

        SQL> SHOW PARAMETER log_checkpoints_to_alert

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

        log_checkpoints_to_alert             boolean     FALSE

 

    --设置log_checkpoints_to_alert参数

        SQL> ALTER SYSTEM set log_checkpoints_to_alert = TRUE;

 

        System altered.    

       

    --清空告警日志文件的内容

        SQL> ho cat /dev/null > /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

   

    --查看数据文件头部信息中控制文件的信息为3037172

    SQL> SELECT file#,status,tablespace_name ,

      2  dbms_flashback.get_system_change_number cur_scn,

      3  to_char(resetlogs_time,'yyyy-mm-dd hh24:mi:ss') rst_dt,

      4  resetlogs_change# rst_scn,

      5  to_char(checkpoint_time,'yyyy-mm-dd hh24:mi:ss') ckpt_dt,

      6  checkpoint_change# ckpt_scn,checkpoint_count ckpt_cnt

      7  FROM v$datafile_header;

 

         FILE# STATUS  TABLESPACE_NAME    CUR_SCN RST_DT                 RST_SCN CKPT_DT               CKPT_SCN   CKPT_CNT

    ---------- ------- --------------- ---------- ------------------- ---------- ------------------- ---------- ----------

             1 ONLINE  SYSTEM             3037641 2010-07-20 11:59:23    2837290 2010-07-25 19:05:30    3037172        531

             2 ONLINE  UNDOTBS1           3037641 2010-07-20 11:59:23    2837290 2010-07-25 19:05:30    3037172        493

             3 ONLINE  SYSAUX             3037641 2010-07-20 11:59:23    2837290 2010-07-25 19:05:30    3037172        532

             4 ONLINE  USERS              3037641 2010-07-20 11:59:23    2837290 2010-07-25 19:05:30    3037172        534

             5 ONLINE  EXAMPLE            3037641 2010-07-20 11:59:23    2837290 2010-07-25 19:05:30    3037172        489

             6 ONLINE  TBS1               3037641 2010-07-20 11:59:23    2837290 2010-07-25 19:05:30    3037172        412

             7 ONLINE  TBS1               3037641 2010-07-20 11:59:23    2837290 2010-07-25 19:05:30    3037172        407

    7 rows selected.

 

    SQL> save /u01/app/oracle/oradata/query_1.sql;

    Created file /u01/app/oracle/oradata/query_1.sql

   

        SQL> ALTER SYSTEM SWITCH LOGFILE;  --切换日志

 

        System altered.

                 

        SQL> ho cat /u01/app/oracle/admin/orcl/bdump/alert_orcl.log | more  --查看告警日志

        Sun Jul 25 19:14:29 2010

        Beginning log switch checkpoint up to RBA [0xd.2.10], SCN: 3037657

        Thread 1 advanced to log sequence 13

          Current log# 3 seq# 13 mem# 0: /u01/app/oracle/oradata/orcl/redo3a.rdo

          Current log# 3 seq# 13 mem# 1: /u01/app/oracle/oradata/orcl/redo3b.rdo

 

    SQL> @/u01/app/oracle/oradata/query_1.sql;   --数据文件头部滞后分钟后与告警日志记录的SCN相同

 

         FILE# STATUS  TABLESPACE_NAME    CUR_SCN RST_DT                 RST_SCN CKPT_DT               CKPT_SCN   CKPT_CNT

    ---------- ------- --------------- ---------- ------------------- ---------- ------------------- ---------- ----------

             1 ONLINE  SYSTEM             3037803 2010-07-20 11:59:23    2837290 2010-07-25 19:14:29    3037657        532

             2 ONLINE  UNDOTBS1           3037803 2010-07-20 11:59:23    2837290 2010-07-25 19:14:29    3037657        494

             3 ONLINE  SYSAUX             3037803 2010-07-20 11:59:23    2837290 2010-07-25 19:14:29    3037657        533

             4 ONLINE  USERS              3037803 2010-07-20 11:59:23    2837290 2010-07-25 19:14:29    3037657        535

             5 ONLINE  EXAMPLE            3037803 2010-07-20 11:59:23    2837290 2010-07-25 19:14:29    3037657        490

             6 ONLINE  TBS1               3037803 2010-07-20 11:59:23    2837290 2010-07-25 19:14:29    3037657        413

             7 ONLINE  TBS1               3037803 2010-07-20 11:59:23    2837290 2010-07-25 19:14:29    3037657        408

 

    SQL> SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual;  --时间滞后分钟 19:19:59 - 19:14:29

 

    TO_CHAR(SYSDATE,'YY'

    -------------------

    2010-07-25 19:19:59

 

        SQL> ALTER SYSTEM CHECKPOINT;  --产生检查点

 

        System altered.

 

        SQL> ho cat /u01/app/oracle/admin/orcl/bdump/alert_orcl.log | more  --查看告警日志中的SCN: 3037881

        Sun Jul 25 19:14:29 2010

        Beginning log switch checkpoint up to RBA [0xd.2.10], SCN: 3037657

        Thread 1 advanced to log sequence 13

          Current log# 3 seq# 13 mem# 0: /u01/app/oracle/oradata/orcl/redo3a.rdo

          Current log# 3 seq# 13 mem# 1: /u01/app/oracle/oradata/orcl/redo3b.rdo

        Sun Jul 25 19:19:34 2010

        Completed checkpoint up to RBA [0xd.2.10], SCN: 3037657

        Sun Jul 25 19:21:55 2010

        Beginning global checkpoint up to RBA [0xd.116.10], SCN: 3037881

        Completed checkpoint up to RBA [0xd.116.10], SCN: 3037881

 

    SQL> @/u01/app/oracle/oradata/query_1.sql;  --数据文件头部同步与告警日志记录的SCN相同,为3037881

 

         FILE# STATUS  TABLESPACE_NAME    CUR_SCN RST_DT                 RST_SCN CKPT_DT               CKPT_SCN   CKPT_CNT

    ---------- ------- --------------- ---------- ------------------- ---------- ------------------- ---------- ----------

             1 ONLINE  SYSTEM             3037890 2010-07-20 11:59:23    2837290 2010-07-25 19:21:55    3037881        533

             2 ONLINE  UNDOTBS1           3037890 2010-07-20 11:59:23    2837290 2010-07-25 19:21:55    3037881        495

             3 ONLINE  SYSAUX             3037890 2010-07-20 11:59:23    2837290 2010-07-25 19:21:55    3037881        534

             4 ONLINE  USERS              3037890 2010-07-20 11:59:23    2837290 2010-07-25 19:21:55    3037881        536

             5 ONLINE  EXAMPLE            3037890 2010-07-20 11:59:23    2837290 2010-07-25 19:21:55    3037881        491

             6 ONLINE  TBS1               3037890 2010-07-20 11:59:23    2837290 2010-07-25 19:21:55    3037881        414

             7 ONLINE  TBS1               3037890 2010-07-20 11:59:23    2837290 2010-07-25 19:21:55    3037881        409

 

    --查看完全检查点           

        SQL> SELECT addr,indx ,rtckp_scn,

          2    rtckp_tim,

          3    rtckp_rba_seq,rtckp_rba_bno

          4  FROM x$kccrt;

 

        ADDR           INDX RTCKP_SCN        RTCKP_TIM            RTCKP_RBA_SEQ RTCKP_RBA_BNO

        -------- ---------- ---------------- -------------------- ------------- -------------

        B7D59C10          0 3037881          07/25/2010 19:21:55             13           278      

 

        SQL> show parameter log_check  --查看log_checkpoint_timeout的值

 

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ------------------------------

    &n

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值