致谢:秋雨落大神悉心指导
目的:
把一个单实例、使用文件系统作为存储的数据库迁移到使用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.youkuaiyun.com/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/