• 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 命令
填入数据库创建的时候的四个密码,点击右下角的Specify Disk Group
勾选好需要的磁盘,填写磁盘组的名字,点击OK
注意:磁盘组的名字前面不写“+”。
点击最右下角的Create Asm
等待创建成功
检查服务,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,修改后再允许就可以了。