Oracle ASM 磁盘组基础知识整理(收藏版)

摘要:
所以这次,我只是组织并简化了ASM磁盘组的基本操作命令。我希望这对你阅读时有帮助。ASM是Oracle内置的逻辑卷管理器,它进一步简化了数据库管理,是Oracle Wall Crack推荐的存储管理机制。

转至:https://cloud.tencent.com/developer/article/1494403

为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的,前两周里因一套生产环境数据库磁盘不足无法对其进行表空间扩容,需要向存储岗申请存储资源,当存储岗划好资源加完存储时,操作系统岗对其进行扫盘以及权限处理时忘记对 RAC2 节点的磁盘进行属主的设置。

当到我们数据库岗对其磁盘组添加磁盘时,我们的小伙伴没有对其权限及属主进行检查,直接使用 alter diskgroup XXX add disk ‘XXX’添加磁盘,当然此命名是没有任何问题的,添加成功,进行重新平衡。便兴高采烈的下班了,但随后而来的悲剧便上演了,由于节点2权限不对新添加的磁盘 ASM 实例无法访问,导致数据库宕机。使其业务系统不能正常访问导致事故发生。

添加磁盘组磁盘,应使用类似如下的操作命令,可谁想尽没有检查权限导致悲剧发生。所以本次才对 ASM 磁盘组的基础操作命令做了一个整理及简化操作,希望对正在阅读中的你有所帮助。

Oracle ASM 磁盘组基础知识整理(收藏版)第1张

ASM:Automatic Storage Management(自动存储管理)。 ASM 是 Oracle 内置的逻辑卷管理器,它进一步简化了数据库管理工作,是 Oracle 墙裂推荐使用的存储管理机制。先说一嘴 OMF,Oracle 11g 的一个新的特点就是文件和存储的自动管理,简称为 OMF,这么说吧,就是在 11g 单实例的数据库你创建一个数据文件需要写全路径,而在 ASM 里可以简写,不需要全部写完,例如:这么写:

Oracle ASM 磁盘组基础知识整理(收藏版)第2张

 而不用

Oracle ASM 磁盘组基础知识整理(收藏版)第3张

注意:'+DATA' 前面的+号不能丢, ASM 文件名字的格式是固定的:+group/dbname/file type/tag.file.incarnation

但这个功能需要以下初始化参数指定:

Oracle ASM 磁盘组基础知识整理(收藏版)第4张

 这里就不在细说了,今天主要说的是 ASM 磁盘组命令行的相关操作。

Oracle ASM 磁盘组基础知识整理(收藏版)第5张

ASM 命令行工具 ASMCMD

当安装完 grid 的时候,可使用命令行 asmca 来创建磁盘组,如下图:

Oracle ASM 磁盘组基础知识整理(收藏版)第6张

那也可以使用图形化来管理磁盘组了,不过出现这个图形化不是很方便,各种申请,故放弃,对于 DBA 来说,使用命令行是很方便的,那么就从 ASM 实例说起吧。

一、ASM 实例的启动与关闭

ASMCMD 工具是一个强大的管理工具,可以对实例、磁盘组、文件进行管理。可以有交互式和非交互式的两种方式,非交互式的直接就是 asmcmd 加一条 asmcmd 内部的命令,如 asmcmd lsdg;交互式的即先输入asmcmd 进入命令提示符界面后在执行 lsdg。

启动实例没啥说的,和数据库实例是一样的,直接 startup 就行,关闭也就是 shutdown;那么 ASM 实例也是后台进程加 SGA 内存组成,除了数据库实例所具有的进程外,还有 RBAL 和 ABRn; RBAL 这个进程也叫 Rebalancer 进程,负责规划 ASM 磁盘组的 Rebalance 活动;ABRn 是 RBAL 进程的子进程,这个进程在数量上可以有多个, n 从 1-9,这组进程负责真正完成 Reblance 活动。

ASM 随着 SGA 的分配和后台进程的启动而启动,从 nomount 启动到最终的 mount 状态。期间,也是需要参数文件的,也是可以启动到 nomount,如

