OCA/OCP Oracle 数据库12c考试指南读书笔记:第22章:Configuring the Database for Backup and Recovery

可能的错误和解决方法

备份用来防止错误,也可用来恢复数据用于测试,迁移等。
不同的错误有不同的应对方法,备份和恢复的投资取决于保护的等级。

错误分类

大类可分为物理(硬件或软件)和逻辑(使用数据库的终端用户)的。细分为:

  • 语句错误:因为权限,语法和资源限制
  • 用户错误:误删表或行(可使用回收站或Flashback恢复)
  • 用户进程错误:客户端断连或异常中断
  • 网络错误:网络硬件或协议错误
  • 实例错误:Bug,操作系统错误,内存,掉电引起实例崩溃
  • 介质错误:磁盘损坏

Oracle备份和恢复方案

基于RTO的方法。
天或小时:RMAN
小时或分钟:Flashback
分钟或秒:RAC,ADG

Oracle Data Recover Advisor可快速确定错误类型并建议最佳的恢复方式。

Recovery Manager (RMAN)

表,数据文件,表空间,实例的备份和恢复。
数据库克隆和复制。
RMAN的关键组件是FRA,用于集中存储备份和恢复对象。FRA可基于ASM或文件系统。
FRA的大小取决于备份窗口和备份频度。
FRA是可选的,但却是最佳建议。

Oracle Secure Backup (OSB)

OSB是备份软件,最主要是备份Oracle数据库,其次还可以备份Linux服务器和NAS。

Oracle Data Guard

物理stand-by:备点由主点的备份实例化后,持续接收主点的redo并应用,以保持与主点的同步。备点是只读的。通常用作灾备。
逻辑standby:备点接受redo后将其转换为同效的DML,这样备点可认为与主点逻辑一致,单物理结构通常不一样。通常用作另一套环境,如数仓。

实例恢复和数据损坏的不可能性

数据库异常关闭或中断会导致实例恢复,实例恢复包括两个阶段,前滚和后滚。两个阶段都会利用redo log.
在数据库打开前,会进行前滚,即利用redo log将已提交但未写入数据文件中的数据写到数据文件。数据库打开后,会利用redo log将未提交但已写入数据文件中的数据清除,即进行回滚。无论如何,由于redo log总是在事务提交时先行记录,因此只要redo log不发生物理损坏,则数据库损坏时不可能发生的。

CHECKPOINTS AND THE REDO LOG

DBWn(Database Writer)负责将buffer中的数据写到数据文件。而数据的变化(Change Vector)由Log Writer(LGWn)写到Redo Log。DBWn采用Lazy模式,而LGWn是积极模式,对于事务是完全实时。

Checkpoint机制

Checkpoint是最近的一个实例恢复点,有DBWn自动向前推进。如果是将buffer中部分脏数据写数据文件,则称为部分checkpoint,否则称为完全Checkpoint。完全Checkpoint一般不推荐做,只有在正常shutdown数据库时才有必要。完全Checkpoint可以手工发起:

alter system checkpoint

正常shutdown的好处是数据库启动时无需实例恢复。
部分Checkpoint的情形包括将表空间,数据文件置为离线,truncate table,备份数据文件等。

保护Online Redo Log 文件

log file group:由于需要轮转,至少需要两个
member:一个group中至少1个member,为物理文件,为安全计,需要2个或以上
online redo log可以在线更改配置。如果数据库用DBCA创建,则有3个log file group。除非使用OMF和FRA只会配置1个member。
V$LOGV$LOGFILE为相关视图。

SQL> select group#, sequence#, members, status from v$log;

    GROUP#  SEQUENCE#    MEMBERS STATUS
---------- ---------- ---------- ----------------
         1         16          1 INACTIVE
         2         17          1 INACTIVE
         3         18          1 CURRENT

SQL> select group#, status, member from v$logfile;

    GROUP# STATUS  MEMBER
---------- ------- ------------------------------------------------------------
         3         /opt/oracle/oradata/ORCLCDB/redo03.log
         2         /opt/oracle/oradata/ORCLCDB/redo02.log
         1         /opt/oracle/oradata/ORCLCDB/redo01.log
SQL> alter system switch logfile;

System altered.

SQL> select group#, sequence#, members, status from v$log;

    GROUP#  SEQUENCE#    MEMBERS STATUS
