当前位置: 首页 > 工具软件 > ASM > 使用案例 >

ASM_基本知识

田成化
2023-12-01

自动存储管理:ASM(automatic storage management)
1.OMF(oracle managed files):在创建数据库时,或者在数据库运行的过程中,如果要创建表空间、重做日志文件、控制文件,可以把磁盘组指定为文件的存储位置。文件的名称和大小可以省略,oracle将利用自动文件管理功能创建并且管理这些文件。

2.ACFS(ASM CLUSTER FILE SYSTEM):ASFS是一种建立在ASM磁盘组中的跨平台、可扩展的集群文件系统,在这种文件系统中,可以存储oracle数据库软件的可执行文件、数据库的跟踪文件、警告文件、视频、音频等类型的文件。不能存储数据库文件,所有能存储在ASM磁盘组中的文件都不能存储在ACFS中。

3.安装GI时,OCR和voting 文件可以存储在ASM磁盘组中。安装oracle软件时,可以把软件存放在ASM磁盘组中的ACFS类型的文件系统中。在创建数据库时可以
把数据文件、控制文件和重做日志文件存放在ASM磁盘组中,而把数据库的跟踪文件、警告文件等存放在磁盘组中的ACFS类型的文件系统中。

ASM实例的创建
1.命令行创建ASM实例

ASM实例相关的初始化参数:
INSTANCE_TYPE:实例类型,设置为ASM

INSTANCE_NAME:ASM实例的名称在第一个节点上默认为+asm1以此类推

ASM_POWER_LIMIT:ASM实例的磁盘重新平衡的能力,默认为1,值为0表示禁用rebalance.较高的值对应reblance操作完成得更快,但是可能造成更高的I/O负载产生更多rebalance进程。

ASM_DISKSTRING:指定一个字符串,asm实例在创建磁盘组时按照这个字符串搜索可用的磁盘

ASM_DISKGROUPS:指定磁盘组的名称,ASM实例启动时将自动挂接这些磁盘组。如:ASM_DISKGROUPS=DATA,DG1

PROCESS :process初始化参数的设置影响asm实例,通常默认值是合适的。然而有多个数据库实例连接到一个ASM实例,可以参考以下原则修改process 参数值:
processes=50+50*n (n表示连接到ASM实例的数据库实例个数)

ASM初始化参数文件
1.使用ASM磁盘作为clusterware 磁盘文件存储方式的集群环境中,共享spfile 会被默认创建在磁盘组中。
2.spfile 默认存放在与OCR、表决磁盘文件相同的磁盘组中。
ASM实例查找初始化参数文件的顺序:
1.查找GPnP profile 中指定的初始化参数文件
2.在ASM软件home中查找SPFILE
3.在ASM软件home中查找PFILE

注意:R2开始,如果使用ASM作为OCR和表决磁盘的存储方式,那么SPFILE被存储在相同的ASM磁盘组中,同时节点指向该spfile 的信息被存储在GPnP profile 文件中。
srvctl对asm 实例进行控制:

srvctl status asm
srvctl stop asm
srvctl start asm

startup mount :加载在ASM_DISKGROUPS初始化参数中指定的磁盘组
startup nomount:启动ASM实例,不加载任何磁盘组

ASM磁盘组使用原则:
1.至少配置两个磁盘组,一个用于数据存储,一个作为快速闪回恢复区。
2.每个磁盘组推荐至少分配4个大小和性能都相同的LUN(ASM磁盘)
3.确保磁盘组中所有ASM磁盘有相似的存储性能和高可用特性。在混合速度的存储配置中,如:10000和15000RPM不同的磁盘转速的磁盘的性能是不同的,I/O的速度受到最低速度驱动器的限制
4.ASM数据的分配策略是基于容量的,确保磁盘组中的磁盘有相同的容量以维护数据在磁盘之间的均匀分布。
5.当使用高端存储阵列时,可创建外部冗余磁盘组。高端存储阵列通常提供硬件raid保护。当没有硬件raid保护时,或者需要基于主机的卷管理功能,那么推荐使用ASM镜像冗余功能。

