ASM磁盘管理:从初始化参数到自动化管理的全面解析

2024-01-09 23:42:38

一、引言

ASM作为Oracle数据库的关键组件,提供了高性能、可靠性和便捷性的存储管理服务,解决了存储管理上的许多难题。它可以在不同的数据库环境中使用,并提供丰富的功能和选项来满足各种需求。

  1. 便于管理和高性能的集群文件系统:ASM提供了一个方便管理的文件系统,可以有效地管理大量的Oracle数据文件、日志文件和控制文件。它可以在集群环境中提供高性能的存储管理服务。

  2. 自动管理Oracle数据文件、日志文件、控制文件等:ASM可以自动管理数据库的各种文件,包括数据文件、日志文件和控制文件。它会自动将这些文件分散在不同的磁盘上,以提供更好的性能和可靠性。

  3. 自动将数据在不同的磁盘间负载均衡:ASM可以自动将数据在存储设备之间平衡分布,从而实现负载均衡。它会根据容量、性能等因素自动调整数据的分布,以提高存储效率。

  4. 提供完整的磁盘镜像(故障组 数据冗余):ASM通过使用故障组来提供数据冗余和高可用性。它会将数据文件复制到不同的磁盘上,以提供完整的磁盘镜像。如果一个磁盘出现故障,ASM可以自动将数据从镜像磁盘中恢复。

  5. 解决存储管理上的难题(共享存储、负载均衡):ASM解决了存储管理中的一些难题,比如共享存储和负载均衡。它可以在集群环境中实现共享存储,并根据负载情况自动调整数据的分布,提高系统的性能和可用性。

  6. 可用于单实例或RAC数据库:ASM可以用于单实例数据库或Real Application Cluster (RAC) 数据库。它能够适应不同的数据库环境,并提供相应的存储管理服务。

  7. 使用OMF模式:ASM支持使用Oracle Managed Files (OMF) 模式。OMF可以简化数据库管理操作,自动为数据库对象生成适当的文件名,并自动管理文件的位置和大小。

在这里插入图片描述

二、ASM初始化参数

Oracle Automatic Storage Management (ASM) 是 Oracle数据库的一个特性,它提供了一个统一、高性能的存储解决方案。在使用 ASM 进行磁盘管理之前,理解其初始化参数至关重要。这些参数决定了 ASM 的行为和性能。

1.INSTANCE_TYPE参数:当该参数设置为 ASM 时,表示这是一个 ASM 实例。当该参数设置为 RDBMS 时,则表示这是一个数据库实例。

如:
在这里插入图片描述
2.asm_power_limit参数:该参数控制 ASM 重新平衡操作速度。它的值范围为 1 到 11,其中 1 表示速度最慢,11 表示速度最快。默认值为 1。

3.asm_diskstring参数:该参数是一个与操作系统相关的值,在启动 ASM 实例时使用。它限制了 ASM 搜索磁盘时所考虑的磁盘集。磁盘集主要用于创建 ASM 磁盘组。在使用磁盘集里的磁盘创建 ASM DISK GROUP 时,需要满足一些条件,如属组、权限和磁盘映射是否正确等。
4.asm_diskgroups参数:该参数指定了 ASM 实例要装载的磁盘组的名称列表。当 ASM 实例启动时或使用 ALTER DISKGROUP ALL MOUNT 命令时,ASM 实例将装载这些磁盘组。该参数没有默认值,通常由 ASM 自动维护。
5.asm_preferred_read_failure_groups: 指定包含首选读取磁盘的故障组

6.large_pool_size: 该参数指定 ASM 实例用于大内存请求的内存池的大小,单位为字节。默认情况下,该参数的值为 12 MB,但是可以更改为一个较大的值以适应 ASM 实例的实际需求。
如:
ALTER SYSTEM SET asm_large_pool_size= SCOPE=SPFILE;
7.remote_login_passwordfile:指定ORACLE软件是否检查密码文件。默认值是’EXCLUSIVE’