Oracle ASM 磁盘组基础知识整理(收藏版)第7张

 Oracle ASM 磁盘组基础知识整理(收藏版)第8张

ASM 实例用户

在 ASM 实例创建时,默认会创建两个特权用户:SYS 和 ASMSNMP,类似数据库里的 SYS 和 SYSTEM 账号。我们可以通过命令行命令 lspwusr 查看 ASM 实例中的特权用户,也可以通过 orapwusr 命令创建、删除、修改特权用户,而特权用户的口令文件则放在 ASM 实例的口令文件中。

SYS@ ydjttest2>select USERNAME,ACCOUNT_STATUS, EXPIRY_DATE  from dba_users where username in('SYS','DBSNMP');
USERNAME                       ACCOUNT_STATUS                   EXPIRY_DA
------------------------------ -------------------------------- ---------
SYS                            OPEN                             24-FEB-19
DBSNMP                         EXPIRED & LOCKED                 13-AUG-09
[grid@JiekeXu1 ~]$ asmcmd
ASMCMD>
ASMCMD> lspwusr
Username sysdba sysoper sysasm
     SYS   TRUE    TRUE   TRUE
ASMSNMP   TRUE   FALSE  FALSE
ASMCMD>

 Oracle ASM 磁盘组基础知识整理(收藏版)第9张

 下面通过命令行创建特权用户 jiekexu, 密码同名具有 SYSASM 权限,也可登录 ASM 实例,通过动态性能视图 V$PWFILE_USERS 也可查看到特权用户。

Oracle ASM 磁盘组基础知识整理(收藏版)第10张

 Oracle ASM 磁盘组基础知识整理(收藏版)第11张

 二、命令行修改和删除特权用户

Oracle ASM 磁盘组基础知识整理(收藏版)第12张

 Oracle ASM 磁盘组基础知识整理(收藏版)第13张

三、ASMCMD 命令管理磁盘组

ASMCMD 工具命令行中的 lsdg 可以查看磁盘组的详细信息,如状态、冗余级别、是否正在进行重新平衡、总大小、剩余空间等。这个命令的信息则是来自动态性能视图 V$ASM_DISKGROUP 的,如下所示:

Oracle ASM 磁盘组基础知识整理(收藏版)第14张

 当然,我们一般都是使用如下语句查看磁盘组使用率,发现了吧,上面的语句多简单那!!!

set lin 1000 pagesize 999
col NAME for a15
SYS@ ydjttest1>select group_number,name,total_mb/1024 total_gb,free_mb/1024 free_gb,TYPE from v$asm_diskgroup;
GROUP_NUMBER NAME              TOTAL_GB    FREE_GB TYPE
------------ --------------- ---------- ---------- ------
           1 DATA            9.33007813 5.52929688 NORMAL
           2 FRA              7.4609375   4.484375 NORMAL
           3 OCR_VOTE        2.82421875 1.91992188 NORMAL

lsdsk 命令

lsdsk 可查看磁盘组中的磁盘或者系统中可用的磁盘。这个命令也有 -k、-p、-t、--statistics 等几个参数可以获得不同的信息,选项 -k 可以看到总大小以及剩余大小,磁盘名以及磁盘对应操作系统路径等。 选项 -p 可以看到磁盘组序号,磁盘状态以及磁盘冗余度和路径等等信息。选项 -t 则是查看磁盘创建时间以及挂载时间和路径等信息。选项 --statistics 则是查看磁盘组中读写 IO 信息,包括在每个磁盘上的读和写的次数、所用时间和数据量以及磁盘路径等信息。而这些信息主要来自于动态性能视图 V$ASM_DISK 和 V$ASM_DISK_STAT。部分举例如下图所示。

Oracle ASM 磁盘组基础知识整理(收藏版)第15张

 lsdsk --candidate -p 还可以获取 系统中的“候选磁盘”,所谓候选磁盘就是那些可以作为磁盘组中的成员,但是目前还不属于任何磁盘组的磁盘。如果没有则会如上图所示一样只显示了表头。

ASMCMD> lsdsk --candidate -p
Group_Num  Disk_Num      Mount_Stat  Header_Stat  Mode_Stat      State         Path
0            1           CLOSED        FORMER        ONLINE      NORMAL        /dev/rhdisk4
0            0           CLOSED        FORMER        ONLINE      NORMAL        /dev

 

lsop 和 lsattr 命令

lsop 用于查看磁盘组中被打开的磁盘。可用此命令查看数据库后台有哪些进程访问磁盘组中的磁盘。 lsattr 命令可用于查看磁盘组的属性信息,这些属性是在磁盘组创建时自动指定的,而且有些属性是可以修改的。setattr 命令可用于修改磁盘组的属性值。

Oracle ASM 磁盘组基础知识整理(收藏版)第16张

 当然,通过 SQL 命令也可以修改这些参数,如下所示修改 compatible.rdbms 参数,Oracle 11g 中,asm 同时支持 10g 和 11g 数据库。但是 asm 的版本不能低于数据库的版本。该属性用来指定 disk group 最小能够兼容的数据库实例,在修改这个参数之前,必须先确保所有的数据库实例的 COMPATIBLE 参数大于等于该参数的值。在 Oracle 11g 数据库中,Oracle ASM disk group 的 COMPATIBLE.RDBMS 属性值默认是: 10.1。

SYS@ +ASM2>col value for a30
SYS@ +ASM2>col name for a30
SYS@ +ASM2>set lin 120
SYS@ +ASM2>select name,value from v$asm_attribute where group_number=1 and name like 'compatible%';
NAME                           VALUE
------------------------------ ------------------------------
compatible.asm                 11.2.0.0.0
compatible.rdbms               11.2.0.0.0
SYS@ +ASM2>ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.rdbms' = '11.2.0.0.0';
Diskgroup altered.
SYS@ +ASM2>

 

四、磁盘组的创建与删除

利用 asmcmd 工具中的 mkdg 命令,可以创建 ASM 磁盘组,而磁盘组的结构是通过一个 XML 文件来指定,在这个文件中需要指定磁盘组的名称、冗余级别、包含磁盘及相关属性。ORACLE ASM 提供的三种冗余方式有 external、normal、high 即外部、正常、高。一般情况下三种模式需要的磁盘组:external 1块,normal,3块,high,5块。

1、 外部冗余(external redundancy):表示 Oracle 不帮你管理镜像,功能由外部存储系统实现,比如通过 RAID 技术;有效磁盘空间是所有磁盘设备空间的大小之和。

2、 默认冗余(normal redundancy):表示 Oracle 提供 2 份镜像来保护数据(镜像数据一次),有效磁盘空间是所有磁盘设备大小之和的 1/2 (使用最多)。

3、 高度冗余(high redundancy):表示 Oracle 提供3份镜像来保护数据(镜像数据两次),以提高性能和数据的安全,最少需要三块磁盘(三个 failure group);有效磁盘空间是所有磁盘设备大小之和的 1/3,虽然冗余级别高了,但是硬件的代价也最高。

如下的 XML 文件:

Oracle ASM 磁盘组基础知识整理(收藏版)第17张

mkdg 和 dropdg 命令

在创建磁盘组之前,首先需要在操作系统中创建一个 XML 文件,定义磁盘组的结构,然后在 ASMCMD 工具中将这个 XML 文件作为 mkdg 命令的参数,即可创建磁盘组。

Oracle ASM 磁盘组基础知识整理(收藏版)第18张

 通过 dropdg 命令可以删除一个磁盘组。如磁盘组总包含文件,磁盘组是不能被直接删除的,需要添加参数 -r 删除,当磁盘组出现故障无法挂载时需要强制删除,则需要添加参数 -f 强制删除。

Oracle ASM 磁盘组基础知识整理(收藏版)第19张

 SQL 创建磁盘组

su - grid
sqlplus / as sysasm
create diskgroup data normal redunancy failgroup DA1 disk '/dev/rhdisk2','/dev/rhdisk3' failgroup DA2 disk '/dev/rhdisk4','/dev/rhdisk5';

 SQL 删除磁盘组

Oracle ASM 磁盘组基础知识整理(收藏版)第20张

磁盘组的挂载与卸载