磁盘组的管理:
磁盘组是指一组磁盘,oracle通过ASM技术将多个磁盘组织在一起,使它们作为一个整体向数据库提供存储空间,数据库中大部分类型的文件都可以存储在磁盘组上,就像使用一个单独的磁盘一样。asm实例负责对磁盘组进行挂接、读写、重新平衡等操作。

在数据库运行时,数据将平均分布在磁盘组的各个磁盘上。数据库管理员可以在不关闭数据库的情况下向磁盘组中添加新磁盘,或将磁盘从磁盘组中删除。在添加或删除磁盘时,ASM实例将重新平衡磁盘,也就是说,将数据重新平均分布在各个磁盘上。

为了获取最佳性能,在创建磁盘组时,应该将大小、性能相同或者相近的磁盘放在一个磁盘组中。如果磁盘的大小或性能差别较大,应该将他们放在不同的磁盘组中。

磁盘组的创建和删除:
在创建磁盘组时,需要为磁盘组指定一个名称,还要指定磁盘组中所包含的磁盘。为了防止磁盘组中的磁盘出现故障,可以为磁盘组指定为失败组,即镜像组
。同时需要指定磁盘组的冗余级别。普通冗余至少需要两个磁盘组互为镜像,高冗余至少需要三个互为镜像的磁盘组。实际上,由于这些磁盘组互为镜像,所以可以把他们都称为失败组。如果使用磁盘阵列中的raid盘,那么指定外部冗余就可以了。

创建磁盘组:

export oracle_sid=+ASM1
sqlplus / as sysasm
sql>create diskgroup dg1 normal redundancy
    failgroup fg1 disk '/dev/rhdisk3','/dev/rhdisk4',
    failgroup fg2 disk '/dev/rhdisk5','/dev/rhdisk6'
    ATTRIBUTE 'au_size'='4M';   ----使用attribute关键字指定磁盘组的属性,指定分配单元大小

//在创建磁盘组dg1时,为它指定了普通冗余级别,并指定了两个失败组,这两个失败组互为镜像,他们分别包含两个磁盘。磁盘组创建成功后,磁盘即被格式化为ASM磁盘。如果使用磁盘阵列中的raid盘,就不需要为磁盘组指定镜像了,也就是说,在磁盘组中只包含一个失败组。

sql>create diskgroup dg1 external redundancy disk '/dev/rhdisk4','/dev/rhdisk5'  

//创建一个磁盘组,为外部冗余

删除磁盘组:
删除磁盘组的操作很简单,在其中一个节点上执行删除操作,磁盘组将在所有节点上被删除,磁盘组中的所有文件将一并被删除。为了删除磁盘组,ASM实例
必须启动,磁盘组在执行删除操作的节点上必须被挂接,在其他所有节点必须被卸载,并且磁盘组上的所有文件都必须被关掉。

1.非选定节点执行

sql>alter drop diskgroup dg1 dismount;

2.选定节点执行

sql>drop diskgroup dg1;

3.如果磁盘组中包含文件,上述命令将执行失败,执行如下命令

sql>drop diskgroup dg1 including contents;

磁盘的添加:
磁盘组在创建以后,sys用户可以在不关闭数据库的情况下向磁盘组中添加磁盘,或者删除磁盘组中的磁盘。无论是哪种操作,ASM实例都将对磁盘组进行重新平衡。

sql>alter diskgroup dg1 add disk '/dev/rhdisk9' name disk9,'/dev/rhdisk10' name disk10;

//由于没有指定磁盘所属的失败组,所以ASM实例将自动确定磁盘属于哪个失败组。如果要明确的将磁盘添加到某个失败组,则需要在add关键字之后指failgroup关键字及失败组的名称。

磁盘的删除:
从磁盘组中删除磁盘的方法是使用alter diskgroup 命令及drop disk 子句。可以一次删除一个磁盘,或者删除一个失败组中的所有磁盘。在删除磁盘时,ASM实例需要对磁盘组进行重新平衡,被删除磁盘上的内容被重新平均分布到其他磁盘上。