8.ASM memory_max_target:该参数定义了 ASM 实例可以使用的最大内存量,单位为字节。这个参数可以控制 ASM 实例的整体内存使用,包括 SGA 和 PGA。ASM 实例将根据需要自动调整 SGA 和 PGA 的大小,以提供合适的内存资源。

9.memory_target:该参数定义了 ASM 实例对于所有 SGA 和 PGA 内存的总体分配目标,单位为字节。与 ASM memory_max_target 类似,memory_target 也可以自动调整 SGA 和 PGA 的大小,以适应实际的内存需求。

这两个参数可以在 ASM 实例启动时或者动态地进行修改。需要注意的是,修改这些参数可能需要对 ASM 实例进行重启或者重新启动相关的内存组件。

可以使用以下 SQL 命令来修改这些参数:

ALTER SYSTEM SET ASM_MEMORY_MAX_TARGET=<value> SCOPE=SPFILE; 静态参数
ALTER SYSTEM SET MEMORY_TARGET=<value> SCOPE=both;

三、ASM三大系统权限

在 Oracle ASM 中,有三个重要的系统权限,也被称为 ASM 三大系统权限,它们是:

SYSASM:SYSASM 是用于管理 ASM 实例和磁盘组的最高权限角色。持有 SYSASM 权限的用户可以创建、配置、启动和停止 ASM 实例,创建和管理磁盘组,以及执行涉及 ASM 实例和磁盘组的管理任务。

SYSDBA:SYSDBA 是数据库的最高权限角色,也拥有对 ASM 实例的管理权限。SYSDBA 用户具有与 SYSASM 相似的权限,可以执行对 ASM 实例和磁盘组的管理操作。

SYSOPER:SYSOPER 是一种较低级别的权限角色,用于执行一些常见的操作,如启动和关闭数据库、备份和恢复数据库等。SYSOPER 角色也可以访问 ASM 实例,并执行一些限制的 ASM 管理操作,如启动和关闭 ASM 实例,创建和删除磁盘组。

四、ASM实例的启停

1.Oracle ASM的启停可以通过两种方式进行

srvctl启动ASM实例
使用srvctl实用程序。这是Oracle Grid Infrastructure (GI) 提供的一个命令行工具,可以用来管理包括ASM在内的多个Oracle组件。
启动ASM实例的命令

srvctl start asm

srvctl停止ASM实例

srvctl stiop  asm

命令行来启停Oracle ASM
grid用户
sqlplus / as sysasm

ASM实例关闭:

shutdown immediate/transcational:ASM在关闭之前会nomount掉所有磁盘组并关闭实例。这种关闭模式将等待任何正在进行的SQL执行完成。ASM不等待当前与实例连接的用户断开连接。如果任何数据库实例与ASM实例连接。则SHUTDOWN将会关闭数据库。

shutdown normal(shutdown):ASM在关闭之前会nomount掉所有磁盘组并关闭实例。这种关闭模式将等待任何正在进行的SQL执行完成。ASM将等待所有当前连接的用户与该实例上断开。如果任何数据库实例与ASM实例连接。则SHUTDOWN将会关闭数据库。NOMAL是默认的关闭模式。

abort:ASM实例立即关闭。不按照顺序卸载(nomount)磁盘组。如果有任何数据库实例与ASM实例连接的话,则该数据库实例也将中止。

ASM实例启动:

startup nomount:启动ASM实例而不挂载任何磁盘组。只是读取初始化参数
startup mount:挂载ASM_DISKGOURPS下指定的磁盘组。
startup 正式开启实例

restrict:在受限模式下启动实例可以与startup (nomount/mount)相关语句连用
在受限模式下。数据库实例不能使用磁盘组。即数据库无法打开磁盘组中的文件
受限模式的主要作用就是去做一些相关检查工作

两种启动方式的区别
srvctl start asm 会带着数据库一起启动
sqlplus / as sysasm
startup 不会启动数据库

2.查看集群中的资源状态

crsctl stat res -t是 CRS (Cluster Ready Services) 控制命令,用于检查和显示整个集群中的资源状态。
该命令列出了当前集群中所有 CRS 资源的摘要信息,包括资源名称、资源类型、当前状态、目标状态和节点名称,以及其他关键信息。

