一、ASM磁盘组功能
ASM(Automatic Storage Management),自动存储管理,用于保存和管理数据库相关的文件和磁盘。其中,卷管理器(Volume Manage)部分主要负责实现磁盘的条带化和冗余功能,而文件系统是为数据库相关的文件提供文件管理。
关键词:条带化和冗余功能
条带化(striping):当多个进程同时访问一个磁盘时,可能会出现磁盘冲突。 条带化技术就是一种自动的将 I/O 的负载均衡到多个物理磁盘上的技术,将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。很多操作系统、磁盘设备供应商、各种第三方软件都能做到条带化。
推荐这个博客,解释的很详细 https://blog.csdn.net/jlds123/article/details/11813313
冗余功能:简单来说,就是镜像备份,DATA磁盘组、ARCH磁盘组、REDO磁盘组的冗余级别分别是外部冗余(External)、普通冗余(Normal)、高冗余( High)对比磁盘个数 1、2、3
OCR磁盘组的冗余级别是外部冗余(External)、普通冗余(Normal)、高冗余( High)对比磁盘个数 1、3、5
二、磁盘组
基本概念和术语
磁盘:ASM需要管理的设备,可以是一块具体的物理磁盘、或是某一块磁盘上的分区、或是NFS文件系统
磁盘组:由若干块磁盘组成的一个逻辑整体。磁盘组是ASM组织磁盘和管理磁盘的方式,每个磁盘的元数据(Meta Data)中都会包含自己所在的磁盘组信息,而ASM通过磁盘组的方式管理每一块磁盘,了解他们的空间使用状况,并且把空间分配给具体的数据库文件。
ASM文件:保存在ASM磁盘组上的数据组织形式,是一个逻辑概念。
AU(Allocate Unit):分配单元,是ASM分配空间的最小单位,类似于数据库中的块(block),每个磁盘组可以根据自己的的需要去指定AU大小,默认AU尺寸是1M,可以通过查询语句 select group_number,name,sector_size,block_size,allocation_unit_size from v$asm_diskgroup; 中的allocation_unit_size来查看AU值,另外,AU的尺寸应该是数据库块(db_block_size)的整数倍。
该值受隐藏参数控制:_asm_ausize
Extent: 扩展,由若干个分配单元(AU)构成的集合,每个Extent只能保存在同一个ASM磁盘中,而且只能属于一个ASM文件,Extent是ASM磁盘组分配空间的单位,等同于数据库层面的Extent概念。对于ASM层面的Extent,它的大小是固定的。可以参考以下表格
Extent数量 | Extent大小 |
<20000 | 1个AU |
20000 ~ 39999 | 4个AU |
40000 | 16个AU |
关键词:NFS和NAS
NFS:网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
NAS:NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。目前国际著名的NAS企业有Netapp、EMC、OUO等。
2、磁盘组结构
![]()
一个磁盘组可以包括一个或者多个磁盘,其中涉及的磁盘生成ASM文件,然后一个ASM文件由一个或者多个Extent组成,Extent由一个或者多个AU组成。
一块或者多块物理磁盘构成了磁盘组,而磁盘组中可以保存ASM文件;ASM文件用户保存数据库文件,每个ASM文件可以跨多个ASM磁盘,但是不能跨磁盘组;每个ASM文件包含了若干个Extent,Extent是数据库或者其他客户端向ASM申请空间的单位;每块Extent是由一个或者多个AU构成的,AU是ASM分配空间的最小单位。
他们之间的关系由下图所示
![]()
3.数据冗余和条带化
(1)条带化
条带化的作用是把数据平均的分配到磁盘组的各个磁盘,并降低I/O操作的延时。而根据文件类型的不同,I/O请求的数据量大小也不尽相同。分为两种类型
1)细粒度条带化:这种条带化的粒度是128KB
2)粗粒度条带化:这种条带化的粒度是1M
文件类型 | 条带化类型 |
控制文件 | 细粒度条带化 |
数据文件 | 粗粒度条带化 |
联机重做日志文件 | 细粒度条带化 |
归档日志文件 | 粗粒度条带化 |
RMAN备份集 | 粗粒度条带化 |
临时文件 | 粗粒度条带化 |
初始化参数文件 | 粗粒度条带化 |
| 闪回日志文件 | 粗粒度条带化 |
控制文件自动备份 | 粗粒度条带化 |
OCR | 粗粒度条带化 |
两种条带化方式,Oracle都采用类似于 round-robin(循环)的方式分配空间(实际上是通过PST来计算的,PST是啥?)。
一块包含了四块磁盘的磁盘组,需要保存4M的数据。如果使用了细粒度的条带化尺寸,就会在每个磁盘上分配一个Extent,之后以128KB为单位顺序的向每个磁盘写入数据;如果使用了粗粒度的条带化尺寸,就会在每个磁盘上分配一个Extent,但是会以1MB为单位向磁盘中写入数据。
![]()
.png)
可以看到,Oracle分配数据的方式是尽量将数据平均分布到磁盘组中的所有磁盘中去。这与传统的RAID方式是完全不同的。这种数据分布的方式无论是读取还是写入,效率都比传统的RAID高很多。当然,这种数据分布的方式也要求磁盘组中的每一块磁盘大小都应该相同。
问题:为何 控制文件 和 联机重做日志文件是细粒度条带化类型,其他数据文件都是粗粒度条带化类型
RIAD的定义是什么,分为几种方式
磁盘组中的每一块磁盘大小都应该相同,不同会怎么样
(2)冗余
冗余功能:简单来说,就是镜像备份,DATA磁盘组、ARCH磁盘组、REDO磁盘组的冗余级别分别是外部冗余(External)、普通冗余(Normal)、高冗余( High)对比磁盘个数 1、2、3
OCR磁盘组的冗余级别是外部冗余(External)、普通冗余(Normal)、高冗余( High)对比磁盘个数 1、3、5
4.Rebalance
由于ASM磁盘组中的数据是均匀分布在每一块磁盘上的,当磁盘组的磁盘成员列表发生改变时,(例如:某一块磁盘出现问题被删除、磁盘组添加了新的磁盘等),数据就需要重新分布,以确保数据能够均匀的分布在每一块磁盘上。rebalance的过程实际上就是数据重新分布(或者叫数据重新平衡的过程)。rebalance需要注意以下几点
1)默认情况下,rebalance过程会在磁盘成员列表发生变化时自动触发,但是也可以通过手动方式触发。
问题:为什么会自动触发?
因为asm实例有个参数是 asm_power_limit,他的参数范围是 0 -11,如果是0就需要手动方式触发( alter diskgroup FRADG rebalance;),如果是1以上,就会自动触发,可以进行修改
![]()
2)rebalance是在磁盘组级别进行的,而且每个磁盘组同时只能有一个ASM实例对其进行rebalance操作。
3)在磁盘组内部,rebalance是以文件为单位的,换句话说ASM保证的数据均匀分布是指每个ASM文件上的数据会被平均分布到磁盘组所有的磁盘上。
4)rebalance操作的时间长短和 I/O开销取决于需要移动的数据多少,以及并发进程数量的多少。
5)用户可以根据需要暂停运行中的rebalance操作,在恢复之后rebalance会从暂停的位置继续运行,而不是重新开始一个新的rebalance
问题:如果某个磁盘组替换其中一个磁盘,比如说先添加一个磁盘,再删除一个磁盘,那么需不需要等待添加磁盘的平衡时间结束,再剔除以前的磁盘?如果我不等平衡结束,直接剔除,会怎么样?告知你有数据还在然后数据库出面阻止?还是直接剔除,留下隐患丢失数据? select * from v$asm_operation;
三、ASM实例
ASM实例是Oracle实现对ASM磁盘组和磁盘管理的方式。他的结构和普通数据库的实例是一致的。由内存结构和后台进程构成。其中内存结构由SGA和PGA构成,主要负责保存ASM磁盘相关的定义以及磁盘组的元数据,而后台进程负责管理这些ASM的元数据,并与数据库实例的进程进行通信,为数据库提供存储服务。但是,ASM实例要完成的工作比数据库简单一些,因为它只需要管理ASM的元数据。
1、初始化参数文件
ASM实例只负责管理ASM的元数据,参数文件中只包含实例和磁盘组相关的参数。默认情况下,ASM的初始化参数也是保存在ASM磁盘组上的,而具体的初始化参数文件位置可以从gpnp profile中找到。
SPFile="+OCR/rac-cluster/asmparameterfile/registry.253.1084303931
![]()
问题:gpnptool get 干嘛用的?存储什么信息?隐约感觉和某个集群参数有关?
ASM实例初始化参数
(Oracle Rac核心技术详解建议)
1)Memory_target ,自动内存管理(Automatic Memory Management,AMM),这个参数定义SGA和PGA的尺寸。由于ASm实例负责管理ASM磁盘组的元数据的实例,很少会有用户登录。
Oracle建议配置MEMORY_TARGET,由Oracle自动管理SGA和PGA的大小。一般系统建议配置 1536M。如果在ASM实例中出现了ORA-04031错误的话,可以酌情扩大参数值。
(Oracle Database 12C DBA官方手册 第八版)
服务器内存128G以下,Asm实例内存只需要占用 100M~150M
服务器内存128G以上(包括),建议Asm实例参数值设置为
SGA_TARGET=1250M(ASMM)
PGA_AGGREGATE_TARGET=400M
MEMORY_TARGET=0 或不设置(无AMM)
数据库集群ASM默认设置
sga_max_size = 1088M
sga_target = 0
pga_aggregate_target = 0
memory_max_target = 1076M
memory_target = 1076M
2)processes:(Oracle Rac核心技术详解建议)建议配置150就够用
3)instance_type:定义实例的类型,ASM实例的参数默认值是asm,oracle实例的默认是RDBMS
4)asm_diskstring:指定了ASM实例搜索磁盘的路径。他支持设置多个搜索路径。
NAME TYPE VALUE
------------------------- ----------- ------------------------------
asm_diskstring string /dev/asm*
5)asm_diskgroups:指定了ASM实例启动后,会自动启动哪些磁盘组(OCR不算在里面吗?)
SQL> show parameter asm_diskgroups
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskgroups string DATA, ARCH, REDO1, REDO2
6)ASM_POWER_LIMIT:指定了磁盘组在进行rebalance时的并发度。设置为0,磁盘组的成员发生改变时,rebalance不会自动发生,需要DBA手动发起。值越高意味rebalance的并发程度越高,对生产环境的影响越大,从11.2.0.2版本(这里指的是数据库版本还是asm版本无法确认,但是我的Oracle Rac 11R2)开始,这个值最大可以设置为1024,范围值为 0-1024。
查看你的磁盘组兼容参数
select dg.name as diskgroup,
substr(a.name, 1, 18) as name,
substr(a.value, 1, 24) as value
from v$asm_diskgroup_stat dg, v$asm_attribute a
where dg.name = 'DATA'
and dg.group_number = a.group_number
and a.name not like 'template%';
11g asm的参数
![]()
19C asm的参数
![]()
我曾在DBA群里,看见有人问过这个问题,19c的asm已经搭建完成并且划出dg 现在用11的库能否使用19的asm dg(磁盘组) 如果要用的话怎么用,答案就是 asm磁盘组的兼容参数,这个实验就可以留在下次做了
2、内存结构
ASM实例内存的内存结构和数据库实例基本相同,由SGA和PGA构成。其中SGA包括共享池(Shared_pool)、数据缓冲池(Buffer Cache)、大池(Large Pool)等
![]()
3、后台进程
ASM实例需要完成对磁盘组和ASM元数据的管理,存在的特有的后台进程,如下
gmon(ASM Disk Group Monitor):磁盘组监控进程。这个进程负责维护磁盘组中的各个磁盘一致性。当磁盘组中的磁盘成员发生改变时(如添加、删除磁盘,或者磁盘组出现故障),该进程负责离线(Offline)或者上线(Online)磁盘组。这是ASM实例中最重要的后台进程之一。
rbal(ASM Rebalance Master):Rebalance主进程,主要负责协调磁盘组的Rebalance操作。具体的平衡磁盘组Extent的操作由arbn进程完成的。在数据库实例中也存在rbal进程,但是它的功能和ASM实例中的rbal是不同的。数据库实例中的rbal进程负责为数据库管理ASM磁盘。
asmb:该进程负责和ASM实例进行通信,并且为ASM的客户(amcmd,数据库、ocr)提供连接ASM实例的信息
4、ASM实例启动进程
asm实例启动过程
1、从 gpnp profile中读取asm的初始化参数文件,获得启动实例所必须的参数
2、根据参数文件中的设置分配SGA并启动后台进程
3、根据初始化参数asm_diskstring指定的位置检索磁盘,挂载ASM磁盘组
以下是ASM实例的alter.log日志
=========ASM实例被启动,而且根据gpnp profile中的信息找到了集群的网络信息(主要是集群私网)
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Initial number of CPU is 1
Number of processor cores in the system is 1
Number of processor sockets in the system is 1
Private Interface 'eth0' configured from GPnP for use as a private interconnect.
[name='eth0', type=1, ip=192.168.19.10, mac=00-0c-29-6e-2c-22, net=192.168.19.0/24, mask=255.255.255.0, use=cluster_interconnect/6]
Public Interface 'eth1' configured from GPnP for use as a public interface.
[name='eth1', type=1, ip=192.168.72.80, mac=00-0c-29-6e-2c-2c, net=192.168.72.0/24, mask=255.255.255.0, use=public/1]
=======================ASM初始化参数文件被发现
Starting up:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options.
ORACLE_HOME = /u01/app/11.2.0/grid
System name: Linux
Node name: rac1
Release: 2.6.32-696.el6.x86_64
Version: #1 SMP Tue Feb 21 00:53:17 EST 2017
Machine: x86_64
VM name: VMWare Version: 6
Using parameter settings in server-side spfile +OCR/rac-cluster/asmparameterfile/registry.253.1084303931
=====================ASM实例初始化参数被读取,而且使用了HAIP和集群中的其他ASM实例进行通信
System parameters with non-default values:
large_pool_size = 12M
instance_type = "asm"
remote_login_passwordfile= "EXCLUSIVE"
asm_diskstring = "/dev/asm*"
asm_power_limit = 1
diagnostic_dest = "/u01/app/grid"
Cluster communication is configured to use the following interface(s) for this instance
169.254.138.24
cluster interconnect IPC version:Oracle UDP/IP (generic)
(其实从这可发现数据库两个节点的交流方式,有UDP和IP,这是开启防火墙的关键点)
====================ASM实例的后台进程被启动
Sun Sep 26 19:34:49 2021
PMON started with pid=2, OS id=49714
Sun Sep 26 19:34:49 2021
PSP0 started with pid=3, OS id=49716
Sun Sep 26 19:34:50 2021
VKTM started with pid=4, OS id=49718 at elevated priority
VKTM running at (1)millisec precision with DBRM quantum (100)ms
Sun Sep 26 19:34:50 2021
GEN0 started with pid=5, OS id=49722
Sun Sep 26 19:34:50 2021
DIAG started with pid=6, OS id=49724
Sun Sep 26 19:34:50 2021
PING started with pid=7, OS id=49726
Sun Sep 26 19:34:50 2021
DIA0 started with pid=8, OS id=49728
Sun Sep 26 19:34:50 2021
LMON started with pid=9, OS id=49730
Sun Sep 26 19:34:50 2021
LMD0 started with pid=10, OS id=49732
* Load Monitor used for high load check
* New Low - High Load Threshold Range = [960 - 1280]
Sun Sep 26 19:34:50 2021
LMS0 started with pid=11, OS id=49734 at elevated priority
Sun Sep 26 19:34:50 2021
LMHB started with pid=12, OS id=49738
Sun Sep 26 19:34:50 2021
MMAN started with pid=13, OS id=49740
Sun Sep 26 19:34:50 2021
DBW0 started with pid=14, OS id=49742
Sun Sep 26 19:34:50 2021
LGWR started with pid=15, OS id=49744
Sun Sep 26 19:34:50 2021
CKPT started with pid=16, OS id=49748
Sun Sep 26 19:34:50 2021
SMON started with pid=17, OS id=49750
Sun Sep 26 19:34:50 2021
RBAL started with pid=18, OS id=49752
Sun Sep 26 19:34:50 2021
GMON started with pid=19, OS id=49754
Sun Sep 26 19:34:50 2021
MMON started with pid=20, OS id=49756
Sun Sep 26 19:34:50 2021
MMNL started with pid=21, OS id=49758
(奇怪,我没找到ASMB进程,找到了,在别的地方,为啥不在一块?)
======================实例级别的 Reconfiguration(重配置) 结束
Reconfiguration started (old inc 0, new inc 2)
ASM instance
List of instances:
1 (myinst: 1)
Global Resource Directory frozen
* allocate domain 0, invalid = TRUE
Communication channels reestablished
Master broadcasted resource hash value bitmaps
Non-local Process blocks cleaned out
LMS 0: 0 GCS shadows cancelled, 0 closed, 0 Xw survived
Set master node info
Submitted all remote-enqueue requests
Dwn-cvts replayed, VALBLKs dubious
All grantable enqueues granted
Post SMON to start 1st pass IR
Submitted all GCS remote-cache requests
Post SMON to start 1st pass IR
Fix write in gcs resources
Reconfiguration complete
====================================ASM实例启动以后,开始挂载磁盘组,可以看到ASM实例会尝试挂载所有发现的磁盘组。
Sun Sep 26 19:34:50 2021
LCK0 started with pid=22, OS id=49760
ORACLE_BASE not set in environment. It is recommended
that ORACLE_BASE be set in the environment
Sun Sep 26 19:34:51 2021
SQL> ALTER DISKGROUP ALL MOUNT /* asm agent call crs *//* {0:0:155} */
NOTE: Diskgroup used for Voting files is:
OCR
Diskgroup with spfile:OCR
Diskgroup used for OCR is:OCR
======================================注意NOTE,这些是磁盘组被挂载
SQL> CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK '/dev/asm-data' SIZE 512000M ATTRIBUTE 'compatible.asm'='11.2.0.0.0','au_size'='1M' /* ASMCA */
NOTE: Assigning number (2,0) to disk (/dev/asm-data)
NOTE: initializing header on grp 2 disk DATA_0000
NOTE: initiating PST update: grp = 2
Fri May 14 10:28:32 2021
GMON updating group 2 at 5 for pid 27, osid 16194
NOTE: group DATA: initial PST location: disk 0000 (PST copy 0)
NOTE: PST update grp = 2 completed successfully
NOTE: cache registered group DATA number=2 incarn=0x958d62ee
NOTE: cache began mount (first) of group DATA number=2 incarn=0x958d62ee
NOTE: cache opening disk 0 of grp 2: DATA_0000 path:/dev/asm-data
Fri May 14 10:28:32 2021
* allocate domain 2, invalid = TRUE
kjbdomatt send to inst 2
Fri May 14 10:28:32 2021
NOTE: attached to recovery domain 2
NOTE: cache creating group 2/0x958D62EE (DATA)
NOTE: cache mounting group 2/0x958D62EE (DATA) succeeded
NOTE: allocating F1X0 on grp 2 disk DATA_0000
NOTE: Created Used Space Directory for 1 threads
NOTE: diskgroup must now be re-mounted prior to first use
NOTE: cache dismounting (clean) group 2/0x958D62EE (DATA)
NOTE: messaging CKPT to quiesce pins Unix process pid: 16194, image: oracle@qhxsrac11 (TNS V1-V3)
NOTE: lgwr not being msg'd to dismount
kjbdomdet send to inst 2
detach from dom 2, sending detach message to inst 2
freeing rdom 2
NOTE: detached from domain 2
NOTE: cache dismounted group 2/0x958D62EE (DATA)
GMON dismounting group 2 at 6 for pid 27, osid 16194
GMON dismounting group 2 at 7 for pid 27, osid 16194
NOTE: Disk DATA_0000 in mode 0x7e marked for de-assignment
SUCCESS: diskgroup DATA was created
NOTE: cache deleting context for group DATA 2/0x958d62ee
NOTE: cache registered group DATA number=2 incarn=0xab7d62f0
NOTE: cache began mount (first) of group DATA number=2 incarn=0xab7d62f0
NOTE: Assigning number (2,0) to disk (/dev/asm-data)
NOTE: GMON heartbeating for grp 2
GMON querying group 2 at 10 for pid 27, osid 16194
NOTE: cache opening disk 0 of grp 2: DATA_0000 path:/dev/asm-data
NOTE: F1X0 found on disk 0 au 2 fcn 0.0
NOTE: cache mounting (first) external redundancy group 2/0xAB7D62F0 (DATA)
* allocate domain 2, invalid = TRUE
kjbdomatt send to inst 2
NOTE: attached to recovery domain 2
NOTE: cache recovered group 2 to fcn 0.0
NOTE: redo buffer size is 256 blocks (1053184 bytes)
Fri May 14 10:28:41 2021
NOTE: LGWR attempting to mount thread 1 for diskgroup 2 (DATA)
三、数据库和ASM实例通信
暂时不讲(因为没看懂)
四、OCR/VF和ASM磁盘组
Oracle推荐把集群的重要组件OCR和VF保存到ASM磁盘中,以便使OCR和VF能够使用ASM的特性(冗余和条带化。对于OCR和VF,他们会被保存到相同的磁盘组,根据磁盘的冗余成都,OCR和VF会保存多个副本。
OCR磁盘组的冗余级别是外部冗余(External)、普通冗余(Normal)、高冗余( High)对比磁盘个数 1、3、5
1、存放方式
OCR相当于集群的控制文件,保存了集群中绝大部分资源的配置信息,而且OCR采用树形结构,并没有类似于数据文件的块的概念。VF的作用是实现集群的磁盘心跳,并且在集群出现脑裂的时候提供解决方案。而且ocssd守护进程在访问VF时ASM实例还没有启动。
磁盘组会分配连续的空间用于保存OCR和VF,也就是说OCR和VF的信息不会分布到多块磁盘上,如果用一块磁盘保存OCR和VF的话,一定会保存完整的OCR和VF信息。
1.VF
可以用 以下命令找到VF所在的磁盘
[grid@rac1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE a4114a4c51d04f68bf5d4ad5e799aac4 (/dev/asm-ocr1) [OCR]
2. ONLINE 2284955d0e024ffbbf4ca8a4db05d473 (/dev/asm-ocr2) [OCR]
3. ONLINE 53956945403c4fcabf6dc1386a35cd45 (/dev/asm-ocr3) [OCR]
Located 3 voting disk(s).
使用KFED命令找到VF所在的位置
[grid@rac1 ~]$ kfed read /dev/asm-ocr1
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
........................................
kfdhdb.dskname: OCR_0000 ; 0x028: length=8
kfdhdb.grpname: OCR ; 0x048: length=3
kfdhdb.fgname: OCR_0000 ; 0x068: length=8
.......................................
kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000
.......................................
kfdhdb.vfstart: 256 ; 0x0ec: 0x00000100
kfdhdb.vfend: 288 ; 0x0f0: 0x00000120
上面的信息说明,磁盘名称叫 OCR_0000,对应的磁盘组名称是 OCR,VF的起始位置为 256 AU,VF的结束位置是 288AU,AU的大小是 1MB
2.OCR
使用ocrcheck命令找到OCR所在的磁盘组
[grid@rac1 tmp]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 3132
Available space (kbytes) : 258988
ID : 1056507816
Device/File Name : +OCR
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
根据以上信息可知,OCR一共占用了 262120 KB (约 256M)空间,其中使用了 3132 KB(约3M)。
select f.group_number, f.file_number, a.name, f.type, f.REDUNDANCY
from v$asm_file f, v$asm_alias a
where a.file_number = f.file_number
and a.group_number = f.group_number
and f.type = 'OCRFILE';
![]()
OCR的文件编号是 255,类型是 OCRFILE,被保存在磁盘组1中,而且数据有镜像。
可以通过以下sql语句查看OCR所包含的具体AU(需要在ASM实例上运行)
select k.NUMBER_KFFXP,d.name,k.AU_KFFXP
from X$KFFXP k, v$asm_disk d
where k.DISK_KFFXP = d.DISK_NUMBER
and d.GROUP_NUMBER = 1
and k.NUMBER_KFFXP = 255
order by k.AU_KFFXP;
NUMBER_KFFXP NAME AU_KFFXP
------------ ------------------------------ ----------
255 OCR_0002 59
255 OCR_0002 60
255 OCR_0001 60
.......................................................................................
255 OCR_0001 233
255 OCR_0000 233
255 OCR_0000 234
255 OCR_0001 234
可以看到,OCR对应的AU从59号开始,到234号结束,而且位于OCR_0000、OCR_0001、OCR_0002三个磁盘上
========================================================================================
一些觉得有用的小知识(后边的略微潦草,不用观看)
1、ASM磁盘组只能处于NO MOUNT和MOUNT状态,绝对不可能处于OPEN状态
2、sysasm权限连接操作磁盘组 sqlplus / as sysasm
3、SYSASM权限连接到ASM实例的用户可执行所有的ASM操作,创建和删除磁盘组,向磁盘组中添加磁盘和从磁盘组中删除磁盘。
Oracle11g和12c中,SYSDBA权限的用户仍可以与拥有SYSASM权限的用户一样执行相同的任务,但该角色不建议使用,未来版本中,将不再拥有与SYSASM相同的权限(但是我测试SYSDBA没法操作ASM的相关操作)
========这个参数好像是指定数据库磁盘组的故障组(不懂)
show parameter asm_preferred_read_failure_groups
这个是改的参数,但是没用过
alter diskgroup DATA01 set attribute 'compatible.rdbms'='11.2.0';
常用
select * from v$asm_disk
select * from v$asm_diskgroup
不常用且不懂意思
select * from v$asm_file
select * from v$asm_operation
select * from v$asm_template
select * from v$asm_alias
磁盘组版本
select * from v$asm_client
镜像冗余这个还是不太懂
常用语句
select group_number,disk_number,name,failgroup,create_date,path from v$asm_disk;
select group_number,name,type,total_mb/1024,free_mb/1024 from v$asm_diskgroup;
select a.group_number,
a.NAME,
b.FAILGROUP,
a.TYPE,
a.TOTAL_MB / 1024,
a.FREE_MB / 1024,
round((a.TOTAL_MB - a.FREE_MB)/a.TOTAL_MB*100,2) || '%'
from v$asm_diskgroup a, v$asm_disk b
where a.group_number = b.group_number;