sql>alter diskgroup dg1 drop disk disk5;

sql>alter diskgroup dg1 drop disks in failgroup fg2;

//删除失败组fg2中的所有磁盘

删除磁盘的操作需要较长的一段时间才能完成,这是因为ASM实例需要对磁盘组进行重新平衡。在删除操作完成之前,可以取消这次操作。但如果删除操作已经完成,或者在删除命令中使用force关键字进行强行删除,那么磁盘上的内容将无法恢复。

sql>alter diskgroup dg1 undrop disk;

磁盘组信息的查询:
在ASM实例中,可以从动态性能视图中查看磁盘组及磁盘的信息。从视图v$ASM_DISKGROUP中可以查询磁盘组的信息。

SQL> select name ,state,type,total_mb,free_mb from v$asm_diskgroup;

NAME			       STATE	   TYPE     TOTAL_MB	FREE_MB
------------------------------ ----------- ------ ---------- ----------
DATA			       MOUNTED	   EXTERN      20479	  17605
FRA			       MOUNTED	   EXTERN      18431	  18101
OCR			       MOUNTED	   EXTERN	2048	   1652

从视图 V$ASM_DISK中可以查询磁盘的信息,无论这个磁盘是属于某个磁盘组,还是一个空闲的磁盘。

SQL> select group_number,path,state,total_mb,free_mb from v$asm_disk;

GROUP_NUMBER PATH		  STATE      TOTAL_MB	 FREE_MB
------------ -------------------- -------- ---------- ----------
	   2 /dev/asm-disksdb2	  NORMAL	18431	   18101
	   3 /dev/asm-disksdb1	  NORMAL	 2048	    1652
	   1 /dev/asm-disksdc2	  NORMAL	10239	    8795
	   1 /dev/asm-disksdc1	  NORMAL	10240	    8800

在视图v$asm_disk中,磁盘组的编号是是从1开始的,如果一个磁盘所对应的磁盘组的编号为0,说明这个磁盘目前不属于任何磁盘组,这个磁盘的大小和剩余空间大小都是0.

从动态性能视图v$asm_client 中,可以查询数据库实例或ASM实例对磁盘组的访问情况。一个磁盘组可以同时被这两种实例访问,ASM实例访问其中的OCR文件
和voting文件,而数据库实例则访问其中的数据文件。

SQL>select to_char(group_number),instance_name,db_name,status from v$asm_client;

TO_CHAR(GROUP_NUMBER)			 INSTANCE_N DB_NAME    STATUS
---------------------------------------- ---------- ---------- ----------
3					 +ASM1	    +ASM       CONNECTED
1					 +ASM1	    +ASM       CONNECTED
1					 orcl1	    orcl       CONNECTED
2					 orcl1	    orcl       CONNECTED

磁盘组的重新平衡
当磁盘组中的磁盘数目发生改变时,ASM实例将对其自动进行一次重新平衡,将磁盘组中的内容重新平衡分布到现有的各个磁盘上。用户也可以手工对磁盘组进行平衡,这样做的目的是为了控制平衡的过程,从而获得不同的平衡速度。
磁盘组的平衡能力从0~11,共分为12级,其中0表示停止平衡操作,11表示速度最快的平衡操作。在对磁盘组进行手工平衡操作时,可以指定平衡的级别。当然指定的平衡级别越高,消耗的系统资源就越多,初始化参数ASM_POWER_LIMIT限制了可以使用的最高平衡级别。如果进行平衡操作时指定的级别高于初始化参数ASM_POWER_LIMIT的值,是不起任何作用的。

SQL> alter diskgroup data rebalance power 3;
Diskgroup altered.

//对磁盘组data进行平衡操作。指定平衡级别为3,如果没指定平衡级别,则采用asm_power_limit指定的平衡级别。