---------- ---------- ---------- ----------------
         1         19          1 CURRENT
         2         17          1 INACTIVE
         3         18          1 ACTIVE

SEQUENCE#表示log switch的次数。
保护redo log最好的方法是复制(multiplex),即增加member,例如:

alter database add logfile member '/path_to/file'  to group 1

归档模式和归档进程

由于online redo log会被重写,为保留online redo log的历史记录,我们需要开启归档。
归档默认未开启,但对于生产系统都建议开启。在log switch时,后台进程会将当前文件写到归档空间。归档文件的大小和名称由初始化参数设定。
归档文件也可以形成多份拷贝(multiplex,即多个归档地点),但最终还是应迁移到离线存储,如磁带。如果归档地点是Oracle Net alias,即另一台机器,此模式称为Data Guard。
必须在正常关闭数据库然后进入mount模式才能开启归档模式。

备份和恢复: 配置

保证系统可恢复,需要形成多份redo和controlfile,前者可以在线做,后者不行。
以下输出表示控制文件有两个拷贝:

SQL> select value from v$parameter2 where name='control_files';

VALUE
--------------------------------------------------------------------------------
/opt/oracle/oradata/ORCLCDB/control01.ctl
/opt/oracle/oradata/ORCLCDB/control02.ctl

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/ORCLCDB/control01.ctl
/opt/oracle/oradata/ORCLCDB/control02.ctl

练习:

-- 查看redo状态
SQL> select group#, thread#, bytes, member, v$log.status from v$log join v$logfile using (group#);

    GROUP#    THREAD#      BYTES MEMBER                                             STATUS
---------- ---------- ---------- -------------------------------------------------- ----------------
         3          1  209715200 /opt/oracle/oradata/ORCLCDB/redo03.log             INACTIVE
         2          1  209715200 /opt/oracle/oradata/ORCLCDB/redo02.log             INACTIVE
         1          1  209715200 /opt/oracle/oradata/ORCLCDB/redo01.log             CURRENT

-- 查看归档是否开启
select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG
SQL> select archiver from v$instance;

ARCHIVE
-------
STOPPED
-- 为每一个group添加1个member
SQL> alter database add logfile member '/opt/oracle/oradata/ORCLCDB/redo01_2.log' to group 1;

Database altered.

SQL> alter database add logfile member '/opt/oracle/oradata/ORCLCDB/redo02_2.log' to group 2;

Database altered.

SQL> alter database add logfile member '/opt/oracle/oradata/ORCLCDB/redo03_2.log' to group 3;

Database altered.
-- 再次查看
SQL> select group#, thread#, bytes, member, v$log.status from v$log join v$logfile using (group#);

    GROUP#    THREAD#      BYTES MEMBER                                             STATUS
---------- ---------- ---------- -------------------------------------------------- ----------------
         3          1  209715200 /opt/oracle/oradata/ORCLCDB/redo03.log             INACTIVE
         2          1  209715200 /opt/oracle/oradata/ORCLCDB/redo02.log             INACTIVE
         1          1  209715200 /opt/oracle/oradata/ORCLCDB/redo01.log             CURRENT
         1          1  209715200 /opt/oracle/oradata/ORCLCDB/redo01_2.log           CURRENT
         2          1  209715200 /opt/oracle/oradata/ORCLCDB/redo02_2.log           INACTIVE
         3          1  209715200 /opt/oracle/oradata/ORCLCDB/redo03_2.log           INACTIVE

6 rows selected.
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                             IS_     CON_ID
---------- ------- ------- -------------------------------------------------- --- ----------
         3         ONLINE  /opt/oracle/oradata/ORCLCDB/redo03.log             NO           0
         2         ONLINE  /opt/oracle/oradata/ORCLCDB/redo02.log             NO           0
         1         ONLINE  /opt/oracle/oradata/ORCLCDB/redo01.log             NO           0
         1 INVALID ONLINE  /opt/oracle/oradata/ORCLCDB/redo01_2.log           NO           0
         2 INVALID ONLINE  /opt/oracle/oradata/ORCLCDB/redo02_2.log           NO           0
         3 INVALID ONLINE  /opt/oracle/oradata/ORCLCDB/redo03_2.log           NO           0

6 rows selected.
SQL> alter system switch logfile;

