ITPub博客

首页 > 数据库 > Oracle > RAC DB转化为single instance DB

RAC DB转化为single instance DB

原创 Oracle 作者:dbs101 时间:2011-07-24 09:17:17 0 删除 编辑

这种case很少见,Oracle的文档也没有这方面的资料。但是有时还是需要的。

首先将文件从asm系统中移到ext3文件系统中,然后去除rac选项。

环境:

SQL> select * from v$version
  2  ;
 
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
 
SQL>

操作系统: Red Hat Enterprise Linux Server release 4
文件系统:ASM

1. 首先将asm的文件移到ext3文件系统中:先用rman将数据文件copy到ext4文件系统,然后
为线程1增加3组在线日志文件,并删除现有的在线日志文件。再重建spfile和pfile,最后
用rman复制控制文件并重建临时段表空间。

1.1 shutdown database,startup mount,关闭archivelog。
shutdown immediate;
startup mount;
alter database noarchivelog;
1.2 列出所有的数据文件
select file_name, tablespace_name from dba_data_files order by tablespace_name, file_name;
1.2 进入rman,使用rman的copy功能移动数据文件。
rman target /
COPY DATAFILE '+DATA/dbs101/datafile/dbs101_data01.dbf' TO '/u02/oradata/dbs101/dbs101_data01.dbf';
COPY DATAFILE '+DATA/dbs101/datafile/sysaux.266.714759895' TO '/u02/oradata/dbs101/sysaux01.dbf'; 
COPY DATAFILE '+DATA/dbs101/datafile/system.264.714759885' TO '/u02/oradata/dbs101/system01.dbf'; 
COPY DATAFILE '+DATA/dbs101/datafile/undo0201.dbf' TO '/u02/oradata/dbs101/undo0201.dbf';              
COPY DATAFILE '+DATA/dbs101/datafile/users.268.714759899' TO '/u02/oradata/dbs101/users01.dbf';  
1.3 进入sql*plus,在控制文件中更改数据文件的位置。
ALTER DATABASE RENAME FILE '+DATA/dbs101/datafile/dbs101_data01.dbf' TO '/u02/oradata/dbs101/dbs101_data01.dbf';
ALTER DATABASE RENAME FILE '+DATA/dbs101/datafile/sysaux.266.714759895' TO '/u02/oradata/dbs101/sysaux01.dbf'; 
ALTER DATABASE RENAME FILE '+DATA/dbs101/datafile/system.264.714759885' TO '/u02/oradata/dbs101/system01.dbf'; 
ALTER DATABASE RENAME FILE '+DATA/dbs101/datafile/undo0201.dbf' TO '/u02/oradata/dbs101/undo0201.dbf';              
ALTER DATABASE RENAME FILE '+DATA/dbs101/datafile/users.268.714759899' TO '/u02/oradata/dbs101/users01.dbf';  
1.4 增加3组在线日志文件,并删除现有的在线日志文件
打开database
alter database open;
增加3组日志文件
ALTER DATABASE
  ADD LOGFILE GROUP 7 ('/u02/oradata/dbs101/redo07a.rdo', '/u02/oradata/dbs101/redo07b.rdo')
      SIZE 100M BLOCKSIZE 812;
ALTER DATABASE
  ADD LOGFILE GROUP 8 ('/u02/oradata/dbs101/redo08a.rdo', '/u02/oradata/dbs101/redo08b.rdo')
      SIZE 100M BLOCKSIZE 812;
ALTER DATABASE
  ADD LOGFILE GROUP 9 ('/u02/oradata/dbs101/redo09a.rdo', '/u02/oradata/dbs101/redo09b.rdo')
      SIZE 100M BLOCKSIZE 812;
确保group 1,2,3不是当前的日志文件组
alter system switch logfile;
select * from v$log;
删除asm文件系统中的日志组
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
1.5 验证这些改动是否正确,重启数据库。
startup force;
1.6 恢复控制文件到ext3文件系统
创建pfile
create pfile from spfile;
编辑pfile,将控制文件的路径指向到ext3文件系统。
*.control_files='/u02/oradata/dbs101/current01.ctl','/u02/oradata/dbs101/current02.ctl'
将数据库置为nomount状态
shutdown immediate;
startup nomount pfile=initdbs11.ora;
create spfile from pfile;
进入rman恢复控制文件:
rman target /
restore controlfile from '+DATA/dbs101/controlfile/current.256.714759875';
1.7 重建临时表空间文件
重启数据库到mount状态
shutdown immediate;
startup mount;
用rman重建临时表空间文件
run { set newname for tempfile 1 to '/u02/oradata/dbs101/temp01.dbf'; switch tempfile all;}
1.8 验证改动是否成功,重启数据库。
startup force;
1.9 检查参数pfile文件,有没有指向asm文件系统,比如DB_CREATE_FILE_DEST,
DB_CREATE_ONLINE_LOG_DEST_n, or DB_RECOVERY_FILE_DEST
如果有,修改重新指向ext3文件系统。
1.10 重新打开数据库,到此所有文件都从asm系统移到ext3中。

2. 将数据从rac转化成single instance,先去除所有和线程2相关的配置,然后关闭rac选项。
2.1 修改spifle参数
alter system set cluster_database = false scope=spfile;
alter system set cluster_database_instances = 1 scope=spfile;
2.2 关闭database并删除instance,database
srvctl stop instance -d dbs101 -i dbs1011
srvctl stop instance -d dbs101 -i dbs1012
srvctl remove instance -d dbs101 -i dbs1011
srvctl remove instance -d dbs101 -i dbs1012
srvctl remove database -d dbs101
2.3 删除线程2的online logfile
alter database drop logfile group 4;
alter database drop logfile group 5;
alter database drop logfile group 6;
2.4 删除线程2的undo tablespace
drop tablespace UNDOTBS2 including contents and datafiles;
2.5 删除在pfile文件中所有线程2的参数信息
2.6 验证改动是否成功,重启数据库。
startup force;
2.7 关闭crs和database
svrctl stop database -d dbs101
crsctl stop crs
2.8 关闭rac选项
startup重启数据库会遇到ORA-29702 error occurred in Cluster Group Service operation
这需要database的运行文件关闭rac。
$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk rac_off
$ make -f ins_rdbms.mk ioracle
$ cd $ORACLE_HOME/bin
$ relink oracle
2.9 重启数据库,成功。
2.10 添加listener.ora和tnsnames.ora
2.11 从客户端连接验证是否成功。

注释:做任何系统的移动,需要充足的准备工作并测试。当然有些问题可能是预测不到的,
这需要对oracle的概念有一定的了解。这样大致能知道是哪儿出现问题,查阅相关的资料
来解决。当然备份时必须的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25105315/viewspace-702952/,如需转载,请注明出处,否则将追究法律责任。

上一篇: multiple blocks read
下一篇: direct path write
请登录后发表评论 登录
全部评论

注册时间:2010-12-18

  • 博文量
    92
  • 访问量
    438096