磁盘组的挂接和卸载
为了能够访问磁盘组中的文件,必须对磁盘组进行挂接。在一个节点上,只有对磁盘组进行了挂接,这个节点上的clusterware和数据库实例才能够访问磁盘组中的文件。当关闭ASM实例时,磁盘组被自动卸载。如果通过初始化参数ASM_DISKGROUPS指定了若干个磁盘组的名称,那么在asm实例启动时这些磁盘组将被自动挂接。在刚刚创建一个磁盘组时,在当前节点上这个磁盘组将处于已被挂接的状态,在其他节点上用户需要手工挂接这个磁盘组。

sql>alter diskgroup data mount;
sql>alter diskgroup all mount;
sql>alter diskgroup data dismount;
sql>alter diskgroup all dismount;

如果磁盘组上的某些文件处于打开状态,卸载操作将失败,可以加:force 参数。强制卸载。

如何使用ASM磁盘组
数据库管理员可以使用自动文件管理功能(OMF):
1.表空间
2.重做日志文件
3.控制文件
4.归档日志文件
5.rman备份文件

在使用自动文件管理时,需要设置以下初始化参数:
1.DB_CREATE_FILE_DEST/指定一个文件系统或者磁盘组,作为表空间中数据文件的默认存储位置。
2.DB_CREATE_ONLINE_LOG_DEST_n/用来为重做日志文件和控制文件指定默认存储位置。
3.DB_RECOVERY_FILE_DEST/用来为rman备份文件指定默认存储位置。

智能数据位置:
智能数据位置明确将数据存储在ASM磁盘中最高性能的磁盘区域。使用磁盘区域设置,能确保频繁访问的数据被存放在最外层的轨道,外层轨道有更快的速度和更高的吞吐量,能降低延迟。
只能数据位置设置能在文件或者磁盘组模板中明确指定。磁盘组被创建之后,磁盘区域设置能被修改,更多频繁访问的数据将通过rebalance 操作被存放到最外边缘。

智能数据位置最适合以下情况使用:(此处简介,需要详细了解)
1.数据库的数据文件被不同比例地访问。一个用同样的方法访问所有数据文件的数据库不太有可能体现出智能数据位置的优势。
2.磁盘组使用超过25%。如果磁盘只使用了25%,管理开销不太有可能带来任何优势。

注意:COMPATIBLE.ASM和COMPATIBLE.RDBMS磁盘组属性必须设置为11.2或者更高才能使用智能数据位置。

磁盘组兼容性属性:
1.compatible.asm
磁盘组compatible.asm 属性的值决定了ASM实例可以使用的磁盘组最小软件版本。这个设置也影响ASM磁盘上的ASM元数据结构。
当使用create diskgroup 语句,asmcmd mkdg 命令和em 的create disk group 页面创建磁盘组的时候,11gR2中ASM的compatible.asm属性默认值都是10.1.使用asmca 创建一个磁盘组时,默认值是11.2

2.compatible.rdbms
磁盘组compatible.rdbms 属性值决定使用的磁盘组数据库实例最小软件版本。如果数据库compatible初始化参数的设置为11.1 或者11.2那么compatible.rdbms能在10.1和11.1在内设置任何值,数据库都可以直接使用该磁盘。

磁盘组兼容性与ASM实例、RDBMS实例的兼容性版本
COMPATIBLE.ASM COMPATIBLE.RDBMS COMPATIBLE.ADVM ASM实例兼容版本 DBMS实例兼容版本
10.1 10.1 n/a >=10.1 >=10.1
11.1 10.1 n/a >=11.1 >=10.1
11.2 11.1 11.2 >=11.2 >=11.1
11.2 11.2 11.2 >=11.2 >=11.2

修改磁盘组兼容属性:

select name ,state,type,total_mb,free_mb from v$asm_diskgroup;
select t.* from v$asm_disk t;

select * from v$asm_attribute

alter diskgroup DATA set attribute 'compatible.rdbms'='11.2';
alter diskgroup FRA set attribute 'compatible.rdbms'='11.2';
alter diskgroup OCRVOTE set attribute 'compatible.rdbms'='11.2';
 类似资料: