Oracle从文件系统迁移到ASM 11g

致谢:秋雨落大神悉心指导

目的:

把一个单实例、使用文件系统作为存储的数据库迁移到使用ASM的单实例环境;

环境:

[oracle@11gr2 ~]$ uname -a

Linux 11gr2.test1 3.8.13-44.1.1.el6uek.x86_64 #2 SMP Wed Sep 10 06:10:25 PDT 2014 x86_64 x86_64 x86_64 GNU/Linux

 

SQL> select * from v$version where rownum = 1;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

 

1. 磁盘组规划

1.1 磁盘组使用说明:

+DG1 sdb1、sdb2、sde1、sde2、sde、sdf 用于存放数据文件,控制文件,联机日志

+DG2 sdc1 用于存放联机日志

+RECOVERY sdc2 sdd1 sdd2 用于Recovery Area

 

2. 文件位置

2.1 迁移前文件位置:

数据文件、控制文件 /opt/oracle/oradata/

联机日志 /opt/oracle/oradata/

归档日志、备份 /opt/oracle/oradata/

 

2.2 迁移后文件位置:

数据文件、控制文件 +DG1 磁盘组

联机日志 +DG1 +DG2 两个磁盘组

归档日志、备份 +RECOVERY 磁盘组

 

3. 用 udev 绑定

配置规则文件/etc/udev/rules.d/60-raw.rules

[root@Qiu ~]# cat /etc/udev/rules.d/60-raw.rules

 

    其中ACTION=="add", KERNEL="<device name>", RUN+="raw /dev/raw/rawX %N" 配置设备名称,用你需要绑定的设备名称替换 <device name>(如:/dev/sda1),X为裸设备号主/次号码:ACTION=="add", ENV{MAJOR}="A", ENV{MINOR}="B", RUN+="raw /dev/raw/rawX %M %m" "A" 和 "B" 是设备的主/次号码,X是系统使用的raw设备号码。通常主次号为8代表的是块设磁盘设备。

    查看主/次号码代表的含义,查看cat /proc/devices即可,而在编写规则文件时,查看块设备的主/次号码可以通过 ll | grep sd 命令来查询设备的主/次号码和相关信息。

 

[oracle@11gr2 ~]$ cd /dev/

[oracle@11gr2 dev]$ ll | grep sd

brw-rw----. 1 root disk      8,  16 Aug  1 17:13 sdb

brw-rw----. 1 root disk      8,  17 Aug  1 17:13 sdb1

brw-rw----. 1 root disk      8,  18 Aug  1 17:13 sdb2

brw-rw----. 1 root disk      8,  32 Aug  1 17:13 sdc

brw-rw----. 1 root disk      8,  33 Aug  1 17:13 sdc1

brw-rw----. 1 root disk      8,  34 Aug  1 17:13 sdc2

brw-rw----. 1 root disk      8,  48 Aug  1 17:13 sdd

brw-rw----. 1 root disk      8,  49 Aug  1 17:13 sdd1

brw-rw----. 1 root disk      8,  50 Aug  1 17:13 sdd2

brw-rw----. 1 root disk      8,  64 Aug  1 17:13 sde

brw-rw----. 1 root disk      8,  65 Aug  1 17:13 sde1

brw-rw----. 1 root disk      8,  66 Aug  1 17:13 sde2

brw-rw----. 1 root disk      8,  80 Aug  1 17:13 sdf

brw-rw----. 1 root disk      8,  96 Aug  1 17:13 sdg

 

 c)编写规则文件/etc/udev/rules.d/60-raw.rules 将权限选项写入规则文件中,然后启动规则,在查看权限

 

A ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="17", RUN+="/bin/raw /dev/raw/raw1 %M %m"

ACTION=="add", KERNEL=="raw1", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="18", RUN+="/bin/raw /dev/raw/raw2 %M %m"

ACTION=="add", KERNEL=="raw2", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw3 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="33", RUN+="/bin/raw /dev/raw/raw3 %M %m"

ACTION=="add", KERNEL=="raw3", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sdc2", RUN+="/bin/raw /dev/raw/raw4 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="34", RUN+="/bin/raw /dev/raw/raw4 %M %m"

ACTION=="add", KERNEL=="raw4", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw5 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="49", RUN+="/bin/raw /dev/raw/raw5 %M %m"

ACTION=="add", KERNEL=="raw5", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sdd2", RUN+="/bin/raw /dev/raw/raw6 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="50", RUN+="/bin/raw /dev/raw/raw6 %M %m"

ACTION=="add", KERNEL=="raw6", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw7 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="65", RUN+="/bin/raw /dev/raw/raw7 %M %m"

ACTION=="add", KERNEL=="raw7", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sde2", RUN+="/bin/raw /dev/raw/raw8 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="66", RUN+="/bin/raw /dev/raw/raw8 %M %m"

ACTION=="add", KERNEL=="raw8", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sdf", RUN+="/bin/raw /dev/raw/raw9 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="80", RUN+="/bin/raw /dev/raw/raw9 %M %m"

ACTION=="add", KERNEL=="raw9", OWNER="oracle", GROUP="dba", MODE="0660"

 

ACTION=="add", KERNEL=="sdg", RUN+="/bin/raw /dev/raw/raw10 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="96", RUN+="/bin/raw /dev/raw/raw10 %M %m"

ACTION=="add", KERNEL=="raw10", OWNER="oracle", GROUP="dba", MODE="0660"

 

[root@11gr2 dev]# start_udev

Starting udev: udevd[3824]: GOTO 'pulseaudio_check_usb' has no matching label in: '/lib/udev/rules.d/90-pulseaudio.rules'

                                                           [  OK  ]

 

[oracle@11gr2 dev]$ ls -l /dev/raw/

total 0

crw-rw----. 1 oracle dba  162,  1 Aug  1 17:22 raw1

crw-rw----. 1 oracle dba  162, 10 Aug  1 17:22 raw10

crw-rw----. 1 oracle dba  162,  2 Aug  1 17:22 raw2

crw-rw----. 1 oracle dba  162,  3 Aug  1 17:22 raw3

crw-rw----. 1 oracle dba  162,  4 Aug  1 17:22 raw4

crw-rw----. 1 oracle dba  162,  5 Aug  1 17:16 raw5

crw-rw----. 1 oracle dba  162,  6 Aug  1 17:16 raw6

crw-rw----. 1 oracle dba  162,  7 Aug  1 17:22 raw7

crw-rw----. 1 oracle dba  162,  8 Aug  1 17:21 raw8

crw-rw----. 1 oracle dba  162,  9 Aug  1 17:22 raw9

crw-rw----. 1 root   disk 162,  0 Aug  1 17:13 rawctl

 

3.6 安装Grid

配置环境变量

vi /home/oracle/.bash_profile

 

export GRID_HOME=/opt/oracle/product/11.2.0/grid

export PATH=$PATH:$GRID_HOME/bin

 

将安装包上传到服务器,解压:

unzip p13390677_112040_Linux-x86-64_3of7.zip

cd grid

./runInstaller

 

第一步,跳过更新

第二步 单实例安装选择第二个

第三步 选择英语和简体中文

第四步创建ASM磁盘组

第五步设置ASM密码

第六步

出现警告无视过去

第七步 安装目录选择默认,点击下一步后进入检查步骤,检查完毕通过后,我们就可以点击install进行安装了。

 

提示执行root脚本的时候,登入新的窗口,执行完毕点击OK

su – root

sh /opt/oracle/product/11.2.0/grid/root.sh

 

安装完成之后退出安装程序即可

 

4. 创建 DiskGroup

 

继续创建完所有磁盘组,如下,点击 exit 退出

 

 

5. 对 RDBMS 做一个备份

创建 Backup.rman 脚本,内容如下:

[oracle@11gr2 dbs]$ mkdir /opt/scripts

[oracle@11gr2 dbs]$ vi /opt/scripts/backup.rman

 

run {

backup as copy database format '+DG1';

}

 

export ORACLE_SID=orcl

rman target / cmdfile=/opt/scripts/backup.rman log=/opt/backup.log

 

执行完成后检查日志查看备份是否成功,如果失败则找出原因,知道成功为止

cat /opt/backup.log

 

6. 修改 RDBMS 参数

sqlplus ' / as sysdba'

alter system set db_recovery_file_dest_size = 330g scope=both;

alter system set db_recovery_file_dest='+RECOVERY' scope=both;

 

把联机日志和自动创建数据文件位置指定为磁盘组

alter system set db_create_file_dest='+DG1' scope=both;

alter system set db_create_online_log_dest_1='+DG1' scope=both;

alter system set db_create_online_log_dest_2='+DG1' scope=both;

 

7. 把联机日志和 standby 日志迁移到 ASM 磁盘组

7.1 当前联机日志配置

select group#, member from v$logfile;

3      /opt/oracle/oradata/orcl/redo03.log

2      /opt/oracle/oradata/orcl/redo02.log

1      /opt/oracle/oradata/orcl/redo01.log

 

每个联机日志里面添加两个成员。通过给每组添加两个新成员然后删除旧成员的办法来迁移联机日志。因为设置了 db_create_online_log_dest_1/2 两个参数,以后新的日志组会自动在每个DiskGroup中创建一个成员

alter database add logfile member '+DG1','+DG2' to group 1;

alter database add logfile member '+DG1','+DG2' to group 2;

alter database add logfile member '+DG1','+DG2' to group 3;

 

删除原来的联机日志

查看日志转态

select group#, status from v$log;

 

删除 inactive 状态日志组成员

alter system switch logfile;

alter database drop logfile member '/opt/oracle/oradata/orcl/redo03.log';

alter database drop logfile member '/opt/oracle/oradata/orcl/redo01.log';

alter system switch logfile;

alter database drop logfile member '/opt/oracle/oradata/orcl/redo02.log';

 

检查联机日志,确认全部迁移到ASM中,并且每组两个成员,一个在DG1,一个在DG2

select group#, member from v$logfile order by 1;

 

8. 迁移临时表空间

当前临时表空间配置

select ts#, bytes/1024/1024, name from v$tempfile;

3      29     /opt/oracle/oradata/orcl/temp01.dbf

 

select ts#, name from v$tablespace;

 

给每个临时表空间创添加文件

alter tablespace temp add tempfile size 30m;

 

确认新文件存在

select name from v$tempfile;

 

删除旧的文件

alter database tempfile '/opt/oracle/oradata/orcl/temp01.dbf' drop;

 

如果删除提示:

ORA-25152: TEMPFILE cannot be dropped at this time

 

则用如下SQL检查正在使用临时文件的会话,并杀之,然后重试删除,直到成功删除为止

SELECT se.username,

       sid,

       serial#,

       sql_address,

       machine,

       program,

       tablespace,

       segtype,

       contents

  FROM v$session se,

       v$sort_usage su

WHERE se.saddr=su.session_addr;

 

9. 迁移控制文件、数据文件

(在整个操作过程中,只有这一步需要对数据库实例进行关闭、启动,实际就是一个完全恢复的过程)

先记录下当前控制文件的位置

show parameter control

NAME                            TYPE     VALUE

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

control_file_record_keep_time          integer  7

control_files                   string   /opt/oracle/oradata/orcl/contr

                                          ol01.ctl, /opt/oracle/fast_rec

                                          overy_area/orcl/control02.ctl

control_management_pack_access         string   DIAGNOSTIC+TUNING

 

修改参数,指向新的控制文件位置

alter system set control_files='+DG1/oracle/oradata/orcl/control01.ctl','+DG2/oracle/oradata/orcl/control02.ctl' scope=spfile;

 

关闭数据库

shutdown immediate

 

启动数据库到nomount状态

startup nomount

 

登入 asmcmd ,创建控制文件目录

[oracle@11gr2 ~]$ export ORACLE_HOME=$GRID_HOME

[oracle@11gr2 ~]$ export ORACLE_SID=+ASM

[oracle@11gr2 ~]$ asmcmd

ASMCMD> cd DG1

ASMCMD> mkdir oracle

ASMCMD> cd oracle

ASMCMD> mkdir oradata

ASMCMD> cd oradata 

ASMCMD> mkdir orcl

 

cd DG2

mkdir oracle

cd oracle

mkdir oradata

cd oradata 

mkdir orcl

 

在 rman 中进行完全恢复

rman target /

 

恢复新的控制文件

(控制文件被恢复到 ASM DiskCroup 中的指定位置)

restore controlfile from '/opt/oracle/oradata/orcl/control01.ctl';

 

挂载数据库

alter database mount;

 

切换数据文件

switch database to copy;

 

现在使用的数据文件是ASM DiskGroup 中的 Copy,因为是备份,所以要进行恢复操作

recover database;

 

打开数据库

alter database open;

 

10. 确认所有的文件已经迁移到ASM中

select name,'controlfile' from v$controlfile  -- 控制文件

union all

select name, status from v$datafile -- 数据文件

union all

select member, 'logfile' from v$logfile – 联机日志文件

union all

select name, status from v$tempfile;  -- 临时表空间文件

+DG1/oracle/oradata/orcl/control01.ctl   controlfile

+DG2/oracle/oradata/orcl/control02.ctl   controlfile

+DG1/orcl/datafile/system.257.886604655  SYSTEM

+DG1/orcl/datafile/sysaux.259.886604741  ONLINE

+DG1/orcl/datafile/undotbs1.258.886604841       ONLINE

+DG1/orcl/datafile/users.262.886604881   ONLINE

+DG1/orcl/datafile/example.256.886604807 ONLINE

+DG1/orcl/datafile/oggtest.260.886604857 ONLINE

+DG1/orcl/datafile/ogg.261.886604873     ONLINE

+DG1/orcl/onlinelog/group_1.265.886605503       logfile

+DG2/orcl/onlinelog/group_1.256.886605509       logfile

+DG1/orcl/onlinelog/group_2.266.886605511       logfile

+DG2/orcl/onlinelog/group_2.257.886605517       logfile

+DG1/orcl/onlinelog/group_3.267.886605519       logfile

+DG2/orcl/onlinelog/group_3.258.886605525       logfile

+DG1/orcl/tempfile/temp.268.886606589    ONLINE

 

11. 最后验证

现在迁移完成,可以删除旧的文件了。为确保万无一失,可以关闭数据库实例,然后删除原来的文件,最后启动数据库,一切正常,迁移成功。

 

 

参考:

《大话Oracle RAC:集群、高可用性、备份与恢复》第一版

http://blog.csdn.net/tigers23/article/details/7758255

http://www.ylzx8.cn/shujuku/database/937220.html

http://blog.itpub.net/27042095/viewspace-1101009/

http://note.youdao.com/share/?id=322916719e6e3d97bb8f0768991d1be1&type=note

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

转载于:http://blog.itpub.net/30168575/viewspace-1758738/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值