命令输出的字段含义:

NAME:资源名称

TARGET:资源的目标状态

STATE:资源的当前状态

SERVER:资源所在的节点名称

STATE_DETAILS:描述当前资源状态的详细信息
在这里插入图片描述

3.配置 ASM资源随着系统启动而启动

crsctl enable has 是一个命令,用于启用 Oracle Clusterware 的高可用服务(High Availability Services,简称 HAS)。

在 Oracle Grid Infrastructure(先前称为 Oracle Clusterware)中,HAS 是负责管理和监控集群资源和服务的组件。当启用 HAS 后,它将负责监视和自动重新启动集群中的组件和服务,确保它们在发生故障或节点重启时保持可用。

要使用crsctl enable has 命令启用 HAS,请遵循以下步骤:

使用 root/grid户登录到集群中的任一节点。

打开终端窗口或命令行界面,并执行以下命令来启用 HAS:

crsctl enable has

运行此命令后,服务器在操作系统启动时自动启动HAS服务

您可以使用以下命令来检查 HAS 的状态:

crsctl check has

这将验证 HAS 的配置和启用状态,并显示相关信息。

禁用 Oracle 高可用性服务(HAS),使其不会在系统启动时自动启动。

crsctl disable has
4.配置数据库实例随着ASM启动而启动

下面是有关在ASM下配置数据库实例随着ASM启动而启动的步骤:

用以下命令查看资源或服务的当前状态:

crsctl stat res (资源或服务名称) -p

例如,要查看数据库资源的状态,可以运行:

crsctl stat res ora.orcl.db -p

在输出结果中查找参数 AUTO_START,该参数指示资源的启动策略。
可以运行以下命令过滤出 AUTO_START 参数的值:

crsctl stat res ora.orcl.db -p | grep AUTO_START

AUTO_START参数有三个可选值:

  • always:在HAS(集群管理服务)重启时启动资源,但不检查资源在停止时的状态。
  • restore:在HAS重启时启动资源,并检查资源在停止时的状态,并恢复到该状态。
  • never:资源不随HAS启动而启动。

如果要修改数据库的启动策略,具体步骤如下:

对于 Oracle 11g:
使用以下命令修改资源的 AUTO_START 属性:
crsctl modify resource ora.orcl.db -attr AUTO_START=never

请注意,在Oracle 19c中,执行以上命令会报错 CRS-4995: The command 'Modify resource' is invalid in crsctl. Use srvctl for this command.。下面是在Oracle 19c下修改数据库启动策略的步骤:

使用以下命令关闭数据库的自动启动,并修改相关启动策略:

 srvctl modify database -d orcl -policy MANUAL

如果要将数据库恢复为自动启停模式,可以运行以下命令:

 srvctl modify database -d orcl -policy AUTOMATIC

若要查询当前数据库资源的配置,可以使用以下命令:

srvctl config database -d orcl

五、数据库实例与ASM的交互

1 数据库实例通过o0nn进程向ASM实例发送文件创建请求,请求中包含以下信息:diskgroup(磁盘组) 名称,文件类型,文件块大小,文件大小,文件标签,还可以包含template(模板),文件别名。

注意:这一步主要是我的数据库实例向ASM实例发起创建表空间(创建表空间时也要指定对应的数据文件)或文件(数据文件 REDO文件 控制文件等)的请求。那么向ASM实例发送请求的过程相当于向由ASM实例下挂载的磁盘组请求创建的对应的文件的过程。

2 ASM实例将接收到的数据库实例的创建请求转换成区映射(extent map),随后ASM实例创建持续操作目录-COD(Continuing Operation Directory),用以记录和跟踪文件的创建,并在磁盘组中为新的文件分配空间。

3 ASMB进程通知数据库前台进程(serverprcess)接收新文件的区映射(extent map)信息。

4 数据库实例接到区映射后开始初始化文件,并选择合适的I/O去进行初始化。初始化完成后,数据库实例会向ASM实例发送并提交创建完成信息。此时文件处于OPEN状态

5 数据库实例向ASM实例提交创建完成信息。ASM实例收到信息后,其LGWR进程(ASM实例的)将更新动态改变目录-ACD(Active Change Directory)中的记录,DBWn(ASM实例的)进程将相关的分配表,文件目录,文件别名以异步的方式写回到磁盘进行持久化保存(数据写回到ASM实例所管理的磁盘组的元数据表上)。并将文件标记成已经创建且进入到待确认提交态。

6 文件提交确认后会隐式关闭该文件。将来发生 I/O 时,数据库实例需要重新打开该文件。

备注:如果文件创建过程中异常中断,ASM实例利用COD回滚文件的创建,并且回滚过程中相应的删除ACD中相关记录。

六、 启动策略详解

UTO_START 是 Oracle ASM 中用于设置资源的启动策略的一个属性。它用于定义 ASM 实例或磁盘组在集群启动时的自动启动行为。

在 Oracle ASM 中,AUTO_START 属性有以下三个可选值:

ALWAYS:表示资源将始终在集群启动时自动启动,无论其当前的状态如何。
RESTORE:表示资源将在集群启动时自动启动,并检查资源在停止时的状态,并恢复到该状态。这主要适用于 ASM 实例或磁盘组在故障后的恢复。
NEVER:表示资源不会在集群启动时自动启动。
通过设置 AUTO_START 属性,可以控制资源在集群启动时的自动行为。这样可以确保在启动集群时,所需要的 ASM 实例或磁盘组能够自动启动并处于正确的状态。

例如,如果将 AUTO_START 属性设置为 ALWAYS,那么 ASM 实例或磁盘组将始终在集群启动时自动启动。而如果将 AUTO_START 属性设置为 NEVER,那么 ASM 实例或磁盘组将不会在集群启动时自动启动,需要手动启动它们。

下面是有关在ASM下配置数据库实例随着ASM启动而启动的步骤:

1)使用以下命令查看资源或服务的当前状态:
crsctl stat res (资源或服务名称) -p

例如,要查看数据库资源的状态,可以运行:
crsctl stat res ora.orcl.db -p

2)在输出结果中查找参数 AUTO_START,该参数指示资源的启动策略。
可以运行以下命令过滤出 AUTO_START 参数的值:

crsctl stat res ora.orcl.db -p | grep AUTO_START

AUTO_START 参数有三个可选值:

  • always:在HAS(集群管理服务)重启时启动资源,但不检查资源在停止时的状态。
  • restore:在HAS重启时启动资源,并检查资源在停止时的状态,并恢复到该状态。
  • never:资源不随HAS启动而启动。

3) 如果要修改数据库的启动策略,具体步骤如下:

对于 Oracle 11g:

使用以下命令修改资源的 AUTO_START 属性:

crsctl modify resource ora.orcl.db -attr AUTO_START=never

请注意,在Oracle 19c中,执行以上命令会报错 CRS-4995: The command 'Modify resource' is invalid in crsctl. Use srvctl for this command.。下面是在Oracle 19c下修改数据库启动策略的步骤:

使用以下命令关闭数据库的自动启动,并修改相关启动策略:

srvctl modify database -d orcl -policy MANUAL

如果要将数据库恢复为自动启停模式,可以运行以下命令:

srvctl modify database -d orcl -policy AUTOMATIC

若要查询当前数据库资源的配置,可以使用以下命令:

srvctl config database -d orcl

需要注意的是,即使你将数据库配置为随HAS服务重启而自动启动(管理策略为AUTOMATIC),你也不能在数据库关闭的情况下重启HAS服务。否则,数据库仍不会随HAS的重启而启动。这是因为HAS会检测到数据库在其关闭时的状态是关闭的,因此HAS会假设数据库不会随其启动而启动(TARGET-OFFLINE)。

如果你想要数据库不随HAS服务重启而重新启动,一种简单的方法是在关闭HAS服务之前先关闭数据库。无论是使用grid用户通过srvctl命令关闭数据库,还是使用oracle用户通过shutdown immediate命令关闭数据库,效果都是一样的。

