1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Linux平台下使用rman进行oracle数据库迁移

Linux平台下使用rman进行oracle数据库迁移

时间:2023-04-15 14:40:12

相关推荐

Linux平台下使用rman进行oracle数据库迁移

实验目的:将oracle数据库从一台机器迁移到另外的一台机器(同为linux平台),设置为不同的路径,不同的实例名

源端:

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

ORACLE_SID=test

数据文件位置:/oradata/test

目标端:

ORACLE_BASE=/u02/app/oracle

ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1

ORALCE_SID=test2

数据文件位置:/oradata2/test2

注:两台主机非一台,但是主机名一致均为model.rhel5

第一步:在源端取得备份数据

查询一下MAI用户下的数据,做最后校验使用

MAI@test > select * from tab;

TNAME TABTYPE CLUSTERID

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

BONUS TABLE

DEPT TABLE

EMP TABLE

SALGRADE TABLE

TEST TABLE

TEST01 TABLE

开始备份:

$ oracle@model /mnt/hgfs/software/backup> rman target /

RMAN> run{

2> allocate channel c1 device type disk format

加载中...

内容加载失败,点击此处重试

加载全文

"/mnt/hgfs/software/backup/%T_%U";

3> backup database;

4> backup current controlfile format"/mnt/hgfs/software/backup/%T_CTL_%U";

5> backup spfile format"/mnt/hgfs/software/backup/%T_SPFILE_%U";

6> release channel c1;

7> }

备份集信息:

$ oracle@model /mnt/hgfs/software/backup> ls -lh

total 304M

-rwxrwxrwx 1 root root 594M Aug 29 20:310829_02njsrtb_1_1*

-rwxrwxrwx 1 root root 6.9M Aug 29 20:310829_03njss0b_1_1*

-rwxrwxrwx 1 root root 6.8M Aug 29 20:310829_CTL_04njss0k_1_1*

-rwxrwxrwx 1 root root 96K Aug 29 20:310829_SPFILE_05njss0m_1_1*

第二步:备端的准备

1、安装数据库软件,基位置参考上文说明。

2、创建相关的目录:

$ oracle@model ~> env | grep ORACLE

ORACLE_BASE=/u02/app/oracle

ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1

$ oracle@model ~> cd $ORACLE_BASE

$ oracle@model /u02/app/oracle> mkdir flash_recovery_area

$ oracle@model /u02/app/oracle> mkdir -p admin/test2

$ oracle@model /u02/app/oracle> cd admin/test2

$ oracle@model /u02/app/oracle/admin/test2> mkdir{a,b,c,d,u}dump

第三步:开始恢复,此时恢复的实例名为test

$ oracle@model ~> export ORACLE_SID=test

$ oracle@model ~> rman target /

RMAN> startup nomount

1、恢复spfile:

RMAN> restore spfile from"/mnt/hgfs/software/backup/0829_SPFILE_05njss0m_1_1";

RMAN> shutdown immediate;

2、编辑参数文件,使参数中的相关路径变更为新路径

$ oracle@model ~> sqlplus / as sysdba

SYS@test > create pfile from spfile;

编辑生成的$ORACLE_HOME/dbs/inittest.ora文件,将文件中的路径改为新的路径,即:

/oradata/test/修改为/oradata2/test2/

/u01/app/oracle/修改为/u02/app/oracle

/u01/app/oracle/admin/test修改为/u02/app/oracle/admin/test2

$ oracle@model ~> sqlplus / as sysdba

SYS@test > create spfile from pfile;

3、恢复控制文件:

$ oracle@model ~> rman target /

RMAN> startup nomount

RMAN> restore controlfile from"/mnt/hgfs/software/backup/0829_CTL_04njss0k_1_1";

4、恢复数据文件:

RMAN> alter database mount;

RMAN> run {

2> set newname for datafile 1 to"/oradata2/test2/system01.dbf";

3> set newname for datafile 2 to"/oradata2/test2/undotbs01.dbf";

4> set newname for datafile 3 to"/oradata2/test2/sysaux01.dbf";

5> set newname for datafile 4 to"/oradata2/test2/users01.dbf";

6> set newname for datafile 5 to"/oradata2/test2/example01.dbf";

7> restore database;

8> }

5、重建控制文件,更新控制文件中的数据文件路径

$ oracle@model ~> sqlplus / as sysdba

SYS@test > alter database backup controlfile to trace;

到$ORACLE_BASE/admin/udump中找到刚才生成的TRACE文件,复制出其中的创建文件集的片段,修改其中的路径信息为新的路径信息,备用

SYS@test > shutdown immediate;

SYS@test > startup nomount

利用刚才修改过的控制文件创建脚本重建控制文件:

SYS@test > CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGSARCHIVELOG

2 MAXLOGFILES 16

3 MAXLOGMEMBERS 3

4 MAXDATAFILES 100

5 MAXINSTANCES 8

6 MAXLOGHISTORY 292

7 LOGFILE

8 GROUP 1 "/oradata2/test2/redo01.log" SIZE 50M,

9 GROUP 2 "/oradata2/test2/redo02.log" SIZE 50M,

10 GROUP 3 "/oradata2/test2/redo03.log" SIZE 50M

