oracle asm磁盘组三种模式_Oracle单实例迁移到RAC实例

Oracle单实例迁移到RAC实例

33bfb591f586a463e7672f4b9c419250.png

将Oracle 单实例迁移到 RAC 实例上有两种方法:

1. 使用RMAN 复制

2. 使用逻辑导出导入(exp/imp) 或者 数据泵(expdp/impdp)

Oracle单实例迁移到RAC实例--使用RMAN 异机恢复

一. 大致操作步骤流程如下:

1. 安装Clusterware 和 ASM 实例

2. 备份源库,并将备份集copy到rac 节点上

3. 在RAC 上还原并修改初始化参数文件,还原控制文件和数据文件

4. 增加undo 表空间和redo log 线程组,创建密钥文件

5. 配置RAC监听

6. 将数据库等资源添加到CRS

注意: 迁移的2个db版本版本要一致。包括小版本。 比如10.2.0.4.0.

测试的时候是从10.2.0.5.0 迁移到10.2.0.5.0

Redhat 5.4 Orcle RAC 数据库 从10.2.0.1升级到 10.2.0.5

二. 具体操作步骤

2.1 安装Clusterware 和ASM 实例

上述安装相信能阅读小子此文档的诸位此能力已然具备,所以不再赘述。

附图参考:

2.1.1 运行DBCA 命令

[oracle@rac1 ~]$ dbca

2.1.2 选择 configure Automatic Storage Management, 来创建ASM 实例

2.1.3 选择所有结点

2.1.4 输入密码:RAC 的spfile 必须放在共享目录下。参数文件我们选择第一个initialization parameter。 也可以放在我们建的裸设备上。

2.1.5 ASM 实例创建完后,用Create New 来创建ASM 磁盘组。我们用DATA来创建一个DATA 组,FRA 创建FLASH_RECOVERY_AREA组。

注: Redundancy 一般选external 就是也就是不考虑冗余,假如选normal 则是mirror, 至少要一个FailGroup. 选High 就是triple mirror,3倍镜像,需要三个FailGroup。

2.1.6 创建完成后,能看到组的状态是Mount, ASM 组必须mount之后才能使用。

在这里,如果asm 服务必须要启动。如果没有启动,就手动启动它。

安装之后的进程如下:

[oracle@rac1 ~]$ crs_stat -t

集群监听状态查看:

[oracle@rac1 ~]$ lsnrctl status

2.2 在源库用RMAN 备份,并将备份文件copy到rac上

注意:保持单实例和RAC数据库SID一致(SID为db10g)

rman备份之前,单实例数据库为归档模式(archilve log list 来查看)

若未归档用:startup mount;

alter database archivelog; 改到归档模式

RAC上已经安装CRS以及ORACLE软件但未建库

2.2.1备份全库:

[oracle@singledb ~]$ rman target /

RMAN> list backup;

using target database control file instead of recovery catalog

RMAN> run {

2> backup full database format '/orabk/full_%d_%T_%U.bak';

3> backup archivelog all format '/orabk/arc_%U.bak' delete input;

4> copy current controlfile to '/orabk/control_bak.ctl';

5> }

备份之后的信息如下:

RMAN> list backup summary;

[oracle@db10g orabk]$ ls -l

2.2.1将备份文件SCP 到RAC 服务器:

[oracle@singledb orabk]$ scp * 192.168.10.101:/orabk

2.3 还原并修改初始化文件

2.3.1 还原spfile 到pfile(可复制、创建、RMAN恢复等)

[oracle@rac1 ~]$ export ORACLE_SID=db10g1

[oracle@rac1 ~]$ rman target /

RMAN> startup nomount

RMAN> restore spfile to pfile '/u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora'

2> from '/orabk/full_DB10G_20130516_02o9pjb1_1_1.bak ';

查看刚才恢复的参数文件:

[oracle@rac1 ~]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@rac1 dbs]$ ls

[oracle@rac1 dbs]$ cat initdb10g1.ora

这里面都是单实例的参数,需要把这个改成RAC的参数。

2.3.2 查看ASM 实例的相关目录信息

[oracle@rac1 ~]$ export ORACLE_SID=+ASM1

[oracle@rac1 ~]$ sqlplus / as sysdba

SYS@+ASM1(rac1)> col state format a10

SYS@+ASM1(rac1)> col name format a15

SYS@+ASM1(rac1)> col failgroup format a20

SYS@+ASM1(rac1)> set line 200

SYS@+ASM1(rac1)> select state,redundancy,total_mb,free_mb,name,failgroup from v$asm_disk;

SYS@+ASM1(rac1)> select group_number,name,state,type,total_mb,free_mb,unbalanced from v$asm_diskgroup;

