linux下仅仅有rman备份集的异机不同文件夹恢复
昨天在客戶那里做了一次rman異機的恢復(fù),把生產(chǎn)庫弄一份給測試庫用,總庫大概80G,總共花費了2個小時,當時客戶的環(huán)境是windows 11.2.0.3,今天早晨在linux下又一次測試了一下,記錄下來供大家參考
環(huán)境:
全部操作都是按主機名區(qū)分
源庫:
主機名 ?bre1 ?實例名為bre1 ?數(shù)據(jù)文件文件夾在/u01/app/oradata下
目標庫:
主機名 bre2 ? 數(shù)據(jù)文件準備放在/bre1/oradata下
廢話不多說,以下是實際操作步驟
1.在源庫創(chuàng)建備份集,而且復(fù)制到目標庫
拷貝的文件夾可用和原來的備份的時候的文件夾一致,也能夠不一致
備份system表空間rman會自己主動備份參數(shù)文件和控制文件
RMAN> backup database format '/home/oracle/%U.bak';Starting backup at 21-AUG-2014 10:03:35 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00001 name=/u01/app/oracle/oradata/bre1/system01.dbf input datafile file number=00002 name=/u01/app/oracle/oradata/bre1/sysaux01.dbf input datafile file number=00003 name=/u01/app/oracle/oradata/bre1/undotbs01.dbf input datafile file number=00005 name=/u01/app/oracle/oradata/bre1/test.dbf input datafile file number=00004 name=/u01/app/oracle/oradata/bre1/users01.dbf channel ORA_DISK_1: starting piece 1 at 21-AUG-2014 10:03:36 channel ORA_DISK_1: finished piece 1 at 21-AUG-2014 10:03:51 piece handle=/home/oracle/03pggb7o_1_1.bak tag=TAG20140821T100336 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current control file in backup set including current SPFILE in backup set channel ORA_DISK_1: starting piece 1 at 21-AUG-2014 10:03:52 channel ORA_DISK_1: finished piece 1 at 21-AUG-2014 10:03:53 piece handle=/home/oracle/04pggb87_1_1.bak tag=TAG20140821T100336 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 21-AUG-2014 10:03:53[oracle@bre2 ~]$ scp bre1:/home/oracle/03pggb7o_1_1.bak . The authenticity of host 'bre1 (192.168.56.45)' can't be established. RSA key fingerprint is 73:56:4c:3a:01:3f:50:c8:d8:3a:5d:d5:21:00:6a:fe. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'bre1,192.168.56.45' (RSA) to the list of known hosts. oracle@bre1's password: 03pggb7o_1_1.bak 100% 336MB 37.3MB/s 00:09 [oracle@bre2 ~]$ scp bre1:/home/oracle/04pggb87_1_1.bak . oracle@bre1's password: 04pggb87_1_1.bak 100% 9600KB 9.4MB/s 00:00編輯一個最簡單的pfile,僅僅有db_name就可以:
[oracle@bre2 dbs]$ vi initbre1.ora [oracle@bre2 dbs]$ cat initbre1.ora db_name=bre1然后就能夠nomount打開數(shù)據(jù)庫了: SQL> startup nomount; ORACLE instance started.Total System Global Area 229683200 bytes Fixed Size 2251936 bytes Variable Size 171967328 bytes Database Buffers 50331648 bytes Redo Buffers 5132288 bytes SQL>
再使用rman來恢復(fù)spfile: RMAN> restore spfile from '/home/oracle/backup/04pggb87_1_1.bak';Starting restore at 21-AUG-2014 9:39:31 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=171 device type=DISKchannel ORA_DISK_1: restoring spfile from AUTOBACKUP /home/oracle/backup/04pggb87_1_1.bak channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete Finished restore at 21-AUG-2014 9:39:32RMAN>
使用spfile來打理數(shù)據(jù)庫試試 [oracle@bre2 ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 21 10:08:01 2014Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to an idle instance.SQL> startup nomount; ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initbre1.ora' SQL> startup nomount; ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initbre1.ora' SQL> startup nomount; ORA-09925: Unable to create audit trail file Linux-x86_64 Error: 2: No such file or directory Additional information: 9925有非常多相關(guān)文件夾沒有創(chuàng)建,能夠使用strings spfilebre1.ora來查看一下spfile里面的內(nèi)容,建好相關(guān)的文件夾,而且賦予權(quán)限。。這些都搞好后nomount打開數(shù)據(jù)庫不再報錯。
3.恢復(fù)控制文件
登陸到rman,控制文件還原的時候?qū)⑦€原到參數(shù)文件指定的位置,所以參數(shù)文件指定的控制文件文件夾必須存在,否則報錯,比如以下一開始我沒有創(chuàng)建就報錯,后來創(chuàng)建完畢就不報錯了,假設(shè)你想還原到其它地方,能夠改動參數(shù)文件指定到對應(yīng)地址。
RMAN> restore controlfile from '/home/oracle/04pggb87_1_1.bak';Starting restore at 21-AUG-2014 10:26:14 using channel ORA_DISK_1channel ORA_DISK_1: restoring control file RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 08/21/2014 10:26:15 ORA-19870: error while restoring backup piece /home/oracle/04pggb87_1_1.bak ORA-19504: failed to create file "/u01/app/oracle/oradata/bre1/control01.ctl" ORA-27040: file create error, unable to create file Linux-x86_64 Error: 2: No such file or directory Additional information: 1RMAN> restore controlfile from '/home/oracle/04pggb87_1_1.bak';Starting restore at 21-AUG-2014 10:26:50 using channel ORA_DISK_1channel ORA_DISK_1: restoring control file RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 08/21/2014 10:26:51 ORA-19504: failed to create file "/u01/app/oracle/fast_recovery_area/bre1/control02.ctl" ORA-27040: file create error, unable to create file Linux-x86_64 Error: 2: No such file or directory Additional information: 1 ORA-19600: input file is control file (/u01/app/oracle/oradata/bre1/control01.ctl) ORA-19601: output file is control file (/u01/app/oracle/fast_recovery_area/bre1/control02.ctl)RMAN> restore controlfile from '/home/oracle/04pggb87_1_1.bak';Starting restore at 21-AUG-2014 10:27:24 using channel ORA_DISK_1channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 output file name=/u01/app/oracle/oradata/bre1/control01.ctl output file name=/u01/app/oracle/fast_recovery_area/bre1/control02.ctl Finished restore at 21-AUG-2014 10:27:254.mount數(shù)據(jù)庫,注冊備份集
重新啟動數(shù)據(jù)庫,直接就能夠啟動到mount
假設(shè)此時備份集所在文件文件夾改變,須要手工catalog注冊備份集,這里我們將拷過來的備份文件拷貝到/home/oracle/backup下,演示一下手工catalog備份集
[oracle@bre2 ~]$ ls 03pggb7o_1_1.bak 04pggb87_1_1.bak pfile.ora test [oracle@bre2 ~]$ mkdir backup [oracle@bre2 ~]$ mv *.bak backup [oracle@bre2 ~]$ ls backup 03pggb7o_1_1.bak 04pggb87_1_1.bakRMAN> catalog backuppiece '/home/oracle/backup/03pggb7o_1_1.bak';Starting implicit crosscheck backup at 21-AUG-2014 10:32:10 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=10 device type=DISK Crosschecked 1 objects Finished implicit crosscheck backup at 21-AUG-2014 10:32:10Starting implicit crosscheck copy at 21-AUG-2014 10:32:10 using channel ORA_DISK_1 Finished implicit crosscheck copy at 21-AUG-2014 10:32:11searching for all files in the recovery area cataloging files... no files catalogedcataloged backup piece backup piece handle=/home/oracle/backup/03pggb7o_1_1.bak RECID=2 STAMP=856175531RMAN> catalog backuppiece '/home/oracle/backup/04pggb87_1_1.bak';cataloged backup piece backup piece handle=/home/oracle/backup/04pggb87_1_1.bak RECID=3 STAMP=856175550
5.使用set newname將數(shù)據(jù)文件還原到不同文件夾
原來的數(shù)據(jù)文件文件夾在/u01/admin/oradata以下,我們將數(shù)據(jù)文件恢復(fù)到/bre1/oradata以下,%b的意思是僅僅獲取文件名稱,沒有文件夾信息
資料上說能夠使用switch datafile all來直接改動控制文件里的文件文件夾,可是我試了一下貌似不行,還是須要在手工rename,以下是我手工改動控制文件里的數(shù)據(jù)文件文件夾,先看一下當前的數(shù)據(jù)文件文件夾
SQL> select name from v$datafile;NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/bre1/system01.dbf /u01/app/oracle/oradata/bre1/sysaux01.dbf /u01/app/oracle/oradata/bre1/undotbs01.dbf /u01/app/oracle/oradata/bre1/users01.dbf /u01/app/oracle/oradata/bre1/test.dbfSQL> select name from v$tempfile;NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/bre1/temp01.dbfSQL> select member from v$logfile;MEMBER -------------------------------------------------------------------------------- /u01/app/oracle/oradata/bre1/redo01.log /u01/app/oracle/oradata/bre1/redo02.log /u01/app/oracle/oradata/bre1/redo03.log我自己寫了一個拼接sql來將數(shù)據(jù)文件文件夾做轉(zhuǎn)換:
select 'alter database rename file '''||name||''' to ''/bre1/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$datafile
union all
select 'alter database rename file '''||name||''' to ''/bre1/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$tempfile
union all
select 'alter database rename file '''||member||''' to ''/bre1/oradata'||substr(member,length(member)-INSTR(reverse(member),'/')+1,INSTR(reverse(member),'/'))||''';' from v$logfile
;
6.恢復(fù)數(shù)據(jù)庫
我這里是測試就沒有恢復(fù)什么歸檔日志,假設(shè)是正式生產(chǎn)庫,還須要恢復(fù)歸檔日志,可能還須要使用到CATALOG ARCHIVELOG 來注冊歸檔的備份集和在RMAN中使用
RUN
{?
? SET ARCHIVELOG DESTINATION TO '/home/oracle';
? RESTORE ARCHIVELOG all; ? ? ??
} ? ?
來還原出歸檔日志。
或者還能夠在controlfile中改動歸檔文件夾來恢復(fù)。恢復(fù)出歸檔日志之后,就能夠進行數(shù)據(jù)庫恢復(fù)。
解決的方法:
使用SQL> alter database clear logfile group 2;
到此恢復(fù)成功!
總結(jié):
基本的難點是須要對rman比較熟悉,須要使用語句改動控制文件里的文件位置,否則會報錯找不到相關(guān)文件。
假設(shè)備份集的文件夾改變了,須要手工catalog注冊備份集到控制文件,而且rename file。
轉(zhuǎn)載于:https://www.cnblogs.com/gcczhongduan/p/4308805.html
總結(jié)
以上是生活随笔為你收集整理的linux下仅仅有rman备份集的异机不同文件夹恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EJS脚本中AES应用
- 下一篇: 【转】JNI学习积累之一 ---- 常用