网站首页 > 技术文章 正文
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详解。
猜你喜欢
- 2024-10-13 Oracle 11g R2 RAC学习测试环境搭建(完)
- 2024-10-13 Oracle RAC中查询表空间的使用量和使用率的SQL语句
- 2024-10-13 oracle rac查看配置文件的位置 查看oracle配置参数
- 2024-10-13 oracle同机单实例加入rac集群 windows oracle rac集群搭建
- 2024-10-13 Oracle 11g RAC各组件介绍 oracle11g rac搭建
- 2024-10-13 Oracle dg rac ha之间的关系 oracle rac sid
你 发表评论:
欢迎- 最近发表
-
- 前端流行框架Vue3教程:13. 组件传递数据_Props
- 前端必看!10 个 Vue3 救命技巧,解决你 90% 的开发难题?
- JAVA和JavaScript到底是什么关系?是亲戚吗?
- Java和js有什么区别?(java和javascript的区别和联系)
- 东方标准|Web和Java的区别,如何选择这两个专业
- 前端面试题-JS 中如何实现大对象深度对比
- 360前端一面~面试题解析(360前端笔试)
- 加班秃头别慌!1 道 Vue 面试题,快速解锁大厂 offer 通关密码
- 焦虑深夜刷题!5 道高频 React 面试题,吃透 offer 稳了
- 2025Web前端面试题大全(整理版)面试题附答案详解,最全面详细
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)