- 最后登录
- 2018-9-14
- 在线时间
- 47 小时
- 威望
- 205
- 金钱
- 2327
- 注册时间
- 2011-10-13
- 阅读权限
- 150
- 帖子
- 90
- 精华
- 0
- 积分
- 205
- UID
- 26
|
5#
发表于 2017-8-11 10:48:40
例如 :- % set ORACLE_SID=AUX1
- % set ORACLE_HOME=<....>
复制代码 !!!!! IMPORTANT !!!!!!!!
注意:请将ORACLE_HOME和ORACLE_SID指向辅助实例,而使用RMAN时,辅助实例是作为操作的目标库进行连接的。
1: 恢复并mount控制文件:
恢复一份'set until'时间相近的控制文件:- RMAN> run {
- restore controlfile from autobackup
- until time "TO_DATE('05/NOV/2007 15:40:00','DD/MON/YYYY HH24:MI:SS')";
- }
复制代码 如果recovery catalog未使用,对于autobackup, RMAN总会按指定until time的对应日找最新的控制文件进行恢复。对此解释,请查阅: RMAN not Choosing the Correct Controlfile Autobackup to Restore and Failing with RMAN-06095 (Doc ID 1326114.1).
RMAN需要的是指定时间点前最近的自动备份。可能指定时间点当日的最新自动备份并不是正确的选择。因此在no catalog情况下,使用以下命令:- RMAN> run {
- restore controlfile
- until time "TO_DATE('05/NOV/2007 15:40:00','DD/MON/YYYY HH24:MI:SS')";
- }
复制代码 mount数据库:
RMAN> alter database mount clone database;
注意:需要提一下,MOUNT CLONE DATABASE强制所有数据库文件被置于OFFLINE状态。
这实际上等同于:- SQL> startup mount
- SQL> alter database datafile <file#> offline; <--- 对每个数据文件
复制代码 2. 恢复一个数据库子库
a. 连接到mount的目标库上:
如果使用的catalog来进行controlfile恢复,那么你现在必须exit RMAN,再次连接且仅连接目标库。否则,catalog中之前主库的备份信息可能会受到影响。一旦备份控制文件被恢复和mount,其上的信息就可以被使用了。如果控制文件不够旧的话,那么请小心开库(请看步骤3):
b. 指定'SET UNTIL TIME':
指定时间点,正好在DROP/TRUNACTE表前的时点
c. 对所有数据文件 SET NEWNAME:
为数据文件指定新路径以进行恢复。请记住这是在辅助实例上的恢复,不应该对生产库进行覆盖或影响。
注意:由于不使用DUPLICATE命令,因此db_file_name_convert和log_file_name_convert参数就被无视了。
因此数据文件和位置必须使用‘set newname’命令进行设置。
d. 恢复必要表空间 RESTORE TABLESPACE:
恢复所需的那些表空间,其中包括有SYSTEM, SYSAUX, UNDO/Rollback表空间以及被drop或truncate的表所在的表空间。
SYSTEM表空在恢复中是必须的,因为它包含了几乎所有SYS和SYSTEM所拥有的的对象。其它一些表空间如果也存有SYS和SYSTENM用户所有的对象的话,可能也需要进行恢复。- SQL> select distinct tablespace_name
- from dba_segments where owner in ('SYS', 'SYSTEM');
复制代码 注意: 在RAC环境中,必须包括所有undo表空间。那些未被任何进程使用过的undo表空间则可以不必恢复。
e. SWITCH DATAFILE ALL:
使用恢复的新的路径/文件名来更新控制文件(通过SET NEWNAME)。
f. ALTER DATABASE DATAFILE ... ONLINE
使得那些恢复了的数据文件online,之后复原。
g. RECOVER DATABASE SKIP FOREVER TABLESPACE ......;
你需要指定哪些表空间不需要进行recover。否则会由于未找到这些(没被restore)的文件而复原失败。SKIP FOREVER语法会使得RMAN通过DROP项将数据文件处于offline状态。只有这些被指定的SKIP FOREVER表空间在数据库打开后可以被drop掉。因此,请不要在此语法中包含有你需要复原数据的表空间。
h. ALTER DATABASE RENAME FILE 改变所有Online Redo log文件的指定。
此命令被用来改变在线日志文件位置。当'resetlogs'被使用,Oracle会基于控制文件中的定义来建立在线重做日志。此命令可以变更路径及文件名。如果是在同一台服务器上操作,不用此命令的话会造成Oracle将生产库的在线重做日志覆盖重置。这会对生产库造成损害并导致宕机。
警告:如果redo log文件是以OMF结构存放的,当在克隆实例上执行redo log文件rename,它会尝试删除原库的在线重做日志,因此当你正在使用OMF时,你不应该在同台机器上尝试此方法。
一种好的替代方法是重建控制文件并指定redo log文件名。生成控制文件的脚本,执行如下:
SQL> alter database backup controlfile to trace as '/tmp/control.sql' resetlogs;
编辑生成的脚本并修改为新的log file名(非OMF结构)。这样就能避免原数据库在线重做日志文件被删除了。
例如:- RMAN> connect target /
- run
- {
- allocate channel t1 type sbt_tape
- parms='SBT_LIBRARY=/home/usupport/liblsm.so';
- set until time "to_date( '08-10-2007 06:00', 'DD-MM-RRRR HH24:MI')";
- set newname for datafile 1 to '/fs01/oradata/tspitr/system01.dbf';
- set newname for datafile 2 to '/fs01/oradata/tspitr/undotbs01.dbf';
- set newname for datafile 4 to '/fs01/oradata/tspitr/tools01.dbf';
- restore tablespace system, undotbs1, tools;
- switch datafile all;
- sql "alter database datafile 1,2,4 online";
- recover database skip forever tablespace TEMP,INDX,USERS,OLTS_ATTRSTORE,
- OLTS_CT_DN,OLTS_CT_CN, OLTS_CT_OBJCL,OLTS_CT_STORE,OLTS_DEFAULT,
- OLTS_TEMP,OLTS_IND_ATTRSTORE,
- OLTS_IND_CT_DN,OLTS_IND_CT_CN,OLTS_IND_CT_OBJCL,OLTS_IND_CT_STORE,
- P1TS_ATTRSTORE,P1TS_IND_STORE;
- sql "alter database rename file ''/fs01/oradata/primary/REDO01.LOG'' to ''/fs01/oradata/tspitr/REDO01.LOG''";
- sql "alter database rename file ''/fs01/oradata/primary/REDO02.LOG'' to ''/fs01/oradata/tspitr/REDO02.LOG''";
- sql "alter database rename file ''/fs01/oradata/primary/REDO03.LOG'' to ''/fs01/oradata/tspitr/REDO03.LOG''";
- /* 注意:这里语法中使用两个单引号,这是特定于系统的。 */
- release channel t1;
- }
复制代码 注意:在例子中,磁带库channel被分配,这主要基于备份的位置(你也可以使用磁盘channel)
NOTE: In this example, a Tape channel allocated. The need for this (or use of disk channel) depends on the location of the backups.
3: 使用RESETLOGS打开辅助库
RMAN> alter database open resetlogs;
注意:建议数据库恢复时不要使用catalog连接。不过,如果你当前需要从一个更旧的备份来进行恢复,那么请使用sqlplus,而不是RMAN来进行操作。否则,下一次目标库连接会收到以下报错:
RMAN-20011 "target database incarnation is not current in recovery catalog"
4: 表导出
数据库被复原打开后,就能用来导出所需数据了。例如:- $ exp userid=system/<password> file=table.dmp
- tables=(<owner>.<tablename>, ...) rows=Y
复制代码 5: 导入dump数据文件
将drop掉的表数据重新导入回生产库。例如:- $ imp userid=system/<password> file=table.dmp ignore=Y
复制代码 6: 移除AUX/DUMMY库
在表恢复工作完成后,关闭并移除掉所有和辅助库相关的文件。因为表的导出工作已经完成了。这个库已经不需要了。 |
|