首页 > 代码库 > 【转载】Oracle ASM
【转载】Oracle ASM
1.说说你个人理解的存储解决方案的发展趋势。
Oracle 7&8 :这个时期的数据库备份方案已经可以使用RMAN 命令,它起源于Oracle 版本8,7的时候还不具备这个功能。可以把数据存储在操作系统的文件系统上和裸设备上。一提到裸设备可能刚进入DBA行当的朋友们不是很熟悉,下面随便简单介绍一下吧。
裸设备:我们把这三个字分开说吧,设备就是指的物理磁盘,像老一点的IDE磁盘,现在常用的SCSI磁盘SAS磁盘等。裸指的是这个磁盘上没有文件系统,一般磁盘在插入到主板上后必须为其创建文件系统(windows ext2&3&4)并格式化才能使用,但oracle可以不通过文件系统直接访问一块裸设备(要先创建为物理卷)这种直接访问设备的方式给我们提供了一定的便捷(不需要操作系统层处理可直接与设备进行数据交换,提高了交换速度),但同时带来的弊端也是显而易见的,例如不好管理,必须每个文件单独创建一个裸设备,非常麻烦,复制和备份也不方便。其实裸设备还是没有真正的绕过操作系统,因为它需要通过由操作系统驱动的设备接口而访问设备。Linux中有一种dd命令可以分配和管理裸设备,还是没有文件系统方便。
Oracle 9i&10g:Oracle9i开始开发出一套自己的文件系统叫ASM,中文叫“自动存储管理系统”,可以通过ASMCMD工具来管理,它可以不受操作系统层参数的影响直接处理磁盘上的数据,效率要比操作系统层处理一遍的高。层次越多开销越大 层次越少开销越小,流行于Oracle 10g
ASM是由AU(allocationunit)和条带来决定数据分布单元的,如何存储分配。
AU:磁盘分配单元,数据存储的一个基本单位,默认1M,建议大一点
例如AU=2M 单次I/O=1M,需要2次连续I/O才能读出一个AU
AU=1M 单次I/O=2M,1次分散IO读出两个AU,但是连续的比分散的I/O效率高
条带宽度:默认8 ,建议条带宽带与磁盘数相匹配最好
条带大小:可以自由指定 1M 512k 256k
条带总大小=条带宽度*条带大小
小AU小条带场景:适合在大并发插入中表现较好,可有助于分散热点块,缺点连续性不够
大AU大条带场景:适合在非大并发插入的情况下都可以使用,适合绝大多数场景
Oracle 11g:出现了ASM和OCFS(Oracle Cluster File System)并存的局面,OCFS叫做“Oracle 集群文件系统”用的最多就是RAC模式下,11g中RAC模式下要不使用ASM管理存储要不使用OCFS管理存储,已经不可以使用裸设备当共享存储了,切记切记。
注意:可能有的同学会说用Ext3&4也可以实现2台机器共享一个存储设备啊(NFS就可以),嗯是的你很聪明问到了这个问题,但这是操作系统层面的贡献,不是存储层面的贡献,而且也无法提供Oracle要求的共享访问模式
ASM 三种redundancy冗余模式
(1)外部冗余模式
ASM不提供数据冗余,由外部存储系统实现,例如 RAID技术
这是当前使用最多的方式,因为有了磁盘级别冗余,那么可以使用更多的磁盘空间来存放数据
(2)常规冗余模式
ASM提供2份镜像,会损失一半空间用于备份镜像,是extent级别冗余不是磁盘级别冗余,主备混合存放
(3)高冗余模式
ASM提供3份镜像,会损失2/3空间用于备份镜像,是extent级别冗余不是磁盘级别冗余,主备混合存放
小结:第一种方法使用的最多,后两种方法使用的最少。
2.画一张说明ASM实例同数据库实例协同工作的原理图,并给出语言描述。
直接使用word画图工具完成了一张简单的工作流程图,功力浅薄,望海涵
说明
(1)这张图画了2个Oracle实例,连接1个ASM实例,ASM实例挂载了3个磁盘组
(2)1个ASM实例可以为多个Oracle实例提供服务的,同时可以挂载多个磁盘组,例如Disk Group A 存放数据文件,Disk Group B 存放归档日志文件,Disk Group C 存放CRS文件和Voting disk文件。磁盘组类似于操作系统的逻辑卷,可以根据用途进行划分
(3)Oracle实例把数据先传到ASM实例上就不用管了,ASM再把数据按用途分配到各自的磁盘组上,并且是以打散的状态平均分散到每个磁盘上,目的就是分散热点块并行读取提高I/O效率
(4)css集群同步服务进程就是负责ASM实例与Oracle实例相互通信的
(5)启动ASM实例后再启动数据库实例,先关闭数据库实例后再关闭ASM实例
(6)我们可以方便的给ASM磁盘组添加一块磁盘,如果磁盘组损坏我们还可以删除一个磁盘组
(7)ASM数据分为“元数据”“真正数据”,元数据描述对象的字典信息,就是物理磁盘信息 例如 块大小 AU大小 条带宽度 数据分布情况 平衡情况 冗余情况等。并且在再平衡时“元数据”和“数据”都会移动
(8)ASM可以自动条带化,均衡负载,各个磁盘保持数据的均匀,可以游刃有余管理不同大小的磁盘
3.分别用视图方式和asmcmd方式,分别计算出你所用ASM管理的存储大小,使用空间和剩余空间数,写出计算过程。
文件系统作为存储模式:我们可以使用dba_tablespace来查看表空间的使用情况
ASM作为存储模式:我们可以使用v$asm_diskgroup查看数据文件的使用情况,因为文件块在ASM上都是平衡打散状态,你可以设置为数据文件自动扩展,然后只需观察磁盘组的增长情况即可
通过v$asm_diskgroup动态性能视图我们可以查询ASM磁盘组的状态
SQL> selectgroup_number,name,state,block_size,allocation_unit_size,total_mb,free_mb fromv$asm_diskgroup;
GROUP_NUMBER NAME STATE BLOCK_SIZE ALLOCATION_UNIT_SIZE TOTAL_MB FREE_MB
-------------------------------- -------------------- ---------- ----------
1 ARCH MOUNTED 4096 1048576 10228 10174
2 CRS MOUNTED 4096 1048576 5114 5055
3 DATA1 MOUNTED 4096 1048576 10228 10174
NAME:我们创建了三个磁盘组ARCH CRS DATA1
STATE:全部挂载
BLOCK_SIZE:ASM块大小默认为4k
ALLOCATION_UNIT_SIZE:磁盘分配单元默认为1M
TOTAL_MB:可用空间10G 5G 10G
FREE_MB:空闲空间10174 5055 10174
通过ASMCMD工具管理磁盘,因为ASM管理的是裸设备,在操作系统下是看不见的
ASMCMD> ls –lrt 罗列已创建磁盘组
WARNING:option ‘r‘is deprecated for ‘ls‘
please use ‘reverse‘
State Type Rebal Name
MOUNTED EXTERN N DATA1/
MOUNTED EXTERN N CRS/
MOUNTED EXTERN N ARCH/
状态已挂载,采用外部冗余,磁盘组名
ASMCMD> pwd 显示当前路径
+
ASMCMD> cddata1 进入data1磁盘组
ASMCMD> pwd 显示当前路径
+data1
ASMCMD> mkdirasm_leo1 在data1下创建一个asm_leo1目录
ASMCMD> ls
asm_leo1/
ASMCMD> rmasm_leo1 删除目录
ASMCMD> ls
ASMCMD> help 显示帮助信息
asmcmd [-vV] [-a <sysasm|sysdba>][-p] [command]
ASMCMD> lsct 显示有多少实例连接到ASM上
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 10228 10174 0 10174 0 N ARCH/
MOUNTED EXTERN N 512 4096 1048576 5114 5055 0 5055 0 N CRS/
MOUNTED EXTERN N 512 4096 1048576 10228 10174 0 10174 0 N DATA1/
Sector:磁盘扇区大小512
Usable_file_MB:可用文件大小10174 5055 10174
Offline_disks:离线磁盘没有
Voting_files:表决文件
我们从v$asm_disk这个视图中可以查看到ASM磁盘属性信息
v$asm_disk_stat 查看磁盘状态信息
v$asm_diskgroup 查看磁盘组属性信息
v$asm_diskgroup_stat查看磁盘组状态信息
v$asm_client 查看磁盘组管理ASM实例的DB实例的数据行
v$_asm_file 查看磁盘组中数据文件属性信息
v$_asm_operation 查看磁盘组操作信息
v$_asm_alias 查看安装的磁盘组别名信息
SQL> descv$asm_disk
Name Null? Type
------------------------------------------------- ----------------------------
GROUP_NUMBER NUMBER
DISK_NUMBER NUMBER
COMPOUND_INDEX NUMBER
INCARNATION NUMBER
MOUNT_STATUS VARCHAR2(7)
HEADER_STATUS VARCHAR2(12)
MODE_STATUS VARCHAR2(7)
STATE VARCHAR2(8)
小结:在Oracle实例中我们可以利用select table_name from dictionary wheretable_name like ‘%ASM%‘;
数据字典来检索ASM相关的所有视图。
4.查询asm实例正常情况下的运行状态(nomount,mount或者open),说一说为什么?ASM实例有控制文件吗?为什么?
ASM实例和DB实例的作用是一样的,也是由若干内存区和一组后台进程组成的,ASM实例启动后也是先分配内存区(asm_buffer_cache)加载后台进程。下面我们就来演示一下ASM实例启动过程
[grid@leonarding1bin]$ echo $ORACLE_SID 检查SID环境变量
+ASM
[grid@leonarding1bin]$ export ORACLE_SID=+ASM 如果没有设置我们可以这样设置一下
[grid@leonarding1bin]$ sqlplus / as sysasm
SQL*Plus: Release11.2.0.1.0 Production on Sun Apr 21 10:33:34 2013
Copyright (c)1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the AutomaticStorage Management option
SQL> select *from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux:Version 11.2.0.1.0 - Production
NLSRTL Version11.2.0.1.0 - Production
SQL> selectinstance_name,host_name,startup_time,status,archiver,database_status,loginsfrom v$instance;
INSTANCE_NAME HOST_NAME STARTUP_TIME STATUS ARCHIVER DATABASE_STATUS
LOGINS
--------------------------------------------------------------------------------------------------------------------------------------------
+ASM leonarding1.oracle.com 19-APR-13 STARTED STOPPED ACTIVE
ALLOWED
实例名:ASM 这里可以判断我们连接的是Oracle实例 还是ASM实例
主机名:leonarding1.oracle.com
ASM启动时间:4月19日13点启动
状态:nomount,分配内存区和加载后台进程
归档状态:没有开
数据库状态:激活
关闭ASM实例顺序:先关闭Oracle实例->再关闭ASM实例->先启动ASM实例->再启动Oracle实例
SQL> shutdownimmediate
ASM diskgroupsdismounted 卸载磁盘组
ASM instanceshutdown 关闭实例
[grid@leonarding1bin]$ ps -ef | grep asm | grep -v grep 后台进程已经没有了
[grid@leonarding1bin]$
[grid@leonarding1bin]$ sqlplus / as sysasm
SQL*Plus: Release11.2.0.1.0 Production on Sun Apr 21 11:11:31 2013
Copyright (c) 1982,2009, Oracle. All rights reserved.
Connectedto an idle instance. 一个空实例,我们来启动它
SQL>
SQL> startup
ASM instancestarted 实例启动,分配内存,磁盘挂载
Total SystemGlobal Area 283930624 bytes
Fixed Size 2212656 bytes
Variable Size 256552144 bytes
ASM Cache 25165824 bytes
ASM diskgroupsmounted
如果是Oracle实例那么后续肯定会有访问控制文件,打开数据文件的动作,而ASM实例启动没有这些动作,因为ASM只是管理磁盘组分配与平衡,不关注数据的一致性和数据库结构(也不存在实例一致性和检查点问题),逻辑上只做数据查询和抽取工作。所以ASM不需要控制文件和数据文件,只需分配内存区和启动后台进程ASM就可以工作了。
ASM需要参数文件
参数文件目录:/u02/app/11.2.0/grid/dbs
[grid@leonarding1bin]$ ps -ef | grep asm | grep -v grep
grid 14920 1 0 11:12 ? 00:00:00 asm_pmon_+ASM
grid 14924 1 0 11:12 ? 00:00:03 asm_vktm_+ASM
grid 14930 1 0 11:12 ? 00:00:00 asm_gen0_+ASM
grid 14934 1 0 11:12 ? 00:00:00 asm_diag_+ASM
grid 14938 1 0 11:12 ? 00:00:00 asm_psp0_+ASM
grid 14942 1 0 11:12 ? 00:00:00 asm_dia0_+ASM
grid 14946 1 0 11:12 ? 00:00:00 asm_mman_+ASM
grid 14950 1 0 11:12 ? 00:00:00 asm_dbw0_+ASM
grid 14954 1 0 11:12 ? 00:00:00 asm_lgwr_+ASM
grid 14958 1 0 11:12 ? 00:00:00 asm_ckpt_+ASM
grid 14962 1 0 11:12 ? 00:00:00 asm_smon_+ASM
grid 14966 1 0 11:12 ? 00:00:00 asm_rbal_+ASM
grid 14970 1 0 11:12 ? 00:00:00 asm_gmon_+ASM
grid 14974 1 0 11:12 ? 00:00:00 asm_mmon_+ASM
grid 14978 1 0 11:12 ? 00:00:00 asm_mmnl_+ASM
5.比较ASM实例和数据库实例在监听器中注册的状态,并说明原因。
ASM监听
[grid@leonarding1dbs]$ lsnrctl status
LSNRCTL for Linux:Version 11.2.0.1.0 - Production on 21-APR-2013 11:40:01
Copyright (c)1991, 2009, Oracle. All rights reserved.
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1522)))
STATUS of theLISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version11.2.0.1.0 - Production
Start Date 19-APR-2013 07:25:17
Uptime 2 days 4 hr. 14 min. 43 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener ParameterFile /u02/app/11.2.0/grid/network/admin/listener.ora
Listener LogFile /u02/app/grid/diag/tnslsnr/leonarding1/listener/alert/log.xml
ListeningEndpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leonarding1)(PORT=1522)))
ServicesSummary...
Service"+ASM" has 1 instance(s).
Instance "+ASM", status READY, has1 handler(s) for this service...
The commandcompleted successfully
这是ASM监听,ASM实例会自动注册到监听器中
Oracle监听
[oracle@leonarding1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-APR-2013 21:28:00
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 14-APR-2013 18:38:00
Uptime 3 days 2 hr. 50 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0.1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/leonarding1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leonarding1)(PORT=1521)))
Services Summary...
Service "LEO1" has 1 instance(s).
Instance "LEO1", status READY, has 1 handler(s) for this service...
Service "LEO1XDB" has 1 instance(s).
Instance "LEO1", status READY, has 1 handler(s) for this service...
The command completed successfully
Oracle监听也会自动注册到监听器中,它们分别使用不同的参数文件和日志文件
小结:一个监听器可以为多个实例服务(ASM实例和Oracle实例)
一个ASM实例也可以为多个数据库实例服务
一个CRS(集群注册服务)可以为几个数据库实例服务
6.看一下你的ASM的后台进程包含哪些,分别说说它们的用途。
查看ASM进程
[grid@leonarding1bin]$ ps -ef | grep asm | grep -v grep
grid 4039 1 0 19:43 ? 00:00:03 asm_pmon_+ASM
grid 4043 1 0 19:43 ? 00:01:13 asm_vktm_+ASM
grid 4049 1 0 19:43 ? 00:00:01 asm_gen0_+ASM
grid 4053 1 0 19:43 ? 00:00:01 asm_diag_+ASM
grid 4057 1 0 19:43 ? 00:00:01 asm_psp0_+ASM
grid 4061 1 0 19:43 ? 00:00:05 asm_dia0_+ASM
grid 4065 1 0 19:43 ? 00:00:01 asm_mman_+ASM
grid 4069 1 0 19:43 ? 00:00:02 asm_dbw0_+ASM
grid 4073 1 0 19:43 ? 00:00:01 asm_lgwr_+ASM
grid 4077 1 0 19:43 ? 00:00:02 asm_ckpt_+ASM
grid 4081 1 0 19:43 ? 00:00:00 asm_smon_+ASM
grid 4085 1 0 19:43 ? 00:00:03 asm_rbal_+ASM
grid 4089 1 0 19:43 ? 00:00:05 asm_gmon_+ASM
grid 4093 1 0 19:43 ? 00:00:02 asm_mmon_+ASM
grid 4097 1 0 19:43 ? 00:00:04 asm_mmnl_+ASM
解释:
PMON:进程监控进程,用于监控ASM实例进程,对异常进程进行报警保护
PSPn: 启动其他ASM实例进程,一旦有问题将导致ASM实例故障
RBLA:DISKGROUP做REBALANCE的后台进程,该进程一旦有故障,将导致ASM实例宕机
DBWn:与RDBMS的dbwriter类似,将ASM CACHE中脏数据写回磁盘
MMAN:与自动SGA管理有关,负责自动管理SGA。
SMON:系统监控进程,监控ASM实例的状态,一个ASM实例只有一个SMON进程
CKPT:检查点进程,触发ASM检查点写脏数据的
GMON:磁盘组监控进程,用于磁盘组状态监控和状态表维护。
DIAG:ASM诊断进程,用于诊断ASM告警
LGRW:写redolog进程,凡是块更改就会触发进程写redo信息
MMON:ASM缓冲区自动调整进程
VKTM:用于执行online磁盘的临时任务进程
ASM 磁盘组 ASMCMD 存储解决方案 监视器 后台进程
【转载】Oracle ASM