原系统: win7 64位系统 oracle 10.2.0.3.0 32位数据库,里面真实数据:
目标系统: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进行修改【由于Windows跟Linux磁盘路径不一样,要手工修改到目标数据库的相关路径,并建立相关数据库目录】,不然会提示找不到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
现在还看不到备份集的:
2,恢复控制文件
3,把数据库mount起来
4,设置【由于Windows跟Linux路径不同,控制文件虽然恢复出来,但里面信息还是Windows下的目录路径,如下动作是告诉rman从哪里读取备份集】
【如上图 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过程输出信息】
6.recover database;
报错了,但是没关系,并非严重错误,只是提醒你一些不完整recover信息,有时候会提示恢复到一个未知的scn号。如果要避免这个scn未知错误,可以在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间
7,启动数据库【由于有新的log文件和临时表空间,要resetlogs】
8验证是否恢复成功
到这里证明已经正确恢复了数据库,以下是善后工作:
在sqlplus / as sysdba下执行:
要重建下spfile,因为恢复时候是通过pfile恢复的,建好spfile后,重启就不需要指定pfile,直接默认用spfile启动数据库了。
可以再做个pfile的备份。
恢复好数据库后,最好对数据库做个全备喔。