11 -- STANDBY LOGFILE

12 DATAFILE

13 "/oradata2/test2/system01.dbf",

14 "/oradata2/test2/undotbs01.dbf",

15 "/oradata2/test2/sysaux01.dbf",

16 "/oradata2/test2/users01.dbf",

17 "/oradata2/test2/example01.dbf"

18 CHARACTER SET ZHS16GBK

19 ;

SYS@test > alter database open resetlogs;

至此,数据库已经能够正常启动了,但是此时的实例名以及数据库名均为test,需要将其更改为test2,继续向下走

第四部分:修改实例名,以及数据库名

相关内容可以参见先前的文章:ORACLE数据库实例的重命名(/dpool/blog/s/blog_67be3b4501016dgu.html?vt=4)

SYS@test > shutdown immediate;

SYS@test > startup mount

修改数据文件、控制文件中的数据库名称,修改之后会关闭数据库

SYS@test > !nid target=sys/oracle dbname=test2logfile=/tmp/change_name2test2.log

启动数据库,这个时候会报数据库名称不一致的错误,不去管他(ORA-01103: database name "MAI" incontrol file is not "TEST")

SYS@test > startup mount

将数据库名更新到spfile文件中

SYS@test > alter system set db_name="test2" scope=spfile;

SYS@test > create pfile from spfile;

SYS@test > shutdown immediate;

$ oracle@model ~> export ORACLE_SID=test2

$ oracle@model ~> sqlplus / as sysdba

SYS@test2 > startuppfile="/u02/app/oracle/product/10.2.0/db_1/dbs/inittest.ora"

SYS@test2 > create spfile frompfile="/u02/app/oracle/product/10.2.0/db_1/dbs/inittest.ora";

SYS@test2 > shutdown immediate;

SYS@test2 > startup mount;

SYS@test2 > create pfile from spfile;

SYS@test2 > alter database open resetlogs;

将ORACLE_SID=test2写入到oracle用户的.bash_profile文件中:

$ oracle@model ~> echo export ORACLE_SID=test2 >>.bash_profile

至此呢,数据库迁移才算是彻底的完成了。

第五部分:最后的校验

1、MAI用户验证:

MAI@test2 > select * from tab;

TNAME TABTYPE CLUSTERID

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

BONUS TABLE

DEPT TABLE

EMP TABLE

SALGRADE TABLE

TEST TABLE

TEST01 TABLE

2、数据库名验证:

SYS@test2 > select name,open_mode from v$database;

NAME OPEN_MODE

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

TEST2 READ WRITE

3、实例名验证:

SYS@test2 > select instance_name,status from v$instance;

INSTANCE_NAME STATUS

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

test2 OPEN

4、进程验证:

$ oracle@model ~> ps aux | grep ora_ | grep -v grep

oracle 25592 0.0 1.2 261864 12756 ? Ss 00:23 0:00ora_pmon_test2

oracle 25594 0.0 1.0 261252 11104 ? Ss 00:23 0:00ora_psp0_test2

oracle 25596 0.0 1.3 261252 13848 ? Ss 00:23 0:00ora_mman_test2

oracle 25598 0.0 1.3 263320 13708 ? Ss 00:23 0:00ora_dbw0_test2

oracle 25600 0.0 2.9 276804 30644 ? Ss 00:23 0:00ora_lgwr_test2

oracle 25602 0.0 1.6 261236 16956 ? Ss 00:23 0:00ora_ckpt_test2

oracle 25604 0.0 3.4 261784 35812 ? Ss 00:23 0:00ora_smon_test2

oracle 25606 0.0 1.6 261252 17224 ? Ss 00:23 0:00ora_reco_test2

oracle 25608 0.0 2.2 262812 22948 ? Ss 00:23 0:00ora_cjq0_test2

oracle 25610 0.1 4.2 262988 43768 ? Ss 00:23 0:00ora_mmon_test2

oracle 25612 0.0 1.2 261252 12832 ? Ss 00:23 0:00ora_mmnl_test2

oracle 25614 0.0 1.0 261248 10672 ? Ss 00:23 0:00ora_d000_test2

oracle 25616 0.0 1.0 261248 10656 ? Ss 00:23 0:00ora_d001_test2

oracle 25626 0.0 2.6 276804 27168 ? Ss 00:24 0:00ora_arc0_test2

oracle 25628 0.0 2.6 276804 27040 ? Ss 00:24 0:00ora_arc1_test2

oracle 25630 0.0 2.6 276804 26920 ? Ss 00:24 0:00ora_arc2_test2

oracle 25632 0.0 1.5 261252 15660 ? Ss 00:24 0:00ora_qmnc_test2

oracle 25638 0.0 1.1 261248 11656 ? Ss 00:24 0:00ora_q000_test2

oracle 25640 0.0 1.3 261248 13912 ? Ss 00:24 0:00ora_q001_test2

5、oracle用户的变量验证:

$ oracle@model ~> env | grep ORACLE

ORACLE_SID=test2

ORACLE_BASE=/u02/app/oracle

ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1

验证完成,验证的结果表明,迁移确实已经成功,并且已经达到了预期的目的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。