现在的位置: 首页 > 综合 > 正文

使用rman迁移oracle数据库

2017年12月20日 ⁄ 综合 ⁄ 共 7427字 ⁄ 字号 评论关闭

环境:源主机hostname:localhost  平台:rhel X86_64   数据库版本:11g R2   数据位置:/home/oracle/app/oracle/oradata

           目标主机:主机名standby    平台:rhel X86_64   数据库版本:11g R2   数据位置:/home/oracle/app/mydata


一、首先在源主机进行备份

 1.png

1、这里用rman进行压缩备份,压缩可以大大的节省空间

RMAN> run {
2> backup as compressed backupset full tag 'full_for_transfer' database
3> include current controlfile format '/home/oracle/full_%d_%T_%s'
4> plus archivelog format '/home/oracle/arlog_%d_%T_%s';
5> }
备份完成我们可以用list backup查看下备份

备份源数据库口令文件(可以不备份,在目标数据库新建也可以),口令文件路径$ORACLE_HOME/dbs/orapw$ORACLE_SID

备份源数据库参数文件,修改后,在目标数据库使用。可以通过create pfile from spfile导出pfile


二、将源数据库备份数据传输到目标数据库,并在目标数据库建立目录

1、环境准备

     将备份数据通过ftp工具传输到目标数据库

     在目标数据新建mydata目录$ mkdir /home/oracle/app/mydata

     在目标数据库设置环境变量,同源数据库一样

     在目标数据库启动实例到nomount状态

SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/inittest001.ora'
提示没有参数文件,我们将修改好的参数文件重命名为inittest001.ora,并放到/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/目录

再次启动

SQL>startup nomount
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory
提示没有文件或目录,建立目录,检查参数文件中设置的目录是否存在

# mkdir -p /home/oracle/app/oracle/admin/test001/adump
# mkdir -p /home/oracle/app/oracle/flash_recovery_area/test001/
# chown -R oracle.oinstall /home/oracle/
再次启动

SQL> startup nomount
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=standby)(PORT=1521))'
提示我们没有建立监听,我们可以重新建监听也可以,复制源数据库,进行修改

$ORACLE_HOME/network/admin 监听配置文件目录

建立监听,先对我们的hosts文件进行修改

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.30.252.17 standby

启动监听,再启动实例

3.png   

三、恢复控制文件,并启动到mount状态

1、恢复控制文件

RMAN> restore controlfile from '/home/oracle/full_TEST001_20140311_158';

Starting restore at 11-MAR-14
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/home/oracle/app/mydata/control01.ctl
output file name=/home/oracle/app/oracle/flash_recovery_area/test001/control02.ctl
Finished restore at 11-MAR-14

2、启动到mount状态

RMAN>
alter database mount;

database mounted
released channel: ORA_DISK_1

四、恢复数据文件

1、使用catalog start with指定备份文件位置

RMAN> catalog start with '/home/oracle';

2、使用rman进行数据恢复

还原及恢复数据库,由于使用了不同的位置,因此我们需要使用set newname 子句。如果使用相同目录,直接恢复即可

RMAN>
run {
2> set newname for datafile 1 to '/home/oracle/app/mydata/system01.dbf';
3> set newname for datafile 2 to '/home/oracle/app/mydata/sysaux01.dbf';
4> set newname for datafile 3 to '/home/oracle/app/mydata/undotbs01.dbf';
5> set newname for datafile 4 to '/home/oracle/app/mydata/users01.dbf';
6> set newname for datafile 5 to '/home/oracle/app/mydata/rman01.dbf';
7> set newname for datafile 6 to '/home/oracle/app/mydata/eygle.dbf';
8> restore database;
9> switch datafile all;
10> recover database;
11> }

.............................................................................................
unable to find archived log
archived log thread=1 sequence=77
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/11/2014 18:18:25
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 77 and starting SCN of 1797152

这个错误,因为我们redo log丢失所以出错

五、恢复redo log到新的目录

启动到open状态

RMAN> alter database open;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 03/11/2014 18:20:59
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
因为我们使用了恢复的控制文件,所以用resetlogs模式打开数据库

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00344: unable to re-create online log
'/home/oracle/app/oracle/oradata/test001/redo01.log'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
因为改变了文件路径,所以日志文件无法创建

SQL> set linesize 200;
SQL> col member format a60;
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                       IS_
---------- ------- ------- ------------------------------------------------------------ ---
         3         ONLINE  /home/oracle/app/oracle/oradata/test001/redo03.log           NO
         2         ONLINE  /home/oracle/app/oracle/oradata/test001/redo02.log           NO
         1         ONLINE  /home/oracle/app/oracle/oradata/test001/redo01.log           NO

SQL>
set heading off;

SQL> select 'alter database rename file '''||member||''' to '''||replace(member,'/home/oracle/app/oracle/oradata/test001/','/home/oracle/app/mydata/')||''';'
from v$logfile;

SQL> alter database rename file '/home/oracle/app/oracle/oradata/test001/redo03.log' to '/home/oracle/app/mydata/redo03.log';

Database altered.

SQL> alter database rename file '/home/oracle/app/oracle/oradata/test001/redo02.log' to '/home/oracle/app/mydata/redo02.log';

Database altered.

SQL> alter database rename file '/home/oracle/app/oracle/oradata/test001/redo01.log' to '/home/oracle/app/mydata/redo01.log';

Database altered.

SQL>
set heading on;

SQL> alter database open resetlogs;

Database altered.

成功打开数据库

六,修改临时表空间位置

SQL> select * from dba_temp_files;
select * from dba_temp_files
              *
ERROR at line 1:
ORA-01157: cannot identify/lock data file 201 - see DBWR trace file
ORA-01110: data file 201: '/home/oracle/app/oracle/oradata/test001/temp01.dbf'

临时数据文件位置也需要更改

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/home/oracle/app/oracle/oradata/test001/temp01.dbf

SQL> alter tablespace temp add tempfile '/home/oracle/app/mydata/temp.dbf' size 100M;

Tablespace altered.

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/home/oracle/app/oracle/oradata/test001/temp01.dbf
/home/oracle/app/mydata/temp.dbf

SQL> alter tablespace temp drop tempfile '/home/oracle/app/oracle/oradata/test001/temp01.dbf';

Tablespace altered.

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/home/oracle/app/mydata/temp.dbf

SQL>alter
database tempfile '/home/oracle/app/mydata/temp.dbf' autoextend on;


Database altered
SQL> select * from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS  RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
---------- ------------------------------ ---------- ---------- ------- ------------ --- ---------- ---------- ------------ ---------- -----------
/home/oracle/app/mydata/temp.dbf
         2 TEMP                             52428800       6400 ONLINE             2 YES 3.4360E+10    4194302            1   51380224        6272

七、重建EM
[oracle@standby ~]$ emctl start dbconsole
Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name. 
EM无法启动,重建EM

重建EM之前一定要要口令文件,否则无法重建

$ orapwd file=$ORACLE_HOME/dbs/orapwtest001 password=Test1234 force=y entries=10
$ ls
hc_test001.dat  init.ora  inittest001.ora  lkTEST001  orapwtest001

【上篇】
【下篇】

抱歉!评论已关闭.