百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle单实例迁移到RAC实例(oracle转移数据文件)

sinye56 2024-10-06 00:34 7 浏览 0 评论

Oracle单实例迁移到RAC实例



将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详解。

相关推荐

Linux中10大常用命令之sort使用案例

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言Linux中的sort命令用于对文本文件的内容进行排序。本教程向您展示了sort...

java开发常用的Linux命令,高频的没你想象的多

Linux的命令非常多,多到有些使用的场景你工作两三年也没有遇到过,工作三四年才能遇到(Linux内核开发,Shell脚本开发,嵌入式开发、、、),但这个不是今天分享的重点,今天分享的重点是Java开...

linux常用命令(收藏版)

linux小白注意啦,给大家分享一点干货,请笑纳!1.关机命令shutdown-hnow关闭系统(1)init0关闭系统(2),0为系统的进程号telinit0关闭系统(3)shutdo...

延续Win10三年需付超3000元!微软彻底封堵:删除绕过Win11系统要求教程、将第三方工具标记为恶意软件

一切都是为了用户能够正规地升级到Windows11。整理|屠敏出品|CSDN(ID:CSDNnews)距离Windows10退役仅剩8个月,微软最近这段时间,终是忍不住接连出手了...

敲完就让你提桶跑路的Linux命令

不谨慎可能就会让你提桶的Linux命令!!!删除文件rm-rf该命令是删除文件或文件夹等最快的方式之一。删除后的内容很难恢复,如果删除系统文件可能会导致系统崩坏。˃rm-rf/#强制删除根...

超级蠕虫,累计感染40万台服务器,让Linux内核服务器感染两年

最近著名安全公司ESET发布安全报告,报告分析了其对一个超级蠕虫Ebury的15年追踪分析。在15年中该病毒持续感染了40万台服务器,曾经在2011年(2009年)攻克了Linux内核维护站点kern...

linux redhat破解密码

适用于RedhatCentosFedora1.开机选择第一个启动项,按e进入编辑模式2.在启动项编辑模式找到linux16开头的文件,按ctrl+e快速定位到该行的行末,输入空格rd.break...

慎用!Linux最危险的10个命令!

Linux是一个强大而灵活的操作系统,它提供了许多功能丰富的命令和工具,让用户可以方便地管理和控制系统。但是,有些命令如果不小心或不知情地使用,可能会造成严重的后果,甚至导致系统崩溃或数据丢失。因此,...

Linux文件和目录删除

今天只讲一个命令,这个命令已经让万千运维人既爱又恨。rm删除文件或者目录基本用法:-i显示删除提示信息-f强制删除文件-r进行目录的递归删除在公司里为了保证数据安全,一般会创建一个alias...

给你的Linux系统穿上“防弹衣”:安全加固全攻略

为什么Linux系统需要安全加固在当今数字化时代,Linux系统以其开源、稳定、高效等特性,在服务器领域占据着举足轻重的地位。无论是大型互联网公司的核心业务,还是中小企业的日常运营,都离不开L...

一天一个Linux命令:文件操作「删」rm

命令:rm-rf文件名(慎用,慎用,慎用)rm(选项)(参数)命令功能:rm-rf是一条UNIX系统下的文件删除命令,作用是无提示地强制递归删除一个目录中的一个或多个文件或目录,如果没有使用...

Linux下通过 rm -f 删除大量文件时报错:Argument list too long

问题现象云服务器ECSLinux下通过rm-f删除大量的小文件时出现类似如下错误信息:-bash:?/bin/rm:?Argument?list?too?long如下图所示:问题原因如?待删...

这10个Linux命令太危险,千万慎用!数据毁灭的瞬间只需一个回车

你好,这里是网络技术联盟站,我是瑞哥。Linux系统,以其开源自由的特性,吸引了无数开发者和科技爱好者。其强大的命令行工具赋予了用户前所未有的控制能力。然而,正如俗话所说,“能力越大,责任越大”。某些...

Linux的10大危险命令,用过的运维都很刑

rm-rf命令该命令可能导致不可恢复的系统崩坏。˃rm-rf/#强制删除根目录下所有东西。˃rm-rf*#强制删除当前目录的所有文件。˃rm-rf.#强制删除当前...

Linux环境变量设置与查看全攻略

Linux环境变量设置与查看全攻略在Linux系统中,环境变量是用于定义系统和用户级设置的一种方法,它可以影响程序的行为和系统的运行方式。了解如何设置和查看环境变量对于Linux用户来说是非常重要的技...

取消回复欢迎 发表评论: