自动存储管理: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
ASM_DISKSTRING:指定一个字符串,asm实例在创建磁盘组时按照这个字符串搜索可用的磁盘
ASM_DISKGROUPS:指定磁盘组的名称,ASM实例启动时将自动挂接这些磁盘组。如:ASM_DISKGROUPS=DATA,DG1
srvctl对asm 实例进行控制:
srvctl status asm
srvctl stop asm
srvctl start 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/rhdisk4','/dev/rhdisk5';
//在创建磁盘组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备份文件指定默认存储位置。
来源:CSDN
作者:wolihaito
链接:https://blog.csdn.net/wolihaito/article/details/103795210