2.3.3 在ASM下创建目录

[oracle@rac1 ~]$ export ORACLE_SID=+ASM1

[oracle@rac1 ~]$ asmcmd

创建的目录结构如下:

DATA/

RAC/

CONTROLFILE/

DATAFILE/

TEMPFILE/

ONLINELOG/

PARAMETERFILE/

FRA/

RAC/

ARCHIVELOG

2.3.4 创建系统目录(2个节点)

[oracle@rac1 ~]$ cd $ORACLE_BASE/admin

[oracle@rac1 admin]$ ls

+ASM

[oracle@rac1 admin]$ mkdir db10g

[oracle@rac1 admin]$ cd db10g

[oracle@rac1 db10g]$ mkdir adump bdump cdump dpdump hdump pfile udump

[oracle@rac1 db10g]$ ll

2.3.5 修改初始化参数

注意事项:

(1)RMAN 异机恢复的db_name 必须和备份的一致,如果说想改成其他名称,可以等还原之后,再用nid 命令修改。

(2)控制文件需要指定到共享设备上

(3)检查audit_file_dest、background_dump_dest、core_dump_dest、log_archive_dest_1、user_dump_dest等参数的位置。如果2个节点和共享位置没有对应的目录,先把目录建好。

最终修改之后的pfile 文件如下:

[oracle@rac1 db10g]$ cd $ORACLE_HOME/dbs

[oracle@rac1 dbs]$ cat initanqing.ora

db10g.__db_cache_size=188743680

db10g.__java_pool_size=4194304

db10g.__large_pool_size=4194304

db10g.__shared_pool_size=79691776

db10g.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/db10g/adump'

*.background_dump_dest='/u01/app/oracle/admin/db10g/bdump'

*.cluster_database_instances=2

*.cluster_database=true

*.compatible='10.2.0.5.0'

*.control_files='+DATA/RAC/CONTROLFILE/control01.ctl','+DATA/RAC/CONTROLFILE /control02.ctl','+DATA/RAC/CONTROLFILE /control03.ctl'

*.core_dump_dest='/u01/app/oracle/admin/db10g/cdump'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='db10g'

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=2147483648

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

db10g1.instance_name='anqing1'

db10g2.instance_name='anqing2'

db10g1.instance_number=1

db10g2.instance_number=2

*.job_queue_processes=10

*.log_archive_dest_1='LOCATION==+FRA/RAC/ARCHIVELOG'

*.log_archive_format='%t_%s_%r.arc'

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=283115520

db10g1.thread=1

db10g2.thread=2

*.undo_management='AUTO'

db10g1.undo_tablespace='UNDOTBS1'

db10g2.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/db10g/udump'

2.3.6 用修改的pfile 来创建spfile,注意放在共享设备上

[oracle@rac1 ~]$ export ORACLE_SID=db10g1

[oracle@rac1 ~]$ sqlplus / as sysdba

SQL> create spfile='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'

2 from

3 pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora';

到ASM里验证一下:

ASMCMD> pwd

+DATA/RAC/PARAMETERFILE

ASMCMD> ls

spfiledb10g.ora

在所有节点上,修改pfile内容,将其指向共享设备上的spfile:

[oracle@rac1 ~]$ echo "SPFILE='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'" > /u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora

[oracle@rac1 ~]$ cd $ORACLE_HOME/dbs

[oracle@rac1 dbs]$ cat initdb10g1.ora

SPFILE='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'

2.4 创建口令文件

在所有节点执行:

[oracle@rac1 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdb10g1 password=oracle

[oracle@rac2 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdb10g2 password=oracle

2.5 还原控制文件

在其中一个节点上执行。

2.5.1 用spfile,将DB 启动到nomount 状态

[oracle@rac1 dbs]$ sqlplus / as sysdba

SQL> startup nomount;

SQL> show parameter spfile

2.5.2 RMAN 执行对控制文件的恢复

[oracle@rac1 dbs]$ rman target /

RMAN> restore controlfile from '/orabk/control_bak.ctl ';

这个位置是在初始化参数里指定的,到ASM 实例里验证下:

ASMCMD> cd DATA/rac/controlfile

ASMCMD> ls

control01.ctl

control02.ctl

control03.ctl

2.6 restore数据库

在其中一个节点执行

2.6.1 将数据库启动到MOUNT状态

RMAN> alter database mount;

2.6.2 查看源库数据文件存储位置信息

注意一点,单实例和RAC 实例存储数据文件的位置不同,如果使用rman 的duplicate,那么使用log_file_name_convert 和 db_file_name_convert来进行转换,在这个实验中,使用的是RMAN的异机恢复,所以只能在restore的时候用set newname来进行转换。

SQL> col file_id format 9

SQL> col file_name format a30

SQL> select file_id,file_name from dba_data_files;

SQL> select file_id,file_name from dba_temp_files;

2.6.3 在RAC上restore 数据文件

RMAN> run {

2> set newname for datafile 1 to '+DATA/rac/DATAFILE/system01.dbf';

3> set newname for datafile 2 to '+DATA/rac/DATAFILE/undotbs01.dbf';

4> set newname for datafile 3 to '+DATA/rac/DATAFILE/sysaux01.dbf';

5> set newname for datafile 4 to '+DATA';

6> set newname for tempfile 1 to '+DATA/rac/TEMPFILE/temp01.dbf';

7> restore database;

8> switch datafile all;

9> switch tempfile all;

10> }

-- 从这里可以看到,对tempfile 仅仅是rename:即更新控制文件。

注意:

(1)datafile 3 和 4的区别,datafile 4 我没有指定具体的文件名,那么在还原时会使用ASM 自己的命名方式来命名datafile 4. 其他的文件会创建别名。

(2)对switch的说明:

对于nocatalog 模式下,rman备份的信息是保存在控制文件里的,包括文件的路径信息。 这里的switch的作用,就是更新控制文件里的信息。

(3)restore 的时候不会对temp 表空间进行restore。所以等restore 之后,需要手工创建temp表空间。

不过在这个测试里,还是对tempfile 进行了指定。 但是这个操作只更新控制文件,不恢复数据文件。

到ASM 实例里查看一下:

ASMCMD> cd db10g/datafile

ASMCMD> pwd

+DATA/db10g/datafile

ASMCMD> ls

SYSAUX.262.815794931

SYSTEM.260.815794931

UNDOTBS1.261.815794931

USERS.263.815794933

ASMCMD> ls -l

Type Redund Striped Time Sys Name

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y SYSAUX.262.815794931

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y SYSTEM.260.815794931

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y UNDOTBS1.261.815794931

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y USERS.263.815794933

-- 映射别名

ASMCMD> cd ../..

ASMCMD> cd rac/tempfile

ASMCMD> ls

--tempfile 对应的目录为空,即没有恢复数据文件。

2.7 recover 数据库

在执行restore的节点执行,因为备份文件在该节点上。

RMAN> recover database;

最后一行的错误说明:

RMAN-06054: media recovery requesting unknown log: thread 1 seq 12 lowscn 206051

这里是提醒恢复到一个未知的scn号。在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间,就可以避免这个错误。

2.8 处理online redo

因为此时另一个节点还没有配好,所以我们只能在执行恢复的节点上处理redo。

SYS@db10g1(rac1)> set wrap off;

SYS@db10g1(rac1)> select * from v$logfile;

SYS@db10g1(rac1)>alter database rename file '/oradata/db10g/redo01.log' to '+DATA/rac/onlinelog/redo01.log';

SYS@db10g1(rac1)> alter database rename file '/oradata/db10g/redo02.log' to '+DATA/rac/onlinelog/redo02.log';

SYS@db10g1(rac1)> alter database rename file '/oradata/db10g/redo03.log' to '+DATA/rac/onlinelog/redo03.log';

SYS@db10g1(rac1)> select * from v$logfile;

ASMCMD> pwd

+DATA/rac/onlinelog

ASMCMD> ls

注意这个时候,对应目录还是空的,当open db 的时候,oracle 会自动创建online redo log。这里修改的目的就是改变online redo 的位置。

2.9 open resetlogs 打开DB

在恢复的节点执行该操作。

SYS@db10g1(rac1)> alter database open resetlogs;

SYS@db10g1(rac1)> select name,open_mode from v$database;

SYS@db10g1(rac1)> col comp_name for a35

SYS@db10g1(rac1)> col version for a15

SYS@db10g1(rac1)> col status for a10

SYS@db10g1(rac1)> select comp_name,version,status from sys.dba_registry;

2.10检查并修改几个初始化参数

SYS@db10g1(rac1)> col parameter for a30

SYS@db10g1(rac1)> col value for a10

SYS@db10g1(rac1)> select * from v$option where parameter = 'Real Application Clusters';

SYS@db10g1(rac1)> show parameter cluster

SYS@db10g1(rac1)> show parameter thread

SYS@db10g1(rac1)> show parameter instance_number

由上述返回结果可知,RAC特性是支持的,如果尚未启用集群数据库,接下来首先要改的,就是enable CLUSTER DATABASE,操作如下:

SYS@db10g1(rac1)> alter system set cluster_database=true scope=spfile;

修改2个节点的配置参数:

SYS@db10g1(rac1)> alter system set cluster_database_instances=2 scope=spfile;

SYS@db10g1(rac1)> alter system set instance_number=1 scope=spfile sid='db10g1';

SYS@db10g1(rac1)> alter system set instance_number=2 scope=spfile sid='db10g2';

SYS@db10g1(rac1)> alter system set thread=1 scope=spfile sid='db10g1';

SYS@db10g1(rac1)> alter system set thread=2 scope=spfile sid='db10g2';

2.11创建节点2的undo 表空间

SYS@db10g1(rac1)> col name for a10

SYS@db10g1(rac1)> col type for a10

SYS@db10g1(rac1)> col value for a10

SYS@db10g1(rac1)> show parameter undo_tablespace

这个是rac1上节点的信息,在之前的在spfile参数指定的rac2节点的undo 空间是UNDOTBS2。所以这里创建该undo 表空间,并指定相关参数。

SYS@anqing1(rac1)> create undo tablespace UNDOTBS2 datafile '+DATA/rac/datafile/undotbs02.dbf' size 500m;

Tablespace created.

--这里直接指定别名

ASMCMD> pwd

+DATA/rac/datafile

ASMCMD> ls

sysaux01.dbf

system01.dbf

undotbs01.dbf

undotbs02.dbf

ASMCMD> pwd

+DATA/db10g/datafile

ASMCMD> ls

SYSAUX.262.815794931

SYSTEM.260.815794931

UNDOTBS1.261.815794931

UNDOTBS2.268.815805971

USERS.263.815794933

SYS@anqing1(rac1)> alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='db10g2';

System altered.

2.12添加rac2 节点的redo 文件

rac 的redo 是接其他节点来的,我们之前的rac1上已经有3组,所以我们这里从4开始,在添加2组给rac2,使用thread 2.

SYS@db10g1(rac1)> alter database add logfile thread 2 group 4 '+DATA' size 100m;

Database altered.

SYS@db10g1(rac1)> alter database add logfile thread 2 group 5 '+DATA' size100m;

Database altered.

SYS@db10g1(rac1)> alter database enable thread 2;

Database altered.

2.13重启节点1和节点2 上的实例,使相关参数生效

节点1:

SYS@db10g1(rac1)> shutdown immediate

SYS@db10g1(rac1)> startup

SYS@db10g1(rac1)> show parameter cluster

节点2:

[oracle@rac2 dbs]$ sqlplus / as sysdba

SQL> startup

SQL> show parameter cluster

最后确认:

SYS@db10g1(rac1)> select instance_number,instance_name,host_name from gv$instance;

到现在已经是集群了,不过还有一些收尾的工作要做。

2.14执行catclust.sql脚本来创建相关视图

SYS@anqing1(rac1)> @$ORACLE_HOME/rdbms/admin/catclust.sql

2.15 重建Temp 表空间

步骤如下:

SYS@db10g1(rac1)> select name from v$tempfile;

SYS@db10g1(rac1)> alter tablespace temp

add tempfile '+DATA/rac/tempfile/temp02.dbf' size 100M;

SYS@db10g1(rac1)> alter database tempfile

'+DATA/anqing/tempfile/temp01.dbf' offline;

SYS@anqing1(rac1)> alter database tempfile

'+DATA/anqing/tempfile/temp01.dbf' drop including datafiles;

SYS@anqing1(rac1)> select name from v$tempfile;

2.16 添加集群的监听

2.17添加信息注册到CRS

[oracle@rac1 ~]$ srvctl add database -d db10g -o $ORACLE_HOME -p +DATA/ANQING/PARAMETERFILE/spfileanqing.ora

[oracle@rac1 ~]$ srvctl add instance -d db10g -i db10g1 -n rac1

[oracle@rac1 ~]$ srvctl add instance -d db10g -i db10g2 -n rac2

修改instance 和 asm 之间的依赖关系:

[oracle@rac1 ~]$ srvctl modify instance -d db10g -i db10g1 -s +ASM1

[oracle@rac1 ~]$ srvctl modify instance -d db10g -i db10g2 -s +ASM2

查看:

[oracle@rac1 ~]$ crs_stat -t

这里并没有启动,因为服务是刚添加上来的,还没有同步。启动一下就ok了。

[oracle@rac1 ~]$ srvctl start database -d db10g

启动之后再来查,各个进程正常:

[oracle@rac1 ~]$ crs_stat -t

Oracle单实例迁移到RAC实例--使用导出导入方法

详细见之前的Oracle-备份与恢复(一)expdp/impdp详解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值