七、 ASM后台进程

在 Oracle ASM(Automatic Storage Management)中,有多个后台进程负责执行不同的功能。以下是几个常见的 ASM 后台进程:

  1. ASM Instance:

    • ASM Init Process(进程ID为0):ASM 实例的初始化进程,负责启动其他 ASM 后台进程。
    • ASM RBAL(Repair Balanced):负责监视磁盘故障,并在需要时执行磁盘恢复操作。
    • ASM GMON(Global Monitor):负责监视 ASM 实例和磁盘组的状态,并处理事件通知。
    • ASM WS*:负责处理后续 ASM Instance 的工作进程。
  2. ASM Disk Processes(ASM进程对应磁盘):

    • ASM Rebalance:负责在磁盘组中重平衡数据,以实现磁盘空间的均衡分布。
    • ASM Power Master:负责监视磁盘状态,并处理磁盘上的电源事件。
    • ASM File Metadata:负责处理与文件元数据相关的操作,例如读取和写入 ASM 文件的相关信息。
  3. Oracle Database Instance 和 ASM Instance 进程通信相关进程:

    • LMSn(Lock Manager Server):负责在数据库实例和 ASM 实例之间进行锁管理,并处理并发数据访问。
    • LGWR(Log Writer):负责将数据库日志写入 ASM 磁盘组。
    • DBWR(Database Writer):负责将数据库的数据块写入 ASM 磁盘组。
    • ARCn(Archiver Process):负责将数据库的归档日志写入 ASM 磁盘组。

通过这些后台进程的协作,ASM 能够提供高可用、可伸缩、自动管理的存储解决方案,并有效地管理数据库中的数据文件。

八、ASMCMD命令使用

ASMCMD(ASM Command)是一个用于管理 Oracle ASM(Automatic Storage Management)的命令行工具。它提供了一些有用的命令,用于执行各种 ASM 磁盘组和文件的管理操作。以下是一些常用的 ASMCMD 命令及其用法:

  1. ascmd:启动 ASMCMD 命令行界面。

  2. ls:列出指定路径下的文件和目录。

    • 示例:ASMCMD> ls DATA/
  3. pwd:显示当前所在的 ASM 路径。

    • 示例:ASMCMD> pwd
  4. cd:切换到指定的 ASM 路径。

    • 示例:ASMCMD> cd DATA/
  5. cp:将文件从本地系统复制到 ASM 磁盘组。

    • 示例:ASMCMD> cp /home/oracle/datafile.dbf +DATA/
  6. rm:删除指定的 ASM 文件。

    • 示例:ASMCMD> rm +DATA/DATAFILE.dbf
  7. du:显示指定路径或文件的磁盘使用情况。

    • 示例:ASMCMD> du +DATA
  8. lsct:列出当前ASM客户端的信息

    • 示例:ASMCMD> lsct
  9. lsdg:列出所有磁盘组及其详细信息。

    • 示例:ASMCMD> lsdg
  10. lsof:列出数据文件,控制文件等文件的信息

    • 示例:ASMCMD> lsof
  11. mkdg:创建一个新的磁盘组。

    • 示例:ASMCMD> mkdg DG_NAME DISK1, DISK2
  12. mkalias:创建一个路径别名。

    • 示例:ASMCMD> mkalias myalias +DATA/DATAFILE.dbf
  13. lsdsk:列出盘的信息(ASM DISK)

    • 示例:ASMCMD> lsdsk
  14. help:显示帮助信息。

    • 示例:ASMCMD> help cp
  15. ls -ls: 查看ASM磁盘占用情况

这些只是 ASMCMD 命令中的一部分,还有其他的命令可以用于执行更多操作,如查看磁盘组信息、移动文件、查询文件状态等。您可以在使用 ASMCMD> help 命令获取完整的命令列表和帮助信息。

九、图形化界面和手工创建磁盘组

ASM(Automatic Storage Management)有一个图形化界面工具称为 ASM Configuration Assistant(ASMCA),它提供了一个直观的界面,可用于管理和配置 ASM 实例和磁盘组

