数据库迁移到asm磁盘组

• 11g 安装grid软件,cssd的服务就要开启
asmca 创建asm实例管理磁盘
asmca 管理diskgroup
dbca 管理 database

• 10g 要装oracleasm-supper
/etc/init.dcssd start
asmca
internal:外部冗余 ,至少1个磁盘
normal:正常冗余,至少2个磁盘
high:高级冗余。如果磁盘业务数据库只能使用磁盘的三分之一,其他做备份。至少3个磁盘

1    磁盘准备

    准备好asm需要的磁盘(分区,格式化)

    /etc/udev/rules.d 在这个目录下修改文件60-raw.rules 中的配置

[oracle@myvm64 rules.d]$ vim /etc/udev/rules.d/60-raw.rules 
ample would be:
#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
   ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw1 %N"
   ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw2 %N"
   ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw3 %N"
   ACTION=="add", KERNEL=="sdf1", RUN+="/bin/raw /dev/raw/raw4 %N"
# to bind /dev/raw/raw1 to /dev/sda, or
#   ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"
# to bind /dev/raw/raw2 to the device with major 8, minor 1.
# 在里面添加上面每一个磁盘的配置

     cp 99-fuse.rules 99-asm.rules 里面设置绑定的名字,用户,组,权限至少是644的

[root@myvm64 rules.d]# vim 99-asm.rules 
ERNEL=="raw*", MODE="0644",OWNER="oracle",GROUP="oinstall"
[root@myvm64 rules.d]# start_udev
Starting udev:                                             [  OK  ]

    在oracle用下先运行grid 环境变量,再运行asmca 命令

213610_ly81_2917803.png

    填入数据库创建的时候的四个密码,点击右下角的Specify Disk Group

213755_TfkI_2917803.png

勾选好需要的磁盘,填写磁盘组的名字,点击OK

注意:磁盘组的名字前面不写“+”。

    点击最右下角的Create Asm

213953_5Pk3_2917803.png

等待创建成功

214327_MITp_2917803.png

214848_mdaR_2917803.png

检查服务,crs_stat -t 能看到上面创建的ND 和CND 的磁盘组的服务

----------------------------------------
ora.CND.dg     ora....up.type ONLINE    ONLINE    myvm64      
ora.ND.dg      ora....up.type ONLINE    ONLINE    myvm64      
ora.asm        ora.asm.type   ONLINE    ONLINE    myvm64      
ora.cssd       ora.cssd.type  ONLINE    ONLINE    myvm64      
ora.diskmon    ora....on.type OFFLINE   OFFLINE               
ora.evmd       ora.evm.type   ONLINE    ONLINE    myvm64      
ora.ons        ora.ons.type   OFFLINE   OFFLINE               
ora.orcl.db    ora....se.type ONLINE    ONLINE    myvm64 

    登录数据库检查磁盘组的挂在情况

SQL> select group_number,name,state from v$asm_diskgroup;

GROUP_NUMBER NAME			    STATE
------------ ------------------------------ -----------
	   1 ND 			    MOUNTED
	   2 CND			    MOUNTED

    当前磁盘组已经是挂载的。如果没挂在,可以用脚本进行挂载

alter diskgroup group_name mount; 挂载
alter diskgroup group_name dismount; 卸载

alter diskgroup <> add ‘/’ 对磁盘组增加磁盘
alter diskgroup <> drop '/' 对磁盘组删除


SQL> alter diskgroup ND dismount;
alter diskgroup ND dismount
*
ERROR at line 1:
ORA-15000: command disallowed by current instance type

    上面取消挂载失败,因为我们当前使用的是oracle的实例orcl,所以报错也已经提示来实例不对,下面我们可以通过简单的ps -ef|grep asm 来看看asm的实例名是什么

