原系统: win7 64位系统 oracle 10.2.0.3.0 32位数据库,里面真实数据:

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第1张图片

目标系统:redhat 5.4 oracle 10.2.0.3.0 32位数据库

 

【最好做迁移的是同数据库版本,可以避免不少问题,但可以尝试从低版本恢复到高版本,而高版本恢复到低版本就不推荐了,至少试过恢复,但不少问题】

 

备份脚本:

orcl  DBID=1297031839【要在源数据库记录下来】

 

run{

allocate channel c1 type disk;

sql 'alter system archive log current';

backup database format 'D:\rman\rman\full_db_%U_%T';

backup archivelog all delete all input format 'D:\rman\rman\ARC_%U_%T';

backup current controlfile format 'D:\rman\rman\ctr_%U_%T';

release channel c1;

}

【注意:控制文件一定要最后备份,由于没做归档目录数据库,rman备份信息都放在控制文件里面,要保证备份过程的信息内容都进入到控制文件,保证数据文件和控制文件是一致备份

 

pfile备份是由win7数据库直接利用一下语句备份出来的:

create pfile='D:/initorcl.ora' from spfile;pfile备份后,拷贝到目标数据库服务器】

 【一般rman全备只备份spfile 那pfile可以通过restore spfile to pfile ‘xxx’ from ‘spfile备份集’来恢复pfile,

然后对pfile进行相应修改(不同平台迁移必须修改,同平台迁移 路径不同的时候,也有时候要修改)】

需要对pfile进行修改【由于WindowsLinux磁盘路径不一样,要手工修改到目标数据库的相关路径,并建立相关数据库目录,不然会提示找不到adump udump等目录路径文件的

====================================================

orcl.__db_cache_size=398458880

orcl.__java_pool_size=16777216

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=163577856

orcl.__streams_pool_size=0

*.audit_file_dest='/opt/app/oracle/product/10.2/admin/orcl/adump'

*.background_dump_dest='/opt/app/oracle/product/10.2/admin/orcl/bdump'

*.compatible='10.2.0.3.0'

*.control_files='/opt/app/oracle/oradata/control01.ctl','/opt/app/oracle/oradata/control02.ctl','/opt/app/oracle/oradata/control03.ctl'

*.core_dump_dest='/opt/app/oracle/product/10.2/admin/orcl/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.db_recovery_file_dest='/opt/app/oracle/product/10.2/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.job_queue_processes=10

*.open_cursors=300

*.pga_aggregate_target=196083712

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=589299712

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/opt/app/oracle/product/10.2/admin/orcl/udump'

 

对于修改的路径要进行确认,是否linux下已经有该路径了

====================================================

然后传送进去linux系统,正式恢复数据库:

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1,用传进来的pfile启动nomount数据库:set DBID=1296363687

 

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第2张图片

 

现在还看不到备份集的:

2,恢复控制文件

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第3张图片

 

3,把数据库mount起来

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第4张图片

 

4,设置【由于WindowsLinux路径不同,控制文件虽然恢复出来,但里面信息还是Windows下的目录路径,如下动作是告诉rman从哪里读取备份集】

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第5张图片

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第6张图片

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第7张图片

 

【如上图 catalog with 命令后,就可以识别存放备份集的物理位置了】

 

5,执行数据库恢复脚本如下:【目标数据库是Linux 目录路径不同,要对数据文件进行set newname操作】

run{

allocate channel c1 type disk;

set newname for datafile 1 to '/opt/app/oracle/product/10.2/oradata/orcl/SYSTEM01.DBF';

set newname for datafile 2 to '/opt/app/oracle/product/10.2/oradata/orcl/UNDOTBS01.DBF';

set newname for datafile 3 to '/opt/app/oracle/product/10.2/oradata/orcl/SYSAUX01.DBF.DBF';

set newname for datafile 4 to '/opt/app/oracle/product/10.2/oradata/orcl/USERS01.DBF.DBF';

set newname for datafile 5 to '/opt/app/oracle/product/10.2/oradata/orcl/RMAN.DBF';

restore database;

switch datafile all;

release channel c1;

}

【如下为操作步骤and过程输出信息】

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第8张图片

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第9张图片

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第10张图片

 

6.recover database

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第11张图片

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第12张图片

 

报错了,但是没关系,并非严重错误,只是提醒你一些不完整recover信息,有时候会提示恢复到一个未知的scn号。如果要避免这个scn未知错误,可以在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间

 

7,启动数据库【由于有新的log文件和临时表空间,要resetlogs

 

8验证是否恢复成功

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第13张图片

 

到这里证明已经正确恢复了数据库,以下是善后工作:

 

sqlplus / as sysdba下执行:

 

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第14张图片

 

要重建下spfile,因为恢复时候是通过pfile恢复的,建好spfile后,重启就不需要指定pfile,直接默认用spfile启动数据库了。

【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】_第15张图片

可以再做个pfile的备份。

 

恢复好数据库后,最好对数据库做个全备喔。