虚拟机上实施ASM
此文档旨在让初学者以最快的速度完成ASM部署,初步了解ASM的部署流程,以及简单的ASM管理。ASM并不难,Oracle利用这种技术能轻松的实现对存储的管理。在书上和网络上都查找了一些资料,都不是太尽人意。要么说得太复杂,要么就是比较笼统。自己部署时也遇到一些小问题,和大家一起分享。
系统环境:
虚拟机:VMware Workstation 9
操作系统:RHEL5.4
数据库:Oracle10g
详细步骤:
一、在虚拟机上添加虚拟磁盘
在虚拟机上安装好操作系统与Oracle数据库之后,就可以开始准备部署ASM了,当然也可以在创建Oracle数据库的时候一同创建ASM实例。为了简化理解,我们安装好Oracle数据库之后再创建ASM实例。
在虚拟机上添加虚拟磁盘非常简单,如下图所示,添加3个500M的虚拟磁盘。
二、创建磁盘分区
在虚拟机中新添加的磁盘是看不到的,如果想要看到新添加的磁盘有两种方法,第一种是重启虚拟机。第二种就是发送命令让系统扫描主机外设,这种方法不用重启虚拟机。我们选择第二种:
命令:
echo "- - -" > /sys/class/scsi_host/host0/scan
执行完这条命令后,查看是否发现了新加载的磁盘。
[root@ora10 ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 1172 9213277+ 83 Linux
/dev/sda3 1173 1433 2096482+ 82 Linux swap / Solaris
/dev/sda4 1434 2610 9454252+ 5 Extended
/dev/sda5 1434 2610 9454221 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 512 524272 83 Linux
Disk /dev/sdd: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 512 524272 83 Linux
Disk /dev/sde: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sde1 1 512 524272 83 Linux
从上面可以看出/dev/sdc /dev/sdd /dev/sdd三块新添加磁盘都已经被加载。加载完磁盘之后需要创建磁盘分区,这个也很简单。
依次执行完以下命令:
命令:fdisk /dev/sdc
命令:n #新建分区
命令:p #创建主分区
命令:1 #第一个分区
命令:直接回车 #默认将整个磁盘划到一个分区
命令:w #保存
命令:q #退出
对每一块新添加的磁盘都依次执行以上命令,最后我们通过fdisk -l磁盘列表就可以查看到/dev/sdc1 /dev/sdd1 /dev/sde1这三个磁盘分区了。
三、安装ASM相关支持包
ASM相关的支持包共有三个,可以去Oracle官网下载,下载的时候一定要注意操作系统的内核,下载与之对应的内核支持包。
命令:uname -r #查看系统内核版本
命令:rpm -aq |grep oracleasm #查看已经安装的oracleasm包
[root@ora10 ~]# rpm -aq|grep oracleasm
oracleasmlib-2.0.4-1.el5
oracleasm-support-2.1.8-1.el5
oracleasm-2.6.18-164.el5-2.0.5-1.el5
以上是本机已经安装的
oracleasm相关包,具体怎么安装就不说了。
四、配置并创建ASM磁盘
Oracleasm相关的包安装好之后,可以查看下文件安装的目录,这里最重要的配置文件目录位于
/etc/init.d/oracleasm
来看下这个脚本可以做些什么。
[root@ora10 init.d]# oracleasm -h
Usage: oracleasm [--exec-path=<exec_path>] <command> [ <args> ]
oracleasm --exec-path
oracleasm -h
oracleasm -V
The basic oracleasm commands are:
configure Configure the Oracle Linux ASMLib driver
init Load and initialize the ASMLib driver
exit Stop the ASMLib driver
scandisks Scan the system for Oracle ASMLib disks
status Display the status of the Oracle ASMLib driver
listdisks List known Oracle ASMLib disks
querydisk Determine if a disk belongs to Oracle ASMlib
createdisk Allocate a device for Oracle ASMLib use
deletedisk Return a device to the operating system
renamedisk Change the label of an Oracle ASMlib disk
update-driver Download the latest ASMLib driver
英文再差应该也可以理解,通过这个脚本可以创建、删除、列表、重命名、验证、卸载、重加载
ASM磁盘。操作非常简单。
首先要配置一下。
命令:/etc/init.d/oracleasm configure
配置项中的owner为oracle,group 为dba ,引导加载asm驱动项选择y就行了,其它保持默认。
接下来要创建asm磁盘了。
命令:
/etc/init.d/oracleasm createdisk SDC
‘
/dev/sdc1
’
/etc/init.d/oracleasm createdisk SDD
‘
/dev/sdd1
’
/etc/init.d/oracleasm createdisk SDE
‘
/dev/sde1
’
查看下我们创建好的asm磁盘
命令:/etc/init.d/oracleasm listdisks
[root@ora10 init.d]# oracleasm listdisks
SDC
SDD
SDE
当然你也可以删除
asm磁盘
命令:/etc/init.d/oracleasm deletedisk SDC
验证asm磁盘是否有效
命令:/etc/init.d/oracleasm querydisk SDC
五、添加CSS服务
这里要添加CSS服务,这个服务具体什么用,就不详细说,可以去问下百度哥,或者是谷歌妹。
命令:
[oracle@ora10 bin]$ cd $ORACLE_HOME/dbs/bin
[oracle@ora10 bin]$ ./localconfig add
六、创建ASM实例
创建ASM实例可以直接编写asm初始化参数文件,口令文件的方式,这里我们采用最简单直观的方式,通过图形化界面。
以oracle用户登陆服务器执行dbca,打开创建数据库助手窗口。在第三步选择配置ASM
到四步选择“Create New”
有可能发现不了磁盘,需要修改一下磁盘下现路径“Change Disk Discovery Path”,磁盘发现路径有2种方式,一种是通过字符串实别,如本例“ORCL:*”,另一种是通过全路径实别,可以输入asm磁盘设备所在完全路径,默认路径为“/dev/oracleasm/disks/*”。这两种方式皆可。但这两种方式略有差别,采用全路径识别的方式,ASM会自动为asm磁盘命名,而自符串识别方式,会使用创建时所用的asm磁盘名,个人觉得还是用字符串的方式方便管理一些。
输入磁盘组名,选择冗余模式,这里选择“Normal”也就是镜像,Normal冗余组至少要有2块磁盘。然后选择asm磁盘。
七、管理ASM磁盘组
经过上面的一番辛苦,最令人兴奋的时刻终于到了。赶紧去看看我们的成果吧。
切换到+ASM,测试下实例能否正常启动吧。
export ORACLE_SID=+ASM
sqlplus / as sysdba
SQL> startup
ASM instance started
Total System Global Area 130023424 bytes
Fixed Size 2082208 bytes
Variable Size 102775392 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
ASM管理最重要的2个动态性能视图“v$asm_diskgroup”和“v$asm_disk”,查看下磁盘组及asm磁盘的相关信息。
SQL> set line 120
SQL> col name for a10
SQL> select group_number,name,total_mb,free_mb,state from v$asm_diskgroup;
GROUP_NUMBER NAME TOTAL_MB FREE_MB
STATE
------------ ---------- ---------- ---------- ----------------------
------------------------------------
1 DGROUP01 1022
920
MOUNTED
从查询结果可以得知我们刚才创建的组名为“
DGROUP01
”,编号为
1,目前处于挂载状态,以及总空间与空闲空间。
SQL> col path for a45
SQL> col path for a10
SQL> select group_number,disk_number,name,path,total_mb,free_mb from v$asm_disk;
GROUP_NUMBER
DISK_NUM
BER NAME PATH TOTAL_MB FREE_MB
------------ ----------- ---------- ---------- ---------- ----------
---------------------------------------------
0 2
ORCL:SDE 511 0
1 0
SDC
ORCL:SDC 511 460
1 1
SDD
ORCL:SDD 511 460
从查询结果可以得知“
DGROUP01
”组有
2块磁盘,分别是“SDC”和“SDD”,及未分配的磁盘“SDE”,自磁盘的总容量与空闲容量。
接下来我们来删除,创建磁盘组,挂载,卸载磁盘组,向组里加磁盘,删除组里的磁盘,及在磁盘组上创建表空间等操作,真正的实现ASM磁盘管理。
1、
删除磁盘组
命令:drop diskgroup dgroup01 including contents;
SQL> drop diskgroup dgroup01 including contents;
Diskgroup dropped.
SQL> select group_number,name,total_mb,free_mb,state from v$asm_diskgroup;
no rows selected
2、
创建磁盘组
命令:create diskgroup dgroup02 normal redundancy disk
‘
ORCL:SDC
’
disk
‘
ORCL:SDD
’
SQL> create diskgroup dgroup02 normal redundancy disk 'ORCL:SDC' disk 'ORCL:SDD';
Diskgroup created.
SQL> select group_number,name,total_mb,free_mb,state from v$asm_diskgroup;
GROUP_NUMBER
NAME TOTAL_MB FREE_MB
STATE
------------ ---------- ---------- ---------- ----------------------
--------------------------------------
1
DGROUP02 1022
920
MOUNTED
3、
卸载磁盘组
命令:alter diskgroup dgroup02 dismount;
SQL> alter diskgroup dgroup02 dismount;
Diskgroup altered.
SQL> select group_number,name,total_mb,free_mb,state from v$asm_diskgroup;
GROUP_NUMBER NAME TOTAL_MB FREE_MB
STATE
------------ ---------- ---------- ---------- ----------------------
------------------------------------
0 DGROUP02 0
0
DISMOUNTED
4、
挂载磁盘组
命令:alter diskgroup dgroup02 mount;
SQL> alter diskgroup dgroup02 mount;
Diskgroup altered.
SQL> select group_number,name,total_mb,free_mb,state from v$asm_diskgroup;
GROUP_NUMBER NAME TOTAL_MB FREE_MB
STATE
------------ ---------- ---------- ---------- ----------------------
-------------------------------------
1 DGROUP02
1022 920
MOUNTED
5、
添加磁盘到磁盘组
命令:alter diskgroup dgroup02 add disk
‘
ORCL:SDE
’
SQL> select group_number,disk_number,name,path,total_mb,free_mb from v$asm_disk;
GROUP_NUMBER DISK_NUMBER
NAME
PATH TOTAL_MB FREE_MB
------------ ----------- ---------- ---------- ---------- ----------
---------------------------------------
1 0 SDC ORCL:SDC 511 460
1 1 SDD ORCL:SDD 511 460
1 2 SDE ORCL:SDE
511
460
这里需要注意的是往磁盘组里添加磁盘时添加的
PATH字段的字符串。
6、
从磁盘组中删除磁盘
命令:alter diskgroup dgroup02 drop disk
‘
SDC
’
;
SQL> select group_number,disk_number,name,path,total_mb,free_mb from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH TOTAL_MB FREE_MB
------------ ----------- ---------- ---------- ---------- ----------
---------------------------------------
0 0 ORCL:SDC 511 0
1 1 SDD ORCL:SDD 511 460
1 2 SDE ORCL:SDE 511 460
ASM添加磁盘组后会自动做数据平衡,将数据分布到新添加的磁盘当中去,反之从磁
盘组中删除磁盘后会将删除磁盘上的数据分配到组中其它磁盘上去。
7、
创建表空间
命令:
SQL> create tablespace asmtest
2 datafile '+DGROUP02/asmtest01.dbf'
3 size 10m
4 autoextend on
5 /
Tablespace created.
可以在表空间上创建表,插入数据,做下读写测试。整个ASM部署流程就讲完了。
补充知识:
如果因为条件限制不能使用Oracle服务器控制台,也可以配置,关键是编辑参数文件和口令文件。这里将init+ASM文件内容贴出来,这是个文件文件,可以直接用VI编辑工具处理。
*.asm_diskgroups='DGROUP01'
+ASM.asm_diskgroups='DGROUP02'#Manual Mount
*.asm_diskstring='ORCL:*'
*.background_dump_dest='/opt/app/oracle/admin/+ASM/bdump'
*.core_dump_dest='/opt/app/oracle/admin/+ASM/cdump'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='SHARED'
*.user_dump_dest='/opt/app/oracle/admin/+ASM/udump'
创建口令文件
orapwd file=
’
$ORACLE_HOME/dbs/orapw+ASM
’
password=*****
创建日志文件目录
mkdir -p
/opt/app/oracle/admin/+ASM/bdump
mkdir -p
/opt/app/oracle/admin/+ASM/
udump
mkdir -p
/opt/app/oracle/admin/+ASM/
cdump
然后就可测试下+ASM实例是否能正常启动了。