[root@myvm64 /]# ps -ef|grep asm
oracle   21306     1  0 21:43 ?        00:00:00 asm_pmon_+ASM
oracle   21308     1  0 21:43 ?        00:00:00 asm_psp0_+ASM
oracle   21310     1  2 21:43 ?        00:00:41 asm_vktm_+ASM
oracle   21314     1  0 21:43 ?        00:00:00 asm_gen0_+ASM
oracle   21316     1  0 21:43 ?        00:00:00 asm_diag_+ASM
oracle   21318     1  0 21:43 ?        00:00:01 asm_dia0_+ASM
oracle   21320     1  0 21:43 ?        00:00:00 asm_mman_+ASM
oracle   21322     1  0 21:43 ?        00:00:00 asm_dbw0_+ASM
oracle   21324     1  0 21:43 ?        00:00:00 asm_lgwr_+ASM
oracle   21326     1  0 21:43 ?        00:00:00 asm_ckpt_+ASM
oracle   21328     1  0 21:43 ?        00:00:00 asm_smon_+ASM
oracle   21330     1  0 21:43 ?        00:00:00 asm_rbal_+ASM
oracle   21332     1  0 21:43 ?        00:00:01 asm_gmon_+ASM
oracle   21334     1  0 21:43 ?        00:00:00 asm_mmon_+ASM
oracle   21336     1  0 21:43 ?        00:00:00 asm_mmnl_+ASM
root     27904 11935  0 22:12 pts/1    00:00:00 grep asm
# 可以看出asm的实例是+ASM

    设置实例后重新挂载或者卸载 ,在上面的asm图像界面上也可以挂载或者卸载。

2    在asmcmd 终端里面查看信息和操作

[oracle@myvm64 rules.d]$ asmcmd
Connected to an idle instance.
sh: /data/oracle/u01/product/11g/orale/bin/clsecho: No such file or directory
ASMCMD> 
# 由于当前实例写的是oracle的实例,所以asmcmd 环境链接是空实例

show all 可以看出asmcmd 环境下可以执行类似与linux命令

ASMCMD> show all;
        commands:
        --------

        md_backup, md_restore

        lsattr, setattr

        cd, cp, du, find, help, ls, lsct, lsdg, lsof, mkalias
        mkdir, pwd, rm, rmalias

        chdg, chkdg, dropdg, iostat, lsdsk, lsod, mkdg, mount
        offline, online, rebal, remap, umount

        dsget, dsset, lsop, shutdown, spbackup, spcopy, spget
        spmove, spset, startup

        chtmpl, lstmpl, mktmpl, rmtmpl

        chgrp, chmod, chown, groups, grpmod, lsgrp, lspwusr, lsusr
        mkgrp, mkusr, orapwusr, passwd, rmgrp, rmusr

        volcreate, voldelete, voldisable, volenable, volinfo
        volresize, volset, volstat

3    在rman中对数据库备份后迁移到asm磁盘组中

    3.1 数据库文件迁移到asm磁盘组中

            将数据库启动到mount 状态下打开归档功能

SQL> startup mount;
ORACLE instance started.

Total System Global Area  413372416 bytes
Fixed Size		    2228904 bytes
Variable Size		  310381912 bytes
Database Buffers	   96468992 bytes
Redo Buffers		    4292608 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

            打开数据库

SQL> alter database open;

Database altered.

        做几次alter system switch logfile;

SQL> alter system switch logfile;

System altered.

SQL> l
  1* alter system switch logfile
SQL> /

System altered.

    3.2 rman 备份数据库


Recovery Manager: Release 11.2.0.3.0 - Production on Sat Dec 17 22:46:01 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1458628377)

RMAN> backup database;

Starting backup at 17-DEC-16
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=30 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/data/oracle/u01/product/11g/oradata/orcl/system01.dbf
input datafile file number=00002 name=/data/oracle/u01/product/11g/oradata/orcl/sysaux01.dbf
input datafile file number=00003 name=/data/oracle/u01/product/11g/oradata/orcl/undotbs01.dbf
input datafile file number=00004 name=/data/oracle/u01/product/11g/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 17-DEC-16
channel ORA_DISK_1: finished piece 1 at 17-DEC-16
piece handle=/data/oracle/u01/product/11g/fast_recovery_area/ORCL/backupset/2016_12_17/o1_mf_nnndf_TAG20161217T224617_d5bmxvrc_.bkp tag=TAG20161217T224617 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:49
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 17-DEC-16
channel ORA_DISK_1: finished piece 1 at 17-DEC-16
piece handle=/data/oracle/u01/product/11g/fast_recovery_area/ORCL/backupset/2016_12_17/o1_mf_ncsnf_TAG20161217T224617_d5bn36vz_.bkp tag=TAG20161217T224617 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04
Finished backup at 17-DEC-16

    检查哪个磁盘组大就迁移到哪个磁盘组下面:

SQL> select name,total_mb from v$asm_diskgroup;

