RAC维护手记07-如何移动数据库到其他磁盘组(更改冗余策略)

Oracle ASM是一个为管理数据文件的一个完整的文件系统和卷管理系统的组合,本文档适合以下方面的任务:

l  希望移动数据库到其他的ASM存储

l  希望修改磁盘组的冗余度

一旦磁盘组被创建那么它的冗余策略如:External,Normal or High,是不能修改的。在下面情形可能需要修改磁盘组的冗余策略:

l  DBA考虑到受磁盘空间的制约或是已经用外部方法实现了冗余(比如RAID 10等)需要将磁盘组冗余策略从Normal/High Redundancy变成External Redundancy;

l  将磁盘组基于的冗余策略从External redundancy转换为Normal/High Redundancy ;

本文档讨论转换已存在磁盘组冗余策略的步骤。注意:这只是说明转换已存在磁盘组冗余策略的步骤,在生产环境实施需要先在测试环境验证。并且建议先备份数据库。

可以通过两种途径实现已存在磁盘组冗余策略的转换:

l  用期望的冗余策略创建新的磁盘组并将数据库移动到新磁盘组中;

l  在备份数据库后删除已有的磁盘组,并用期望的冗余策略释放出来的原盘中创建新的磁盘组;


注意:以下步骤只说明了更改磁盘组冗余策略的步骤,如遇到相同的需求,请按此步骤为参考做更详细的方案,切不可直接套用。


方法一:用期望的冗余策略创建新的磁盘组并将数据库移动到新磁盘组中

1、        如果你已扩充了磁盘空间,那么你可以创建新的磁盘组并将数据文件移到新磁盘组中。

原来的磁盘组使用的是external redundancy:

SQL> select state,name from v$asm_diskgroup_stat ;

 

STATE        NAME

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

MOUNTED       DATA

2、        使用normal redundancy创建新的磁盘组:

SQL >create diskgroup DATA1 normal redundancy

failgroup data1_0001 disk '/dev/rhdisk20',

'/dev/rhdisk21','/dev/rhdisk22',

'/dev/rhdisk23','/dev/rhdisk24'

failgroup data1_0002 disk '/dev/rhdisk30',

'/dev/rhdisk31','/dev/rhdisk32',

'/dev/rhdisk33','/dev/rhdisk34';

SQL> select state,name,type from v$asm_diskgroup_stat;

 

STATE NAME TYPE

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

MOUNTED DATA EXTERN

MOUNTED DATA1 NORMAL

3、        备份数据库

SQL> show parameter db_name

 

NAME TYPE VALUE

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

db_name string orcl11g

 

SQL> create pfile='/tmp/initorcl11g.ora' from spfile;

 

SQL> alter database backup controlfile to '+DATA1';

 

SQL> alter system set control_files='+DATA1/orcl11g/controlfile/current.261.798462691'SCOPE=SPFILE;

 

-- Connect to rman

$ rman target /

RMAN > shutdown immediate;

RMAN > startup nomount pfile='/tmp/initorcl11g.ora';

RMAN> restore controlfile from '+data\orcl11g\controlfile\current.260.798465384';

装载数据库并从v$controlfile视图验证控制文件;

备份数据库:

RMAN > alter database mount;

RMAN> backup as copy database format '+DATA1';

合用”backup as copy”,RMAN备份文件是数据文件镜像复本,是bit对bit的copy。

4、        切换数据库到副本

RMAN> switch database to copy;

这个命令等于PL/SQL命令”alter database rename file”语句。

如果需要还需要recover database;

RMAN > alter database open resetlogs;

5、        在新的DG中添加temp文件

SQL>alter tablespace temp add tempfile ‘+DATA1’ size xxxxM;

然后将原来磁盘组中的tempfile删除:

SQL> alter database tempfile '+DATA/orcl11g/tempfile/temp.265.626631119' drop;

6、        在新的磁盘组加redo member,删除旧磁盘组的redo member

