首页 > 代码库 > 使用rman的level0的备份文件迁移oracle数据库-不完全恢复
使用rman的level0的备份文件迁移oracle数据库-不完全恢复
使用rman的level0的备份文件迁移oracle数据库-不完全恢复-20160811
将oracle数据库从一台机器A迁移到另外的一台机器B(同为linux平台),设置为不同的路径,不同的实例名
源端:
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1
ORACLE_SID=SCPDB
数据文件位置:/u01/app/oracle/oradata/SCPDB/datafile/
目标端:
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1
ORALCE_SID=SCPDB01
数据文件位置:/u01/app/oracle/oradata/SCPDB01/datafile/
把备份上传到目标端/u01/rmanSCPDB/
备份集信息:
[oracle@SCP01 /]$ ll /u01/rmanSCPDB/*
-rw-r--r--. 1 oracle oinstall 10256384 Aug 10 18:18 /u01/rmanSCPDB/ctl_auto_c-2612507248-20160712-00.bk
-rw-r--r--. 1 oracle oinstall 1089299968 Aug 10 18:18 /u01/rmanSCPDB/o12c_full_level0_SCPDB201607122erahka5_1_1.bk
-rw-r--r--. 1 oracle oinstall 2024849408 Aug 10 18:19 /u01/rmanSCPDB/o12c_full_level0_SCPDB201607122frahkan_1_1.bk
-rw-r--r--. 1 oracle oinstall 12288 Aug 10 18:19 /u01/rmanSCPDB/o12c_full_level0_SCPDB201607122grahkbg_1_1.bk
以下都在目标端使用oracle用户操作
cd $ORACLE_BASE
mkdir flash_recovery_area
mkdir -p admin/SCPDB01
cd admin/SCPDB01
mkdir {a,b,c,d,u}dump
开始恢复,此时恢复的实例名为SCPDB
export ORACLE_SID=SCPDB
rman target /
===================================================
==在rman启动数据库到nomount, ===
==还原spfile,使用nomount打开数据库 ===
==编辑一个最简单的pfile,只有db_name即可: ===
==vi initSCPDB.ora ===
==cat initSCPDB.ora ===
==db_name=SCPDB ===
== ===
==也可以不用创建pfile,直接启动到nomount ===
===================================================
RMAN> startup nomount
RMAN> restore spfile from ‘/u01/rmanSCPDB/ctl_auto_c-2612507248-20160712-00.bk‘;
RMAN> shutdown immediate
编辑参数文件,使参数中的相关路径变更为新路径
注意:ORACLE_SID=SCPDB
sqlplus / as sysdba
create pfile from spfile;
编辑生成的$ORACLE_HOME/dbs/initSCPDB.ora文件,
根据需要修改相应的参数,如增加sga大小等
其次修改pfile文件中的相关路径使之指向新的位置,即参数文件中所有含SCPDB目录的应修改为SCPDB01
*.audit_file_dest=‘/u01/app/oracle/admin/SCPDB01/adump‘
*.control_files=‘/u01/app/oracle/oradata/SCPDB01/controlfile/o1_mf_clozc9vs_.ctl‘,‘/u01/app/oracle/fast_recovery_area/SCPDB01/controlfile/o1_mf_clozcb1k_.ctl‘
*.log_archive_dest_1=‘location=/u01/archscp01‘
注意db_name参数不变,为原来的db_name,
待恢复完成后使用nid修改
使用pfile文件启动到nomount状态
目标端的一些参数
*.__data_transfer_cache_size=0
*.__db_cache_size=1808M
*.__java_pool_size=16M
*.__large_pool_size=32M
*.__oracle_base=‘/u01/app/oracle‘ # ORACLE_BASE set from environment
*.__pga_aggregate_target=800M
*.__sga_target=2384M
*.__shared_io_pool_size=80M
*.__shared_pool_size=432M
*.__streams_pool_size=0
*.pga_aggregate_target=790m
*.sga_target=2384M
源端的一些参数
SCPDB.__data_transfer_cache_size=0
SCPDB.__db_cache_size=15904800768
SCPDB.__java_pool_size=469762048
SCPDB.__large_pool_size=1140850688
SCPDB.__oracle_base=‘/u01/app/oracle‘#ORACLE_BASE set from environment
SCPDB.__pga_aggregate_target=6777995264
SCPDB.__sga_target=20333985792
SCPDB.__shared_io_pool_size=536870912
SCPDB.__shared_pool_size=2214592512
SCPDB.__streams_pool_size=0
---还原控制文件
export ORACLE_SID=SCPDB
rman target /
RMAN> startup nomount
RMAN> restore controlfile from ‘/u01/backup/ctl_auto_c-2612507248-20160809-00.bk‘;
---切换到mount状态,注,db_name务必保持原db_name,否则切换到mount时提示
---ORA-01103: database name ‘SCPDB‘ in control file is not ‘SCPDB01‘
RMAN> alter database mount;
RMAN> exit
---开启第二个窗口,修改日志文件位置
export ORACLE_SID=SCPDB
sqlplus / as sysdba
SQL> select ‘alter database rename file ‘‘‘||member||‘‘‘ to ‘‘‘||replace(member,‘SCPDB‘,‘SCPDB01‘)||‘‘‘;‘ from v$logfile;
alter database rename file ‘/u01/app/oracle/fast_recovery_area/SCPDB/onlinelog/redo08a.log‘ to ‘/u01/app/oracle/fast_recovery_area/SCPDB01/onlinelog/redo08a.log‘;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/onlinelog/redo08b.log‘ to ‘/u01/app/oracle/oradata/SCPDB01/onlinelog/redo08b.log‘;
alter database rename file ‘/u01/app/oracle/fast_recovery_area/SCPDB/onlinelog/redo09a.log‘ to ‘/u01/app/oracle/fast_recovery_area/SCPDB01/onlinelog/redo09a.log‘;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/onlinelog/redo09b.log‘ to ‘/u01/app/oracle/oradata/SCPDB01/onlinelog/redo09b.log‘;
alter database rename file ‘/u01/app/oracle/fast_recovery_area/SCPDB/onlinelog/redo05a.log‘ to ‘/u01/app/oracle/fast_recovery_area/SCPDB01/onlinelog/redo05a.log‘;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/onlinelog/redo05b.log‘ to ‘/u01/app/oracle/oradata/SCPDB01/onlinelog/redo05b.log‘;
alter database rename file ‘/u01/app/oracle/fast_recovery_area/SCPDB/onlinelog/redo06a.log‘ to ‘/u01/app/oracle/fast_recovery_area/SCPDB01/onlinelog/redo06a.log‘;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/onlinelog/redo06b.log‘ to ‘/u01/app/oracle/oradata/SCPDB01/onlinelog/redo06b.log‘;
alter database rename file ‘/u01/app/oracle/fast_recovery_area/SCPDB/onlinelog/redo07a.log‘ to ‘/u01/app/oracle/fast_recovery_area/SCPDB01/onlinelog/redo07a.log‘;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/onlinelog/redo07b.log‘ to ‘/u01/app/oracle/oradata/SCPDB01/onlinelog/redo07b.log‘;
---执行上述语句
SQL> alter database rename file ‘/u01/app/oracle/oradata/SCPDB/datafile/o1_mf_temp_cto6lh07_.tmp‘ to ‘/u01/app/oracle/oradata/SCPDB01/datafile/o1_mf_temp_cto6lh07_.tmp‘;
.......
---回到第一个窗口中
export ORACLE_SID=SCPDB
rman target /
---使用catalog start with指定备份文件位置
RMAN> catalog start with ‘/u01/backup/‘;
---还原及恢复数据库,由于使用了不同的位置,因此我们需要使用set newname 子句,如下面的示例
run{
allocate channel ch1 device type disk;
set newname for datafile 1 to ‘/u01/app/oracle/oradata/SCPDB01/datafile/system.dbf‘;
set newname for datafile 3 to ‘/u01/app/oracle/oradata/SCPDB01/datafile/sysaux.dbf‘;
set newname for datafile 4 to ‘/u01/app/oracle/oradata/SCPDB01/datafile/undotbs1.dbf‘;
set newname for datafile 6 to ‘/u01/app/oracle/oradata/SCPDB01/datafile/users.dbf‘;
set newname for datafile 2 to ‘/u01/app/oracle/oradata/SCPDB01/datafile/TBS_NotifyDB.dbf‘;
set newname for datafile 5 to ‘/u01/app/oracle/oradata/SCPDB01/datafile/TBS_gmscp.dbf‘;
set newname for datafile 7 to ‘/u01/app/oracle/oradata/SCPDB01/datafile/tbsp_index01.dbf‘;
restore database;
release channel ch1;
switch datafile all;
}
=====================================================================================
----也可以使用
set newname for database to ‘/u01/app/oracle/oradata/SCPDB01/datafile/%b‘;
run{
allocate channel ch1 device type disk;
set newname for database to ‘/u01/app/oracle/oradata/SCPDB01/datafile/%b‘;
restore database;
release channel ch1;
switch datafile all;
}
=====================================================================================
RMAN> recover database;
---Recover过程中会收到如下错误提示
archived log thread=1 sequence=614
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 08/11/2016 14:21:27
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 614 and starting SCN of 8223302
RMAN> recover database until sequence 614;
RMAN> alter database open resetlogs;
---修改临时文件位置
export ORACLE_SID=SCPDB
sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup mount
SQL> select ‘alter database rename file ‘‘‘||name||‘‘‘ to ‘‘‘||replace(name,‘SCPDB‘,‘SCPDB01‘)||‘‘‘;‘ from v$tempfile;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/datafile/gmscpTemp01.dbf‘ to ‘/u01/app/oracle/oradata/SCPDB01/datafile/gmscpTemp01.dbf‘;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/datafile/NotifyDBTemp01.dbf‘ to ‘/u01/app/oracle/oradata/SCPDB01/datafile/NotifyDBTemp01.dbf‘;
alter database rename file ‘/u01/app/oracle/oradata/SCPDB/datafile/o1_mf_temp_ctr6mjvh_.tmp‘ to ‘/u01/app/oracle/oradata/SCPDB01/datafile/o1_mf_temp_ctr6mjvh_.tmp‘;
SQL> alter database open;
---修改实例名,以及数据库名
export ORACLE_SID=SCPDB
sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup mount
SQL> !nid target=sys/oracle dbname=SCPDB01 logfile=/tmp/change_name2SCPDB01.log
SQL> create spfile from pfile;
SQL> startup mount;
启动数据库,这个时候会报数据库名称不一致的错误,不去管他(ORA-01103: database name ‘SCPDB‘ in control file is not ‘SCPDB01‘)
SQL> alter system set db_name=‘SCPDB01‘ scope=spfile;
SQL> create pfile from spfile;
SQL> shutdown immediate;
[oracle@SCP01 ~]$ export ORACLE_SID=SCPDB01
[oracle@SCP01 ~]$ sqlplus / as sysdba
SQL> startup pfile=‘/u01/app/oracle/product/12.1.0.2/db_1/dbs/initSCPDB.ora‘;
SQL> create spfile from pfile=‘/u01/app/oracle/product/12.1.0.2/db_1/dbs/initSCPDB.ora‘;
SQL> shutdown immediate;
SQL> startup mount;
SQL> create pfile from spfile;
SQL> alter database open resetlogs;
SQL> alter system register;
SQL> alter user system identified by oracle;
相关参考:
http://blog.sina.com.cn/s/blog_67be3b4501017zz9.html
http://blog.csdn.net/leshami/article/details/8076841
http://www.2cto.com/database/201408/327614.html
配置rman并备份
RMAN> show all;
RMAN configuration parameters for database with db_unique_name SCPDB01 are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/u01/backup/level0/ctl_auto_%F.bk‘;
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/u01/backup/level0/o12c_full_level0_%d%T%U.bk‘;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM ‘AES128‘; # default
CONFIGURE COMPRESSION ALGORITHM ‘BASIC‘ AS OF RELEASE ‘DEFAULT‘ OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/product/12.1.0.2/db_1/dbs/snapcf_SCPDB01.f‘; # default
RMAN> backup database plus archivelog delete input;
使用rman的level0的备份文件迁移oracle数据库-不完全恢复