详解下oracle热备

 

                                            如果你只是个杯子,那就不要去干暖水壶才能做的事。

 

                 详解下oracle热备_第1张图片

 

    

    oracle备份方式有多种,今天我们不管其他的备份方式,先来锤锤其中的热备方式,进而掌握其中原理!

 

 

    核心原理:热备是控制文件块头的scn号在备份是不变化,进而保证备份的数据是一致的。

 

 

    oracle数据库有归档模式和非归档两种模式,下面讨论的都是在数据库归档模式下的备份恢复(非归档模式在生产系统中不建议使用,以下不讨论):

 

 

    归档模式下的热备流程:

 

    冻结块头:

SQL> alter database begin backup;

 

    物理拷贝所有数据文件

cp /u01/app/oracle/oradata/orcl/*  /u02/hotbak/

 

    解冻块头

SQL> alter database end backup;

 

    整个流程也可以通过脚本实现:

    A,通过数据库实现所有数据文件热备脚本:

spool /tmp/hot.sqlselect 'ho cp '||name||' /u02/hotbak/' from v$datafile;spool offho sed -n '/^ho cp/p' /tmp/hot.sql>/tmp/hotorcl.sqlalter database begin backup;start /tmp/hotorcl.sqlalter database end backup;ho rm /tmp/hot*.sqlalter database backup controlfile to 'u02/hotbak/control01.ctl;create pfile='/u02/hotbak/initorcl.ora' from spfile;

 

    B,通过表空间方式实现所有数据文件热备脚本:

set heading offspool /tmp/hot.sqlselect 'alter tablespace '||tablespace_name||' begin backup; '||chr(10)||'ho cp '||file_name||' /u02/horcl/; '||chr(10)||'alter tablespace '||tablespace_name||' end backup;' from dba_data_files order by tablespace_name;spool offstart /tmp/hot.sqlalter database backup controlfile to /u02/hotbak/horcl/control01.ctl';create pfile='/u02/horcl/initorcl.ora' from spfile;

 

 

    不同案例恢复:

    

    1,恢复控制文件

 

    recover database using backup controlfile;

SQL>startup报错:控制文件丢失

 

    获取控制文件位置

SQL> show parameter control_files;

 

    拷贝备份控制文件

SQL>ho ls /u01/oracle/oradata/orcl/cont*SQL>ho cp /u02/oracle/horcl/control* /u01/oracle/oradata/orcl/control01.ctlSQL>ho cp /u02/oracle/horcl/control* /u01/oracle/oradata/orcl/control02.ctl

 

    打开数据库

SQL>alter database mount;SQL>alter database open;ORA-01589:must use RESETLOGS or NORESETLOGS.......

 

    报错,通过以下流程恢复

SQL>recover database using backup controlfile;中间输入auto如果提示找不到文件(归档文件没生成,信息存在redo日志文件中)重新输入指令:recover database using backup controlfiles;中间输入redo日志文件,如:/u01/oracle/oradata/orcl/redo02.logSQL>alter database open resetlogs;

 

    恢复完成后,需要进行数据库的全备,因为执行resetlogs后,数据库的日志信息进行重新刷新,原来老的备份无法再对接使用。

 

 

    2,恢复数据文件

 

    数据文件丢失

    ----->能脱机的 可以在线还原,恢复

    ----->不能脱机,只能到mount阶段恢复

 

    如果丢失user表空间

 

    连接到该用户下面去,也可以看到该用户下的所有表信息(因为这些信息存放在数据字典中)

    如果要查看表的数据,数据库报错,提示表空间不存在

 

    查看user表空间的数据文件状态

SQL> select file#,status,enabled from v$datafile;

 

    下线数据文件

SQL> alter database datafile 4 offline;

 

    在此查看,发现user表空间status为recover

SQL>select file#,status,enabled from v$datafile

 

    拷贝恢复

SQL> ho cp /u01/horcl/users01.dbf /u01/oracle/oradata/orcl/users01.dbfSQL> alter database datafile 4 online;

 

    提示需要media recovery

SQL> recover datafile 4;SQL> alter database datafile 4 online;

 

    现在可以查看该表空间下的表数据

SQL> select * from dept;

 

    注意:system表空间,临时表空间,undo表空间都是不能脱机

 

    系统表空间是数据库的信息中心,如果系统表空丢失,其余的数据操作将不能进行

 

    系统表空间丢失

SQL>shutdown immediate

 

    提示无法关闭,系统表空间丢失

 

    关闭数据库:

SQL> shutdown abort

    或者

SQL> startup force mount;SQL> ho cp /u02/horcl/system01.dbf /u01/oracle/oradata/orcl/system01.dbfSQL> recover datafile 1;SQL> alter database open;

 

 

    最后注意:如果执行了resetlogs打开数据库和重建了控制文件,就需要重新全备数据库

 

                                                 欢迎大家关注以下公众号进行数据库方面知识探讨:

                                                                         详解下oracle热备_第2张图片

你可能感兴趣的:(Oracle)