Oracle 11g RAC 一般数据文件都是存放于共享盘之上,要访问数据文件磁盘组必须得 mount ;当 ASM 实例启动后磁盘组自动被挂载, ASM 实例关闭后自动卸载。当在任意节点上新建的磁盘组时默认已经 mount 了,不过对于其他的节点需要手动挂载此磁盘组才行。

Oracle ASM 磁盘组基础知识整理(收藏版)第21张

 而在命令行下对于磁盘组的挂载需要在每个节点上进行,挂载磁盘组的命令是 mount,卸载则是 umount.

Oracle ASM 磁盘组基础知识整理(收藏版)第22张

 在不影响整个磁盘组的情况下,可以通过 offline 命令使其中的一个磁盘脱机,这时这个磁盘中的数据将无法访问,此命令会立即生效,如想延后生效可通过 -t 参数指定一段时间,以小时(h)或分钟(m)为单位使其在指定的时间段里脱机。当然相反的则是 online 重新联机。

Oracle ASM 磁盘组基础知识整理(收藏版)第23张

磁盘组重新平衡

当磁盘组中的磁盘数量发生变化时,磁盘组就会出现一次重新平衡,平衡的参数由 asm_power_limit 控制,一般默认为 1 ;最大为 11 最小为 0,共有 12 级,当为 0 时表示停止平衡,当为 11 时表示最快平衡速度,当然参数越大消耗资源越多。

在命令行下通过 rebal 对其进行重新平衡,通过 --power 来指定平衡级别,当使用 -w 参数时等待平衡完成才会返回结果,当不使用 -w 时则可以使用 lsop 来查磁盘进行的平衡操作。

Oracle ASM 磁盘组基础知识整理(收藏版)第24张

 当然可可以通过 SQL 语句来进行操作,不过就是有点麻烦,如下所示。

Oracle ASM 磁盘组基础知识整理(收藏版)第25张

 设置磁盘组重新平衡参数为 11,查看平衡时间,当 v$asm_operation 视图无任何输出则表示平衡完成。

su - grid 
sqlplus / as sysasm 
alter diskgroup data rebalance power 11;
select * from v$asm_operation;
SYS@ +ASM1>alter diskgroup data rebalance power 11;
Diskgroup altered.
SYS@ +ASM1>select * from v$asm_operation;
GROUP_NUMBER OPERA STAT      POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES ERROR_CODE
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- --------------------------------------------
           2 REBAL RUN          11         11          4         16        990           0
SYS@ +ASM1>select * from v$asm_operation;
GROUP_NUMBER OPERA STAT      POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES ERROR_CODE
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- --------------------------------------------
           2 REBAL WAIT         11
SYS@ +ASM1>/
no rows selected

 

五、磁盘组的读写信息

磁盘组中的数据是均衡分布在各个磁盘上的,但用户对于数据的访问却不一定是均衡分布在各个磁盘上的。通过 iostat 命令可以查看磁盘组中各个磁盘 IO 情况,便可以掌握数据库的基础性能,也可以对数据库调优提供依据。通过这条命令可以获取磁盘上的读和写的次数、数据量、所用时间、发生错误次数等信息。

iostat -G data

iostat -t -G data

iostat -e -G data

iostat --io -G data

Oracle ASM 磁盘组基础知识整理(收藏版)第26张

 Oracle ASM 磁盘组基础知识整理(收藏版)第27张

以下是几个使用频率较高的 SQL:

SQL 添加磁盘组磁盘

Oracle ASM 磁盘组基础知识整理(收藏版)第28张

 Oracle ASM 磁盘组基础知识整理(收藏版)第29张

 SQL 强制添加磁盘组

su - grid
sqlplus / as sysasm
create diskgroup ARCH external redundancy disk '/dev/asm2' force;
col name for a20
set line 200
select group_number,name,state,total_mb/1024 total_gb,free_mb/1024 free_gb,type from v$asm_diskgroup;

 Oracle ASM 磁盘组基础知识整理(收藏版)第30张

 SQL 删除磁盘组磁盘

Oracle ASM 磁盘组基础知识整理(收藏版)第31张

 SQL 查看磁盘组使用率

