零基础学习Oracle(初级篇2) 
编写者:张东 00290412
2015/6/3
1. 序言
在上篇,我们学习了关键路径上的知识。管用吗?
光说不练,读再多书也只能是台扫描仪。
下面,我们将开启“任务式”的场景。上篇学习的知识,将作为弓箭射向靶心。
上篇安装的Oracle数据库,将作为本篇描述的实验环境。
2. 备份恢复方法
1. 逻辑备份 & 恢复 (exp/imp, expdp/impdp)
2. 物理备份 & 恢复 (rman )
本篇只讲述rman方式。不要问为什么,呵呵。
3. 物理备份
3.1 概述
首先,数据库系统由两部分组成:
1. 数据库软件
2. 数据库内容
本文关心的是数据库内容,主体是数据文件。
因为数据文件的备份时间点不同(有先后顺序,数据不断变化),所以我们需要通过归档日志来保证数据库内容的一致性。
谈到备份,我们需要关心这四个问题:
备份又分为在线(数据库open状态)、离线(数据库mount状态)两份方式。
3.2 Checklist
1. 确认当前数据库处于open状态。方法见《Oracle初级篇1》第3章。
2. 确认数据文件保存在文件系统上。方法见《Oracle初级篇1》第4章。
3. 确认数据库已经开启了归档模式。方法见《Oracle初级篇1》第5章。
3.3 登录到rman
su - oracle rman target /
看见RMAN> 提示符。注意阅读提示信息。
3.4 执行数据文件全备份
在RMAN里输入以下命令,执行我们的第一个备份。
注意,一行一行地输入,> 符号及它以前的字符无需输入。
RMAN> run{
2> allocate channel ch00 type disk;
3> backup database;
4> release channel ch00;
5> }
注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,生成的备份文件名字。
3.5 +归档日志备份
要备份数据文件的同时,也备份归档日志,我们只需要做一点点小的修改。
注意,一行一行地输入,> 符号及它以前的字符无需输入。
RMAN> run{
2> allocate channel ch00 type disk;
3> backup database plus archivelog;
4> release channel ch00; 5> }
注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志生成的备份文件名字。
3.6 +控制文件
备份了数据文件和归档日志,我们还需要在这它们的备份完成后,备份最新的控制文件。
我们为什么需要备份控制文件呢?因为控制文件保存了数据库的备份(数据文件、归档日志)信息。
为什么要最新的?因为老的备份文件,不会有相对于它来说是将来的备份信息。
注意,一行一行地输入,> 符号及它以前的字符无需输入。
RMAN> run{
2> allocate channel ch00 type disk;
3> backup database plus archivelog;
4> backup current controlfile;
5> release channel ch00; 6> }
注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志、控制文件生成的备份文件名字。
3.7 小结
通过一步步地递进学习,大家已经学会备份Oracle数据库。
完整的备份 = 数据库文件 + 归档日志 + 最新控制文件
恢复也是基于完整的备份。
4. 物理恢复
4.1 数据文件丢失
4.1.1 数据文件被删除
当当当!小明不小心删除了数据文件!
谁是小明?别东张西望的,就是你。
请用《Oracle初级篇1》第4章的知识找到数据文件的位置,然后删除所有的数据文件。
如果你删错了文件,有可能“英雄十八年后重新来过”哦:)
4.1.2 需要的数据库状态
我们需要复习一下《Oracle初级篇1》第3章,在什么情况下可以进行数据文件的恢复。
我们发现,数据库在mount状态下能够进行数据文件的恢复。
所以,我们的操作流程是:
1. 检查数据库状态;
2. 把数据库切换到shutdown状态;
3. 把数据从shutdown状态切换到mount状态。
方法在《Oracle初级篇1》第3章有介绍,这里不赘述了。
补充的是,如果数据库无法正常关闭(数据文件丢失),强制关闭数据库的SQL命令是shutdown abort.
4.1.3 恢复数据文件
现在数据库已经在mount状态了。
我们只需要执行如下的rman命令,就可以恢复数据库了。
注意,一行一行地输入,> 符号及它以前的字符无需输入。
RMAN> run{
2> allocate channel ch00 type disk;
3> restore database;
4> recover database;
5> release channel ch00;
6> }
注意阅读提示信息。
恢复完成后,检查被删除的数据文件,是否被恢复。
数据库恢复完成后,把数据库从mount状态切换到open状态。
4.2 +控制文件丢失
4.2.1 控制文件 & 数据文件被删除
当当当!小明又不小心删除了控制文件和数据文件!
这时,你很自觉地运用《Oracle初级篇1》第4章的知识找到控制文件和数据文件的位置,然后把它们给删了。
4.2.2 需要的数据库状态
我们需要复习一下《Oracle初级篇1》第3章,在什么情况下可以进行控制文件的恢复。
我们发现,数据库在nomount状态下能够进行控制文件的恢复。
所以,我们的操作流程是:
1. 检查数据库状态;
2. 把数据库切换到shutdown状态;
3. 把数据从shutdown状态切换到nomount状态。
方法在《Oracle初级篇1》第3章有介绍,这里不赘述了。
补充的是,如果数据库无法正常关闭(控制文件、数据文件丢失),强制关闭数据库的SQL命令是shutdown abort.
你没看错,大部分内容与上一节相似。
4.2.3 恢复控制文件
请打气精神来,关键点、也是大干货来了!
以下是恢复控制文件的模板。注意,是模板!
run{
allocate channel ch00 type disk;
restore controlfile from '???';
release channel ch00; }
看到???个问号没有,这个就是我们需要填入的内容。
在第2章,我反复告诉大家,注意阅读备份的屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志、控制文件生成的备份文件名字。
你没看,或者没看懂?但至少你应该知道备份目录吧。
没关系的,我们可以按以下原则进行查找:
1. 控制文件的备份文件不大,一般是最小的文件,一般不超过1G
2. 我们要的控制文件是最新的,所以它的生成日期最晚
我们用备份文件的全路径来代替???
譬如,在我的测试环境里就写成
run{
allocate channel ch00 type disk;
restore controlfile from '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/0gpo886i_1_1';
release channel ch00; }
报错,没关系,我们再运用上述原则尝试另外1个备份文件。
4.2.4 恢复数据文件
控制文件恢复完成,把数据库从nomount状态切换到mount状态。
再然后,按4.1.3的流程恢复数据文件。
这里需要注意的是:
数据库恢复完成后,用alter database open resetlogs来代替alter database open,把数据库从mount状态切换到open状态
4.3 小结
控制文件 + 数据文件的恢复,这就是一个迁移数据库主机(v2v, 环境不变)流程中,数据库迁移的主要步骤。
如果单独的控制文件丢失,也可以用4.1.3的流程。唯一的不同,是要去掉这一行。
3> restore database;
5. 下一步行动
恭喜你!你独立完成了一个任务,学会了一个Oracle技能。稍加磨练,就可以真刀真枪上场交付了。
在本篇,我们运用了上一篇的知识,学习到了技能。
下一篇,我们将接受实战的检验。
谢谢大家的耐心阅读。你学习中的疑问和困惑,将是我改进的方向。如果我有幸能帮到你一点点,请赞一下,谢谢。你的鼓励,是我前进的动力