NAME				 TOTAL_MB
------------------------------ ----------
ND				    10228
CND				    10228
# 我们设置的两个磁盘组一样大,所以随便哪个都可以了

    数据库启动到mount状态下

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  413372416 bytes
Fixed Size		    2228904 bytes
Variable Size		  310381912 bytes
Database Buffers	   96468992 bytes
Redo Buffers		    4292608 bytes
Database mounted.

    在asmcmd环境下准备好磁盘文件存放的位置

ASMCMD> ls    
CND/
ND/
ASMCMD> cd ND
ASMCMD> mkdir datafile
ASMCMD> cd datafile
ASMCMD> mkdir orcl
ASMCMD> cd orcl
ASMCMD> mkdir oradata
ASMCMD> pwd
+ND/datafile/orcl
ASMCMD> 

    在rman环境下编写脚本进行迁移(数据库一定要是在mount状态下的)

[root@myvm64 tmp]# cat tmpasm.sql 
run{
set newname for database to '+ND/datafile/orcl/oradata%b';
restore database;
recover database;
switch datafile all;
}
# 在rman中允许这个脚本
RMAN> @ /tmp/tmpasm.sql

RMAN> run{
2> set newname for database to '+ND/datafile/orcl/oradata%b';
3> restore database;
4> recover database;
5> switch datafile all;
6> }
executing command: SET NEWNAME

Starting restore at 18-DEC-16
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +ND/datafile/orcl/oradatasystem01.dbf
channel ORA_DISK_1: restoring datafile 00002 to +ND/datafile/orcl/oradatasysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to +ND/datafile/orcl/oradataundotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to +ND/datafile/orcl/oradatausers01.dbf
channel ORA_DISK_1: reading from backup piece /data/oracle/u01/product/11g/fast_recovery_area/ORCL/backupset/2016_12_17/o1_mf_nnndf_TAG20161217T224617_d5bmxvrc_.bkp
channel ORA_DISK_1: piece handle=/data/oracle/u01/product/11g/fast_recovery_area/ORCL/backupset/2016_12_17/o1_mf_nnndf_TAG20161217T224617_d5bmxvrc_.bkp tag=TAG20161217T224617
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:06:43
Finished restore at 18-DEC-16

Starting recover at 18-DEC-16
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 18-DEC-16

datafile 1 switched to datafile copy
input datafile copy RECID=5 STAMP=930919904 file name=+ND/datafile/orcl/oradatasystem01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=6 STAMP=930919904 file name=+ND/datafile/orcl/oradatasysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=7 STAMP=930919904 file name=+ND/datafile/orcl/oradataundotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=8 STAMP=930919904 file name=+ND/datafile/orcl/oradatausers01.dbf

RMAN> **end-of-file**

数据文件已经迁移


SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
+ND/datafile/orcl/oradatasystem01.dbf
+ND/datafile/orcl/oradatasysaux01.dbf
+ND/datafile/orcl/oradataundotbs01.dbf
+ND/datafile/orcl/oradatausers01.dbf

    修改控制文件的路径

SQL> alter system set control_files='+ND/datafile/orcl/control.ctl' scope=spfile;

System altered.
# 这里只指定了一个控制文件,当然正式生产中至少指定两个以上的控制文件,且路径放在不同的磁盘中

    数据库重启到nomount状态下

RMAN> restore controlfile from '/data/oracle/u01/product/11g/fast_recovery_area/ORCL/backupset/2016_12_17/o1_mf_ncsnf_TAG20161217T224617_d5bn36vz_.bkp';

Starting restore at 18-DEC-16
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
output file name=+ND/datafile/orcl/control.ctl
Finished restore at 18-DEC-16
# restore 后面的路径是之前备份的控制文件路径

    查看控制文件路径

SQL> show parameter control_files;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
control_files			     string	 +ND/datafile/orcl/control.ctl

    数据库启动到mount状态下查看当前控制文件,数据文件,日志文件的路径

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
+ND/datafile/orcl/control.ctl
SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/data/oracle/u01/product/11g/oradata/orcl/redo03.log
/data/oracle/u01/product/11g/oradata/orcl/redo02.log
/data/oracle/u01/product/11g/oradata/orcl/redo01.log

    迁移日志文件到asm磁盘组。日志文件的路径在控制文件中配置的,所以要修改控制文件

SQL> alter database backup controlfile to trace as '/tmp/cron.ctl';

Database altered.
# 控制文件导出到pfile,修改后再允许就可以了。

    

转载于:https://my.oschina.net/wangzilong/blog/807905

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值