Oracle-ASM原理(2)

ASM支持以下三种冗余方式

ASM不仅仅要通过高效存取效率,还要提高数据安全。
– 外部冗余
• 表示Oracle不帮你管理镜像,功能由外部存储系统实现,比如通过RAID技术;有效磁盘空间是所有磁盘设备空间的大小之和。

外部冗余就是ASM不提供冗余,由硬件设备本身存储的机制提供冗余。现在的硬件提供了很多种的冗余,比如raid好处在于利用现有的磁盘,ASM不再划出其余的空间来做冗余。这样做的好处就是最大的可以利用磁盘空间。

 

– 常规冗余
• (默认方式)表示Oracle提供2路镜像来保护数据,会损失一部分磁盘空间用于数据冗余。
如果额外的设备做冗余,那么就需要由ASM来做冗余了。这个是在ASM层面上提供冗余。也就是将磁盘里面的数据再备份一份。

 

– 高冗余
Oracle提供3路镜像来保护数据,会损失更多磁盘空间用于数据冗余。

 

现在大部分都使用外部冗余,因为raid技术比成熟了,是值得信赖的。

 

ASM Failure Groups - External Redundancy 

Oracle-ASM原理(2)

如果在外面做了冗余,那么就不需要磁盘的层面上面进行冗余了。那么磁盘的利用率就很高了,百分之百的利用率。

ASM Failure Groups - Normal Redundancy 

Oracle-ASM原理(2)

这个像oracle的日志组一样,里面有两个日志其中坏了一个另外一个还可以用。

ASM Failure Groups - Normal Redundancy

Oracle-ASM原理(2)

ASM Failure Groups - High Redundancy 

Oracle-ASM原理(2)

Normal Redundancy 1 Disk Per Failure Group 

Oracle-ASM原理(2)

现在都使用底层的自身的存储冗余,比如raid,在ASM面做冗余太浪费了,所以在ASM上面使用外部冗余。

Normal Redundancy 2 Disks per Failure Group 

Oracle-ASM原理(2)

ASM日常管理

ASM也是依靠参数来启动的。

SQL> startup nomount;

ASM instance started

 

Total System Global Area 1135747072 bytes

Fixed Size     2260728 bytes

Variable Size  1108320520 bytes

ASM Cache    25165824 bytes

RAC环境下面ASM使用ASM实例,数据库使用数据库实例。

通过ps -ef | grep ora_可以查看到oracle后台进程。oradb就是数据库实例

[[email protected] ~]$ ps -ef | grep ora_

oracle    6330     1  0 21:53 ?        00:00:00 ora_pmon_oradb

oracle    6332     1  0 21:53 ?        00:00:00 ora_psp0_oradb

oracle    6337     1  1 21:53 ?        00:00:02 ora_vktm_oradb

oracle    6341     1  0 21:53 ?        00:00:00 ora_gen0_oradb

oracle    6343     1  0 21:53 ?        00:00:00 ora_diag_oradb

 

查看ASM后台进程

[[email protected] ~]$ ps -ef | grep asm

grid      4536  4488  0 21:44 pts/1    00:00:00 sqlplus   as sysasm

grid      4596     1  0 21:45 ?        00:00:00 asm_pmon_+ASM

grid      4598     1  0 21:45 ?        00:00:00 asm_psp0_+ASM

grid      4600     1  2 21:45 ?        00:00:15 asm_vktm_+ASM

grid      4604     1  0 21:45 ?        00:00:00 asm_gen0_+ASM

 

SQL> show parameter name;

 

NAME      TYPE

------------------------------------ ----------------------

VALUE

------------------------------

db_unique_name      string

+ASM

instance_name      string

+ASM

lock_name_space      string

 

service_names      string

+ASM

 

 

RAC环境里面用sqlplus去连接oracle实例的时候,如果连接到空闲的实例,那么可能就是oracle环境变量ORACLE_SID和数据库实例名字不一样,先用ps -ef | grep ora_来查看数据库实例的名字,之后再去oracle的环境变量里面去查看ORACLE_ID名字。在一个数据库上面可以有多个实例,如果要连接到哪个实例可以在oracle用户下面使用[[email protected] ~]# export ORACLE_SID=oradb,不过也可以连接到ASM实例。在RAC环境里面也可以使用sqlplus username/[email protected]来连接RAC环境里面的一个数据库实例。

 

[[email protected] ~]# su - oracle

[[email protected] ~]$ echo $ORACLE_SID

oradb

[[email protected] ~]$ su - grid

Password:

[[email protected] ~]$ echo $ORACLE_SID

+ASM

 

 

SQL> select instance_name,status from v$instance;

 

INSTANCE_NAME  STATUS

-------------------------------- ------------------------

+ASM  STARTED

ASM实例的状态一直是STARTED的状态(这个状态就是将实例起来,分配内存),它只是一个实例,不会一直去关注数据的一致性问题,也不会将数据库打开执行SQL语句,ASM实例只是用来做数据的抽取和数据的传递。只是为数据库实例来服务的,所以不需要控制文件和数据文件。

 

ASM里面,使用最多的就是两个视图,v$asm_diskgroup查看磁盘组信息,v$asm_disk查看磁盘信息。ASM实例的信息最好在ASM实例里面去查看,不要到oracle实例里面去查询,因为ASM实例的信息更加准确,要比在数据库上面查到的信息更加准确。

 

 

ASM提供工具ASMCMD

ASM管理的磁盘在操作系统下面是不可见的,所以oracle提供了工具ASMCMD这个工具来查看。进去之后就可以发现里面其实也像操作系统的文件一样。

[[email protected] ~]$ asmcmd

ASMCMD> ls

DATA/

LOG/

RECOVER/

 

ASMCMD> ls

CONTROLFILE/

DATAFILE/

ONLINELOG/

PARAMETERFILE/

TEMPFILE/

spfileoradb.ora这个就是数据库的spfile,放在ASM RAC上面,这样的好处是几个实例都可以使用同一个spfile来启动数据库。这样就可以保证各个实例的参数的一致性,好处是这样更改一个参数就对所有的实例都生效。

 

ASMCMD> cd DATAFILE/

ASMCMD> ls

EXAMPLE.265.972178091

SYSAUX.257.972177933

SYSTEM.256.972177933

UNDOTBS1.258.972177933(在RAC环境下面,有两个undo表空间,因为两个实例各自使用一个undo表空间)

USERS.259.972177933

 

 

通过lsct可以查看有那些实例连接到了ASM实例上面。

ASMCMD> lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

oradb    CONNECTED        11.2.0.4.0          11.2.0.4.0  oradb          DATA      

oradb    CONNECTED        11.2.0.4.0          11.2.0.4.0  oradb          RECOVER

 

lsdg来查看磁盘组的信息,mount代表磁盘组挂载上了,是可以使用的。

ASMCMD> lsdg

State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name

MOUNTED  EXTERN  N         512   4096  1048576     20480    18498                0           18498              0             N  DATA/

MOUNTED  EXTERN  N         512   4096  1048576     10244    10192                0           10192              0             N  LOG/

MOUNTED  EXTERN  N         512   4096  1048576      9224     7665                0            7665   

使用disk查看到的磁盘信息和df -h查看到的信息是不一样的,因为ASM磁盘不是操作系统的一部分。

 

 

 

如果先关ASM,再关数据库,这样很危险。

SQL> startup;

ASM instance started

 

Total System Global Area 1135747072 bytes

Fixed Size     2260728 bytes

Variable Size  1108320520 bytes

ASM Cache    25165824 bytes

ASM diskgroups mountedASM将数据库磁盘挂载好了,可以通过ASM来读取数据了)。