Oracle ASM 原理及权限问题
目录
1. ASM的功能
ASM整合了裸设备和文件系统的优点,同时也规避了它们各自的缺点。
1.1 裸设备和文件系统的优缺点
ASM推出之前,Oracle数据库使用裸设备或文件系统方式,进行空间和数据管理。
数据库使用裸设备,IO性能好,但由于非Bigfile表空间数据文件不能超过32G的限制,所以操作系统需要管理大量小磁盘或LV,增加了磁盘管理的复杂性。
数据库使用文件系统时,可以直接使用大磁盘或大LV,简化了磁盘管理,但Data Block在IO过程中被SGA和file system cache两次重复缓存,即浪费了内存资源,降低了IO效率,也增加了掉电后Data Block和redo log在文件系统缓存中丢失的风险。
1.2 ASM的推出
ASM是Oracle为了降低磁盘管理复杂性,同时提高IO性能而设计开发的。ASM可以将一组磁盘转换成为一套可伸缩的和高性能的卷管理器和文件系统。ASM磁盘组会被作为原始设备来被数据库做空间访问,并提供文件系统的便利性和灵活性。
1.3 ASM实例与Database实例的交互
ASM不会代替RDBMS去实施I/O读写,很多人对这一点存在误解,认为RDBMS发送I/O请求给ASM,ASM去执行I/O,这样的想法是错误的。ASM只负责将存储空间地址返回给RDBMS,真正的I/O还是会由RDBMS进程去完成,和不用ASM的裸设备一样,因此ASM不是I/O的中间层,也就不存在因为ASM而出现I/O瓶颈。
ASM的最主要工作就是,将ASM Disk上的AU(allocation unit),分配给数据库ASM File的Extent,并维护ASM File <-> Extent <-> ASM Disk <-> AU的映射关系,即Extent Map。Extent Map记录了ASM Disk Number和AU号,这就描述了该Extent的物理位置。
此外ASM实例挂载磁盘组后,ASM会把disk group、asm instance name、oracle home path等信息注册到CSS服务中,当数据库实例打开或创建名字以“+”开头的文件时,它会通过CSS来查看disk group和mount该DG的ASM实例的信息,再通过CSS中这些信息构造connect string连接ASM实例的。
2. 权限问题
2.1 ASM权限
推荐权限配置:
- grid用户:oinstall / dba,asmdba,asmadmin,asmoper,oper
- oracle用户:oinstall / dba,asmdba
- udev磁盘: 0660 grid:asmadmin
- GRID_HOME下Oracle程序:6751 -rwsr-s--x
- ORACLE_HOME下Oracle程序:6751 -rwsr-s--x
磁盘设备由grid:asmadmin所有,oracle用户无法直接使用,当oracle用户需要访问ASM磁盘时,会使用GRID_HOME(即grid用户的ORACLE_HOME)下的oracle二进制文件,创建读写进程。因为GRID_HOME下的oracle文件权限配置了suid和sgid,即oracle用户创建的进程可以使用grid用户的身份来访问磁盘。
当然另一种常见做法是,直接给oracle用户添加asmadmin组。
2.2 Disk asmdba问题
如果遇到“Could not connect to ASM due to following error:ORA-01017”错误,可能是因为磁盘磁盘或者oracle用户的所属组配置有问题。
(1)检查磁盘权限,有问题时,修改磁盘权限及所属
ls -l /dev/sd*
chmod 660 /dev/sdx
chown grid:asmadmin /dev/sdx
(2)检查oracle和grid属组配置,有问题时修改属组
id oracle
id grid
usermod -a -G asmdba,asmadmin oracle
2.3 oracle 6751问题
如果遇到ORA-15055等错误时,需要检查oracle二进制文件的权限配置。
ORA-19504: failed to create file "+DATA/scttest/controlfile/control01.ctl"
ORA-17502: ksfdcre:3 Failed to create file +DATA/scttest/controlfile/control01.ctl
ORA-15001: diskgroup "DATA" does not exist or is not mounted
ORA-15055: unable to connect to ASM instance
ORA-01034: ORACLE not available
ORA-27123: unable to attach to shared memory segment
oracle二进制文件的权限需要改为6751。
su - grid
cd $ORACLE_HOME/bin
ls -l oracle
>-rwxr-x--x 1 grid oinstall 209914471 Jan 6 10:33 oracle
chmod 6751 oracle
ls -l oracle
>-rwsr-s--x 1 grid oinstall 209914471 Jan 6 10:33 oracle