图像化创建磁盘组

1.添加磁盘
fdisk -l 检查所有磁盘

查到磁盘后修改文件

vi /etc/udev/rules.d/99-oracle-asmdevices.rules

KERNEL==“sdb”,NAME=“asmdisk1”,OWNER=“grid”,GROUP=“asmadmin”,MODE=“0660”
KERNEL==“sdc”,NAME=“asmdisk2”,OWNER=“grid”,GROUP=“asmadmin”,MODE=“0660”
KERNEL==“sdd”,NAME=“asmdisk3”,OWNER=“grid”,GROUP=“asmadmin”,MODE=“0660” --新加盘配置

重启服务让配置生效
udevadm control --reload-rules
udevadm trigger

2.asmca创建磁盘组

asmca调出图形界面
su - grid
export DISPLAY=:0
asmca

在 ASMCA 工具中,选择 “创建” 选项,然后选择 “磁盘组”。
在这里插入图片描述

在 “创建磁盘组” 对话框中,输入磁盘组的名称,并选择所需的存储类型(如外部冗余、高冗余等)。
在 “选取磁盘” 部分,选择要包含在磁盘组中的物理磁盘。您可以选择从列表中选择物理磁盘,也可以手动输入设备路径
确认创建磁盘组的设置,并单击 “创建” 按钮以开始创建。

在这里插入图片描述

查看ASM资源状态信息 ora.FRADG.dg 本地资源出些,并且状态是ONLINE 和状态可用即代表创建磁盘组FRADG成功
crsctl stat res -t
在这里插入图片描述

进入asmcmd查看磁盘组信息

在这里插入图片描述

手工创建磁盘组

步骤如下:

1.首先检查磁盘状态:看看哪些磁盘可以创建磁盘组用
set lines 200
col name for a20
col path for a30

select GROUP_NUMBER,free_mb,total_mb,HEADER_STATUS,name,PATH from v$asm_disk order by 1 desc;

如果HEADER_STATUS 出现MEMBER 代表已经被使用,不能够用于创建磁盘组
只有状态未HEADER_STATUS CANDIDATE(候选)才可用于创建磁盘组

案例如下:在这里插入图片描述
2.创建磁盘组的语法如下:
create diskgroup <磁盘组名称> external redundancy disk ‘<磁盘路径>’;

如:
create diskgroup fradg external redundancy disk ‘/dev/sdc’ ;
create diskgroup fradg external redundancy disk ‘/dev/sdc’ ATTRIBUTE ‘au_size’=‘4M’; 指定了 au_size 属性为 4M,即将每个分配单元的大小设置为 4MB

3.再次查看磁盘组状态:
set lines 200
col name for a20
select name,state,free_mb,total_mb,usable_file_mb from v$asm_diskgroup;

4.卸载磁盘组,从ASM实例上卸载
alter diskgroup fradg dismount force;

5.让磁盘组重新挂载
alter diskgroup fradg mount;

6.删除磁盘组
drop diskgroup fradg including contents;

注意:如果删除的磁盘组想要重新使用,需要格式化磁盘头
dd if=/dev/zero of=/dev/sdc bs=1M count=1024

十、ASM相关常用命令

1.显示集群节点列表
olsnodes

2.显示集群中每个节点的节点编号和节点名
olsnodes -n

3.查看监听状态
srvctl status listener

4.查看集群vip信息
srvctl config nodeapps -a

5.查看集群scan_ip
srvctl config scan

6.停掉集群(包含数据库)
crsctl stop crs

7.启动集群(包含数据库)
crsctl start crs

8.查看集群状态
crsctl status res -t

9.显示OCR中注册的所有数据库
srvctl config database

10.查看某个数据库配置
srvctl config database -d raw

十一、向ASM磁盘组中添加磁盘

可参考我的其它文章:Oracl ASM磁盘扩容
https://blog.csdn.net/m0_49929446/article/details/124084310

文章来源:https://blog.csdn.net/m0_49929446/article/details/135491296
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。