继续上一篇RMAN跨版本恢复的内容,今天主要分享在目的端恢复的过程,下面一起来看看吧!
因为目标数据库已经有实例,但不需要的,所以这里需要先删除一下。
1、删除安装Oracle数据库时的实例
cmd> dbca
2、创建一个空的数据库实例
cmd> oradim -new -sid orcl -startmode a cmd> rman target / nocataLOG
3、编辑pfile文件
因为源数据库是32G内存,目的数据库是8G内存,所以需编辑pfile文件
--8G参考
*.audit_file_dest='F:\app\Administrator\admin\orcl\adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='F:\app\Administrator\oradata\orcl\control01.ctl','F:\app\Administrator\fast_recovery_area\orcl\control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.db_recovery_file_dest='F:\app\Administrator\fast_recovery_area' *.db_recovery_file_dest_size=107374182400 *.diagnostic_dest='F:\app\Administrator' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.log_archive_format='F:\app\Administrator\fast_recovery_area\orcl\archivelog\archivelog_%t_%s_%r.arc' *.memory_target=3722444800 *.open_cursors=2000 *.processes=900 *.remote_login_passwordfile='EXCLUSIVE' *.resource_limit=FALSE *.undo_retention=900 *.undo_tablespace='UNDOTBS1'
4、创建对应目录及授权
--根据前面pfile文件所涉及的目录创建 F:\app\Administrator\oradata\orcl\ F:\app\Administrator\flash_recovery_area\orcl\ F:\app\Administrator\flash_recovery_area\orcl\archivelog\
5、利用参数文件打开实例到nomount模式。
sql> startup force nomount pfile='E:\rmanbackup\pfile.ora'; SQL> create spfile from pfile='E:\rmanbackup\pfile.ora';
重要:根据修改好的pfile创建新的spfile。
sql > create spfile from pfile;
原因:下次重启oracle的时候,oracle优先用spfile打开数据库,如果spfile还是旧的话,那么就会报错,打不开数据库。
6、恢复控制文件
--恢复控制文件到参数文件指定目录 RMAN> restore controlfile from 'E:\rmanbackup\SPFILE_CONTROLFILE_ORCL_1425356587_13510_1_20190923.BKP';
7、根据控制文件将数据库打开到mount模式。
RMAN> sql 'alter database mount';
清理过期备份:
RMAN> crosscheck backup; RMAN> delete expired backup;
8、注册rman信息
把拷贝来的备份注册到rman里
RMAN> catalog start with 'E:\rmanbackup\';
9、查看数据文件原路径
SQL>select file# as "file/grp#", name from v$datafile;
10、还原数据库数据文件。
根据实际环境设置新的数据文件恢复目录,这里使用之前准备的source数据库文件结构信息。
RMAN> run { allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; set newname for datafile 1 to "F:\oradata\SYSTEM01.dbf"; set newname for datafile 2 to "F:\oradata\SYSAUX01.dbf"; set newname for datafile 3 to "F:\oradata\UNDOTBS01.dbf"; set newname for datafile 4 to "F:\oradata\USERS01.dbf"; set newname for datafile 5 to "F:\oradata\NNC_DATA01.dbf"; set newname for datafile 6 to "F:\oradata\NNC_INDEX01.dbf"; set newname for datafile 7 to "F:\oradata\NNC_DATA02.dbf"; set newname for datafile 8 to "F:\oradata\NNC_DATA03.dbf"; set newname for datafile 9 to "F:\oradata\NNC_DATA04.dbf"; set newname for datafile 10 to "F:\oradata\AUD01.dbf"; restore database; switch datafile all; release channel c1; release channel c2; release channel c3; }
对switch datafile all的说明:
------------------------------------------------------------------- 对于nocatalog 模式下,rman备份的信息是保存在控制文件里的,包括文件的路径信息。 这里的switch datafile all的作用,就是更新控制文件里的信息。 -------------------------------------------------------------------
11、数据库介质恢复
SQL> recover database;
出现此错误的原因是恢复需要的日志记录在控制文件或恢复目录中找不到。解决方法分两种情况:
1.如果相关的日志存在且可用的话,就将此日志记录添加到控制文件或恢复目录中。
2.如果相关的日志已经被删除了或不可用了,那么就按照错误的提示scn将数据库恢复到此scn,本案例是1268579013。
也就是说此时数据库只能进行不完全恢复了,在打开数据库时得使用resetlogs打开。
rman> recover database until scn 1268579013;
12、指定联机日志在新系统中的路径
SQL> alter database rename file 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG' to 'F:\APP\ADMINISTRATOR\oradata\orcl\REDO01.LOG'; SQL> alter database rename file 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG' to 'F:\APP\ADMINISTRATOR\oradata\orcl\REDO02.LOG'; SQL> alter database rename file 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG' to 'F:\APP\ADMINISTRATOR\oradata\orcl\REDO03.LOG'; SQL> alter database rename file 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO04.LOG' to 'F:\APP\ADMINISTRATOR\oradata\orcl\REDO04.LOG'; SQL> alter database rename file 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO05.LOG' to 'F:\APP\ADMINISTRATOR\oradata\orcl\REDO05.LOG'; SQL> alter database rename file 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO06.LOG' to 'F:\APP\ADMINISTRATOR\oradata\orcl\REDO06.LOG';
13、更改temp表空间目录
SQL> select name from v$tempfile; --表空间offline SQL> alter database tempfile 'xxx.dbf' offline; --在OS 级别移动temp 的数据文件 SQL> !mv xxx/temp01.dbf xxxtemp01.dbf --修改控制文件中temp文件的信息 SQL> alter database rename file 'xxxtemp01.dbf' to 'xxxxtemp01.dbf'; --temp 表空间online SQL> alter database tempfile 'xxxtemp01.dbf' online; --验证 SQL> select name from v$tempfile;
14、打开数据库
SQL> shutdown immediate; SQL> startup upgrade; --执行升级脚本catupgrd.sql SQL> spool upgrade.log SQL> @?/rdbms/admin/catupgrd.sql --执行升级脚本catuppst.sql SQL> startup SQL> @?/rdbms/admin/catuppst.sql
需要说明的就是:在open resetlogs 之后,自动在原来默认的路径创建了temp 表空间和online redo 日志文件。为了方便起见,建议先在controlfile中进行这些目录的更改。
15、编译无效对象
重新编译下:
SQL> @?/rdbms/admin/utlrp.sql;
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
,