System altered.

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                             IS_     CON_ID
---------- ------- ------- -------------------------------------------------- --- ----------
         3         ONLINE  /opt/oracle/oradata/ORCLCDB/redo03.log             NO           0
         2         ONLINE  /opt/oracle/oradata/ORCLCDB/redo02.log             NO           0
         1         ONLINE  /opt/oracle/oradata/ORCLCDB/redo01.log             NO           0
         1 INVALID ONLINE  /opt/oracle/oradata/ORCLCDB/redo01_2.log           NO           0
         2         ONLINE  /opt/oracle/oradata/ORCLCDB/redo02_2.log           NO           0
         3 INVALID ONLINE  /opt/oracle/oradata/ORCLCDB/redo03_2.log           NO           0

6 rows selected.
SQL> select group#, thread#, bytes, member, v$log.status from v$log join v$logfile using (group#);

    GROUP#    THREAD#      BYTES MEMBER                                             STATUS
---------- ---------- ---------- -------------------------------------------------- ----------------
         3          1  209715200 /opt/oracle/oradata/ORCLCDB/redo03.log             INACTIVE
         2          1  209715200 /opt/oracle/oradata/ORCLCDB/redo02.log             CURRENT
         1          1  209715200 /opt/oracle/oradata/ORCLCDB/redo01.log             ACTIVE
         1          1  209715200 /opt/oracle/oradata/ORCLCDB/redo01_2.log           ACTIVE
         2          1  209715200 /opt/oracle/oradata/ORCLCDB/redo02_2.log           CURRENT
         3          1  209715200 /opt/oracle/oradata/ORCLCDB/redo03_2.log           INACTIVE

6 rows selected.

配置快速恢复区(FRA)

FRA(Fast Recovery Area)是恢复相关文件存放的默认位置,由两个参数控制:

  • db_recovery_file_dest :位置,可以是文件系统或ASM,多个数据库可以共享,以目录分开
  • db_recovery_file_dest_size - 大小

FRA的使用情况可参见视图:

  • v$recovery_file_dest
  • v$recovery_area_usage

FRA中存放的文件包括归档日志,RMAN备份,flashback日志。
通过删除不再需要的文件,RMAN可以管理FRA空间。
理想的FRA大小可以容纳一个完整的备份,可用于恢复的多个增量备份,redo,归档以及这些文件的多份拷贝。RMAN可以恢复数据库,或将数据库回退到某一时间点。
FRA可在线配置。

SQL> select name, value from v$parameter where name like 'db_recovery%';

NAME                             VALUE
-------------------------------- --------------------
db_recovery_file_dest
db_recovery_file_dest_size       0

SQL> select name, space_limit, space_used from v$recovery_file_dest;

no rows selected
SQL> alter system set db_recovery_file_dest_size=5g;

System altered.

SQL> alter system set db_recovery_file_dest='/u02/fra';

System altered.
SQL> select name, space_limit, space_used from v$recovery_file_dest;

NAME                             SPACE_LIMIT SPACE_USED
-------------------------------- ----------- ----------
/u02/fra                          5368709120          0

配置归档模式

归档默认未开启。开启需要停数据库。
过程如下:

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     18
Current log sequence           20
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1207955552 bytes
Fixed Size                  9134176 bytes
Variable Size             402653184 bytes
Database Buffers          788529152 bytes
Redo Buffers                7639040 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     18
Next log sequence to archive   20
Current log sequence           20

-- 通过log switch确认归档可以工作
SQL> alter system archive log current;

System altered.
-- 确认归档文件已生成
SQL> select name, is_recovery_dest_file from v$archived_log;

NAME                                                                             IS_
-------------------------------------------------------------------------------- ---
/u02/fra/ORCLCDB/archivelog/2019_11_28/o1_mf_1_20_gxzjs99r_.arc                  YES

归档的默认位置为LOG_ARCHIVE_DEST_1,然后是$ORACLE_HOME/dbs。在以上命令中,USE_DB_RECOVERY_FILE_DEST表示FRA:

SQL> show parameter DB_RECOVERY_FILE_DEST

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u02/fra
db_recovery_file_dest_size           big integer 5G

最后,一定要执行一个全备,才算是完整。因为在转换到归档后,之前所有的备份都无效。

发布了342 篇原创文章 · 获赞 42 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/stevensxiao/article/details/103108313