Oracle ASM发展与实践

简介:

更多精彩内容尽在www.leonarding.com

Oracle ASM发展与实践

1.说说你个人理解的存储解决方案的发展趋势。
Oracle 7&8 :这个时期的数据库备份方案已经可以使用RMAN 命令,它起源于Oracle 版本87的时候还不具备这个功能。可以把数据存储在操作系统的文件系统上和裸设备上。一提到裸设备可能刚进入DBA行当的朋友们不是很熟悉,下面随便简单介绍一下吧。
裸设备:我们把这三个字分开说吧,设备就是指的物理磁盘,像老一点的IDE磁盘,现在常用的SCSI磁盘SAS磁盘等。裸指的是这个磁盘上没有文件系统,一般磁盘在插入到主板上后必须为其创建文件系统(windows ext2&3&4)并格式化才能使用,但oracle可以不通过文件系统直接访问一块裸设备(要先创建为物理卷)这种直接访问设备的方式给我们提供了一定的便捷(不需要操作系统层处理可直接与设备进行数据交换,提高了交换速度),但同时带来的弊端也是显而易见的,例如不好管理,必须每个文件单独创建一个裸设备,非常麻烦,复制和备份也不方便。其实裸设备还是没有真正的绕过操作系统,因为它需要通过由操作系统驱动的设备接口而访问设备。Linux中有一种dd命令可以分配和管理裸设备,还是没有文件系统方便。


Oracle 9i&10gOracle9i开始开发出一套自己的文件系统叫ASM,中文叫“自动存储管理系统”,可以通过ASMCMD工具来管理,它可以不受操作系统层参数的影响直接处理磁盘上的数据,效率要比操作系统层处理一遍的高。层次越多开销越大层次越少开销越小,流行于Oracle 10g
ASM是由AUallocationunit)和条带来决定数据分布单元的,如何存储分配。
AU:磁盘分配单元,数据存储的一个基本单位,默认1M,建议大一点
例如AU=2M  单次I/O=1M,需要2次连续I/O才能读出一个AU
    AU=1M 单次I/O=2M1次分散IO读出两个AU,但是连续的比分散的I/O效率高
条带宽度:默认,建议条带宽带与磁盘数相匹配最好
条带大小:可以自由指定 1M 512k 256k
条带总大小=条带宽度*条带大小
AU小条带场景:适合在大并发插入中表现较好,可有助于分散热点块,缺点连续性不够
AU大条带场景:适合在非大并发插入的情况下都可以使用,适合绝大多数场景


Oracle 11g:出现了ASMOCFSOracle Cluster File System)并存的局面,OCFS叫做“Oracle 集群文件系统”用的最多就是RAC模式下,11gRAC模式下要不使用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)这张图画了 2Oracle实例,连接 1ASM实例, ASM实例挂载了 3个磁盘组
21ASM实例可以为多个 Oracle实例提供服务的,同时可以挂载多个磁盘组,例如 Disk Group A 存放数据文件, Disk Group B 存放归档日志文件, Disk Group C 存放 CRS文件和 Voting disk文件。磁盘组类似于操作系统的逻辑卷,可以根据用途进行划分
3Oracle实例把数据先传到 ASM实例上就不用管了, ASM再把数据按用途分配到各自的磁盘组上,并且是以打散的状态平均分散到每个磁盘上,目的就是分散热点块并行读取提高 I/O效率
4css集群同步服务进程就是负责 ASM实例与 Oracle实例相互通信的
5)启动 ASM实例后再启动数据库实例,先关闭数据库实例后再关闭 ASM实例
6)我们可以方便的给 ASM磁盘组添加一块磁盘,如果磁盘组损坏我们还可以删除一个磁盘组
7ASM数据分为“元数据”“真正数据”,元数据描述对象的字典信息,就是物理磁盘信息 例如 块大小  AU大小 条带宽度 数据分布情况 平衡情况 冗余情况等。并且在再平衡时“元数据”和“数据”都会移动
8ASM可以自动条带化,均衡负载,各个磁盘保持数据的均匀,可以游刃有余管理不同大小的磁盘

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_SIZEASM块大小默认为 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启动时间: 41913点启动
状态: 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实例故障
RBLADISKGROUPREBALANCE的后台进程,该进程一旦有故障,将导致 ASM实例宕机
DBWn:与 RDBMSdbwriter类似,将 ASM CACHE中脏数据写回磁盘
MMAN:与自动 SGA管理有关,负责自动管理 SGA
SMON:系统监控进程,监控 ASM实例的状态,一个 ASM实例只有一个 SMON进程
CKPT:检查点进程,触发 ASM检查点写脏数据的
GMON:磁盘组监控进程,用于磁盘组状态监控和状态表维护。
DIAGASM诊断进程,用于诊断 ASM告警
LGRW:写 redolog进程,凡是块更改就会触发进程写 redo信息
MMONASM缓冲区自动调整进程
VKTM:用于执行 online磁盘的临时任务进程

ASM  磁盘组  ASMCMD  存储解决方案 监视器 后台进程


 本文转自 ztfriend 51CTO博客,原文链接:http://blog.51cto.com/leonarding/1183250 ,如需转载请自行联系原作者

相关文章
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
870 2
|
运维 Kubernetes 网络协议
基于虚拟服务配置的渐进式迁移实践:Istio集群至ASM集群的平滑切换
本文介绍了从Istio+k8s环境迁移到阿里云ASM+ACK环境的渐进式方法,通过配置虚拟服务和入口服务实现新老集群间的服务调用与流量转发,确保业务连续性与平滑迁移
956 132
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
人工智能 自然语言处理 运维
站酷基于服务网格 ASM 的生产实践
随着站酷业务服务的持续改造,将持续基于阿里云服务网格 ASM 产品,获得更加丰富便捷的企业级特性,助力降本增效。
340 76
站酷基于服务网格 ASM 的生产实践
|
负载均衡 测试技术 网络安全
阿里云服务网格ASM多集群实践(一)多集群管理概述
服务网格多集群管理网络打通和部署模式的多种最佳实践
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。

推荐镜像

更多