Oracle ASM 磁盘组基础知识整理(收藏版)第32张

 SQL 查看磁盘组对应磁盘路径

Oracle ASM 磁盘组基础知识整理(收藏版)第33张

 SQL 查看磁盘组访问情况

su - oracle
sqlplus / as sysdba
select group_number,instance_name,db_name,status from v$asm_client;

SYS@ ydjttest1>select group_number,instance_name,db_name,status from v$asm_client;

GROUP_NUMBER INSTANCE_NAME                                                    DB_NAME  STATUS
------------ ---------------------------------------------------------------- -------- ------------
           2 +ASM1                                                            ydjt_tes CONNECTED
           3 +ASM1                                                            ydjt_tes CONNECTED

SYS@ ydjttest2>select group_number,instance_name,db_name,status from v$asm_client;

GROUP_NUMBER INSTANCE_NAME                                                    DB_NAME  STATUS
------------ ---------------------------------------------------------------- -------- ------------
           2 +ASM2                                                            ydjt_tes CONNECTED
           3 +ASM2                                                            ydjt_tes CONNECTED

 

六、磁盘组中的目录管理

ASM 里面有一整套完整的目录层次,此目录由 ASM 实例或者数据库实例自动创建。而磁盘组中的文件则是由实例自动产生,他们实际上只是一些“系统别名”,相当于操作系统中的符号链接文件或者快捷方式。下面是一个简单的列举方便查看,更多的信息可自行查看这里不做介绍,本次就到这里了,花费巨大时间希望对你有所帮助。

Oracle ASM 磁盘组基础知识整理(收藏版)第34张

Oracle ASM 磁盘组基础知识整理(收藏版)第35张

免责声明:文章转载自《Oracle ASM 磁盘组基础知识整理(收藏版)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Selenium2+python自动化19-单选框和复选框(radiobox、checkbox)【转载】深入理解“软中断”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 12C 创建表空间、用户、目录及授权

Oracle 12C 与11g有一些不一样,12C成了可拔插的数据库,一个CBD(容器数据库),多个PDB(为可拔插的数据库) 一、首先以管理员身份登录上sqlplus,然后查看当前属于那个容器(默认是CBD),再查看所有的PDB,切换到要创建表空及用户的那个PDB下去 show con_name; --用show查看当前属于哪个容器,箭头所指为所在的容器...

oracle优化的几个简单步骤

数据库优化的讨论可以说是一个永恒的主题。资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等。还有的人认为要抓出执行最慢的语句来进行优化。但实际情况是,提出疑问的人很可能根本不懂执行计划,更不要说statspack了。而我认为,数据库优化,应该首先从大的方面考虑:网络、服务器硬件配置、操作系统配置、Ora...

oracle的热备份和冷备份

一、冷备份介绍:    冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件、控制文件、联机REDO LOG文件,将其拷贝到另外的位置。此外冷备份也可以包含对参数文件和口令文件的备份,但是这两种备份是可以根据需要进行选择的。,冷备份实际也是一种物理备份,是一个备份数据库物理文件的过程。因为冷备份要备份除了重做日志以外的所有数据库文件,因此也被成为...

第二章排错的工具:调试器Windbg(上)

感谢博主 http://book.51cto.com/art/200711/59731.htm 《Windows用户态程序高效排错》第二章主要介绍用户态调试相关的知识和工具。本文主要讲了排错的工具:调试器Windbg。   第二章 汇编、异常、内存、同步和调试器——重要的知识点和神兵利器 这一部分主要介绍用户态调试相关的知识和工具。包括:汇编、异常(ex...

游标小例

一,游标的 作用: 当在存储过程,函数,批处理,触发器中 使用 select 返回多条记录时,游标提供了一个可以对记录进行逐条处理的 方法.二,游标的使用方法:1,使用Declare Cursor语句,根据Select语句创建游标.有两种操作方法,效果是一样的,请注意他们的区别 :第一种:声明变量,然后设置游标Declare @MyVariable Cur...

原生JDBC

JDBCJava DataBase Connectivity,java数据库连接,是一种用于执行SQL语句的Java API。JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。 驱动JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商...