ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE 备份学习笔记

ORACLE 备份学习笔记

原创 Linux操作系统 作者:willing66 时间:2010-02-22 19:23:53 0 删除 编辑

ORACLE 备份学习笔记



Oracle成熟的标志之一就是完善而强大的备份系统。

而其中分为两个部分:
1. 逻辑备份;
2. 物理备份。(没有看到官方的说法,是自己取的,希望不会误导大家)

先谈逻辑备份:
命令: exp/imp 和 expdp/impdp
特点:灵活 —— 可以跨平台、跨数据库版本迁移。
           有些慢。

因为exp/imp采用的是类似于insert into的方式操作。

但expdp/impdp是服务器端的工具,因为使用之前,必须在数据库中创建一个Directory。Such as:
SQL> create directory dump as '/u01/dump/';
SQL> grant read, write on directory dump to backup
(注:backup是测试中用于备份的用户名)

同样,可以导出某一个用户,特定表数据等从逻辑层划分的数据。

备份过程中,可以查看以下视图监控信息:
dba_datapump_jobs, dba_datapump_sessions.

另外一个非常感兴趣的功能是,将dump文件转换为SQL脚本。这个对于分析问题和学习很有帮助哦。
impdp backup/backup directory=dump dumpfile=xxx.dmp sqlfile=xxx.sql



RMAN -- Recovery Manger 是Oracle提供的备份工具。

英文中备份涉及有三个方面:
1. Backup —— 备份;
2. Restore —— 还原,指物理意义的文件的还原和拷贝。其目的是修复丢失或损坏的文件,或者移动文件到新的位置。
3. Recover —— 恢复,指数据库一致性的恢复。事实上,是apply redo log到恢复的数据库的过程。

只有Recover成功的数据库才是可以用的数据库。所以,其实archivelog是备份中最重要的部分之一



RMAN提供了Archived log的备份。我们都知道在Redo Log中其实有两种Log:Online 和 Archived log。当然如果数据库不是打开了Archivelog ON模式,数据库会循环写Online Log,这样就有可能出现Log丢失的情况。如果Log丢失了,即便restore成功了数据文件,也不能recover成功。所以说,Redo Log是Oracle中最重要的部分之一。

那么,怎么备份Online Log呢?事实上,根本不用刻意备份Online Log,或者说实际上已经备份了Online Log。原因是当我们备份Archived Log的时候,RMAN主动把Online Log变成Archived Log,然后备份。

所以,如果用”BACKUP DATABASE PLUS ARCHIVED LOG", 会生成4个backup pieces。
1. Archived Log 备份——有多少现存的Archived Log,备多少。
2. Data Files;
3. Control File;
4. Archived Log 备份 —— 这里的Log其实就是备份当前的正在使用的 Online Log。

由此,大家很容易理解为什么说不用刻意备份Online Log了。




首先,Controlfile是存储数据库物理结构信息的二进制文件,包括:SCN,时间戳,Archived log历史,表空间,数据文件(包含文件名,状态,checkpoint等),Redo Log的信息,当前archive log状态,RMAN的信息,数据库块文件信息,数据库ID等。总之,几乎囊括了所有的关键信息。因此,Control File是最重要,也是最需要保护的文件之一。

保护的方法——通常是同时建立多个备份,同时用。每次备份都强烈建议备份Controlfile。

例如:SQL> SELECT NAME FROM V$CONTROLFILE;
NAME
-------------------------------------------
/u01/app/oracle/oradata/db/control01.ctl
/u01/app/oracle/oradata/db/control02.ctl
/u01/app/oracle/oradata/db/control03.ctl
V$CONTROLFILE视图,可以查到很多有意思的信息,就不在这里累述了。有兴趣的朋友,请自己查看。
由于Controlfile保持了如此多的信息,所以随着时间的推移,Controlfile其实是一个动态持续变化的一个文件。
Controlfile恢复中注意的问题:
1. 在数据库恢复过程中,某一时间点的控制文件只能*理解和恢复*在此之前,到上一次resetlogs时间段的备份和Archived log。这点非常重要,因为一旦恢复了控制文件,你的视角将被局限和拉回到备份控制文件的那个时间点上。
2. 每次恢复了Controlfile都需要resetlogs。(对此不是很能理解,还需要继续学习)
3. 利用RMAN等工具restore controlfile的时候,请一定注意output file的位置。如果输出文件的位置与当前pfile或spfile中指定的位置不一致的话,当mount数据库的时候不会使用刚restore回来的控制文件。所以,看到的信息会不一致。
4. 控制文件只需要restore过程即可,不需要recover,也不能catalog分析。所以,如果在控制文件放在文件系统中,可以直接copy即可。
5. 恢复Controlfile,必须在nomount的状态下执行。
这里顺便提一下Oracle启动的顺序,便于理解:
OFF  --------> NOMOUNT --------> MOUNT -------> OPEN
PFILE/SPFILE       CONTROLFILE      REDO LOG



不理解为什么需要resetlog。其实现在的认识是,不理解自己为什么当时不理解?!呵呵,这就是辩证法中的认识的上升。

好了,其实要讨论resetlog的问题,首先要知道两个东西:
1. SCN -- System Change Number。其实就是一个序列计数器,由此可以精确地确定数据库中的具体时刻。据说,是最精确的方法了。可以通过如下语句查询:
SELECT CURRENT_SCN FROM V$DATABASE;
OR:
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

2. INCARNATION -- 就是数据库的化身。

当恢复了Controlfile和数据库后,很显然,恢复点的SCN和恢复前的SCN是不尽相同的。而对一个数据库而言,是不允许SCN的不连续的。所以必然要发生的情况是需要让当前的SCN和恢复点的SCN一致。这个一致的过程,就是resetlog的过程。

其二,每当resetlog发生,对于数据库而言,就是一个新的(INCARNATION)化身的诞生。而恢复点之前的,将会成为Parent Incarnation。

其三,每当Resetlog,Archived Log的编号会回滚到1,开始重新计算。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/276487/viewspace-627530/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-22

  • 博文量
    100
  • 访问量
    183659