ASM作为Oracle数据库的关键组件,提供了高性能、可靠性和便捷性的存储管理服务,解决了存储管理上的许多难题。它可以在不同的数据库环境中使用,并提供丰富的功能和选项来满足各种需求。
便于管理和高性能的集群文件系统:ASM提供了一个方便管理的文件系统,可以有效地管理大量的Oracle数据文件、日志文件和控制文件。它可以在集群环境中提供高性能的存储管理服务。
自动管理Oracle数据文件、日志文件、控制文件等:ASM可以自动管理数据库的各种文件,包括数据文件、日志文件和控制文件。它会自动将这些文件分散在不同的磁盘上,以提供更好的性能和可靠性。
自动将数据在不同的磁盘间负载均衡:ASM可以自动将数据在存储设备之间平衡分布,从而实现负载均衡。它会根据容量、性能等因素自动调整数据的分布,以提高存储效率。
提供完整的磁盘镜像(故障组 数据冗余):ASM通过使用故障组来提供数据冗余和高可用性。它会将数据文件复制到不同的磁盘上,以提供完整的磁盘镜像。如果一个磁盘出现故障,ASM可以自动将数据从镜像磁盘中恢复。
解决存储管理上的难题(共享存储、负载均衡):ASM解决了存储管理中的一些难题,比如共享存储和负载均衡。它可以在集群环境中实现共享存储,并根据负载情况自动调整数据的分布,提高系统的性能和可用性。
可用于单实例或RAC数据库:ASM可以用于单实例数据库或Real Application Cluster (RAC) 数据库。它能够适应不同的数据库环境,并提供相应的存储管理服务。
使用OMF模式:ASM支持使用Oracle Managed Files (OMF) 模式。OMF可以简化数据库管理操作,自动为数据库对象生成适当的文件名,并自动管理文件的位置和大小。
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= SCOPE=SPFILE; 静态参数
ALTER SYSTEM SET MEMORY_TARGET= SCOPE=both;
在 Oracle ASM 中,有三个重要的系统权限,也被称为 ASM 三大系统权限,它们是:
SYSASM:SYSASM 是用于管理 ASM 实例和磁盘组的最高权限角色。持有 SYSASM 权限的用户可以创建、配置、启动和停止 ASM 实例,创建和管理磁盘组,以及执行涉及 ASM 实例和磁盘组的管理任务。
SYSDBA:SYSDBA 是数据库的最高权限角色,也拥有对 ASM 实例的管理权限。SYSDBA 用户具有与 SYSASM 相似的权限,可以执行对 ASM 实例和磁盘组的管理操作。
SYSOPER:SYSOPER 是一种较低级别的权限角色,用于执行一些常见的操作,如启动和关闭数据库、备份和恢复数据库等。SYSOPER 角色也可以访问 ASM 实例,并执行一些限制的 ASM 管理操作,如启动和关闭 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 不会启动数据库
crsctl stat res -t是 CRS (Cluster Ready Services) 控制命令,用于检查和显示整个集群中的资源状态。
该命令列出了当前集群中所有 CRS 资源的摘要信息,包括资源名称、资源类型、当前状态、目标状态和节点名称,以及其他关键信息。
命令输出的字段含义:
NAME:资源名称
TARGET:资源的目标状态
STATE:资源的当前状态
SERVER:资源所在的节点名称
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
下面是有关在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参数有三个可选值:
如果要修改数据库的启动策略,具体步骤如下:
对于 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
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
参数有三个可选值:
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命令关闭数据库,效果都是一样的。
在 Oracle ASM(Automatic Storage Management)中,有多个后台进程负责执行不同的功能。以下是几个常见的 ASM 后台进程:
ASM Instance:
ASM Disk Processes(ASM进程对应磁盘):
Oracle Database Instance 和 ASM Instance 进程通信相关进程:
通过这些后台进程的协作,ASM 能够提供高可用、可伸缩、自动管理的存储解决方案,并有效地管理数据库中的数据文件。
ASMCMD(ASM Command)是一个用于管理 Oracle ASM(Automatic Storage Management)的命令行工具。它提供了一些有用的命令,用于执行各种 ASM 磁盘组和文件的管理操作。以下是一些常用的 ASMCMD 命令及其用法:
ascmd:启动 ASMCMD 命令行界面。
ls:列出指定路径下的文件和目录。
ASMCMD> ls DATA/
pwd:显示当前所在的 ASM 路径。
ASMCMD> pwd
cd:切换到指定的 ASM 路径。
ASMCMD> cd DATA/
cp:将文件从本地系统复制到 ASM 磁盘组。
ASMCMD> cp /home/oracle/datafile.dbf +DATA/
rm:删除指定的 ASM 文件。
ASMCMD> rm +DATA/DATAFILE.dbf
du:显示指定路径或文件的磁盘使用情况。
ASMCMD> du +DATA
lsct:列出当前ASM客户端的信息
ASMCMD> lsct
lsdg:列出所有磁盘组及其详细信息。
ASMCMD> lsdg
lsof:列出数据文件,控制文件等文件的信息
ASMCMD> lsof
mkdg:创建一个新的磁盘组。
ASMCMD> mkdg DG_NAME DISK1, DISK2
mkalias:创建一个路径别名。
ASMCMD> mkalias myalias +DATA/DATAFILE.dbf
lsdsk:列出盘的信息(ASM DISK)
ASMCMD> lsdsk
help:显示帮助信息。
ASMCMD> help cp
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
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
可参考我的其它文章:Oracl ASM磁盘扩容
https://blog.csdn.net/m0_49929446/article/details/124084310