查找redo group组成员信息,假设有1,2,3三个日志组,向每个组添加一个成员到磁盘组DATA1:

SQL> alter database add logfile member '+DATA1' togroup 1;

SQL> alter database add logfile member '+DATA1' togroup 2;

SQL> alter database add logfile member '+DATA1' togroup 3;

删除1,2,3日志组在DATA磁盘组的成员:

SQL> alter database drop logfile member '+DATA/orcl11g/onlinelog/group_3.264.798462721';

SQL> alter database drop logfile member '+DATA/orcl11g/onlinelog/group_2.263.798462711';

SQL> alter database drop logfile member '+DATA/orcl11g/onlinelog/group_1.262.798462699';

7、        使用下例语句确认所有的文件都已经移动到新的磁盘组中

SQL> select name from v$controlfile

union

select name from v$datafile

union

select name from v$tempfile

union

select member from v$logfile

union

select filename from v$block_change_tracking;


方法二:在备份数据库后按期望的冗余重建磁盘组并还原数据库

1、        用immediate选项关闭数据库,并重启数据库到mout状态备份数据库:

SQL>alter system archive log current;

SQL>alter system archive log current;

SQL>alter system archive log current;

SQL>alter system archive log current;

SQL>shutdown immediate

SQL>startup mount

RMAN>backup device type disk format'/backup/db_%U.bak' database ;

RMAN>backup device type disk format'/backup/arc_%U.bak'archivelog all;

2、        创建SPFILE和controlfile副本

SQL>create pfile='/backup/initorcl11g.ora' from spfile;

SQL>alter database backup controlfile to'/backup/control.bak';

3、        关闭RDBMS实例

SQL> shutdown immediate

4、        连接到ASM实例DROP现有磁盘组

Pre-11gR2:

Login as oracle

$sqlplus “/as sysdba”

11gR2:

Login as grid

$sqlplus “/as sysasm”

 

SQL> drop diskgroup DATA including contents;

5、        关闭ASM实例

6、        启动ASM实例到nomount状态,并按创建新的磁盘组

SQL>startup nomount

create diskgroup DATA normal redundancy

failgroup data_0001 disk '/dev/rhdisk4',

'/dev/rhdisk5','/dev/rhdisk6',

'/dev/rhdisk7','/dev/rhdisk8'

failgroup data_0002 disk '/dev/rhdisk9',

'/dev/rhdisk10','/dev/rhdisk11',

'/dev/rhdisk12','/dev/rhdisk13';

创建和原来的磁盘组相同名的新磁盘组会使RMAN恢复过程更简单些。

7、        使用指定的pfile启动RDBMS实例到nomount状态

SQL>startup nomount pfile='/backup/initorcl11g.ora'

SQL>create spfile from pfile='/backup/initorcl11g.ora';

SQL>shutdown immediate

SQL>startup nomount

8、        用RMAN还原controlfile和数据库文件

RMAN>restore controlfile from'/backup/control.bak';

RMAN>alter database mount;

RMAN>restore database;

RMAN>recover database;

Recover database过程中可能会找更大sequence的redolog,可以不理会。

SQL>alter database open resetlogs;

如果你启用的flashback database 功能,你必须先关闭然后再启用此功能:

SQL>alter database flashback off ;

SQL>alter database flashback on ;

注意:如果你新创建的磁盘组和原来的磁盘组名字不一样,你必须用类似于以下的步骤恢复数据库:

RMAN> run{

set newname for datafile 1 to '+DATA1';

set newname for datafile 2 to '+DATA1';

set newname for datafile 3 to '+DATA1';

set newname for datafile 4 to '+DATA1';

set newname for datafile 5 to '+DATA1';

--more set newname;

restore database;

switch datafile all;

recover database;

}


你可能感兴趣的:(RAC维护手记07-如何移动数据库到其他磁盘组(更改冗余策略))