学习目标 描述使用ASM的好处 管理ASM实例 创建和删除ASM磁盘组 扩展ASM磁盘组 通过使用各种实用程序检索ASM元数据
ASM对于管理员的好处 使用ASM可以免除: -I/O性能优化:ASM采用条带化和镜像所有数据的策略,且执行自动重新平衡操作。 -数据文件移动和重新组织:不再需要更改数据文件的位置来满足性能要求和空间约束条件。 -文件名管理:不再需要定义和强制执行文件命名策略 -逻辑卷/文件系统/集群文件系统/裸设备管理:不再需要这些存储元素 使用ASM可以减少下列工作: -逻辑单元号(LUN)管理工作减少,ASM通常需要的逻辑单元较少且大小较大 -数据库原理员与系统管理员之间的依赖性大大减少,如迁移磁盘组不再需要系统管理员干预。 -减少手动执行维护任务时发生的错误。如新增数据文件文件命名不规范,导致数据库的其余部分不支持。 ASM实例 每次启动ASM或数据库时,都会分配名为系统全局区(SGA)的共享内存区域并启动Oracle ASM和数据库后台进程,。后台进程和SGA的组称为Oracle ASM实例或Oracle DB实例。 ASM实例中的SGA分为四个主要区域: -共享池:用于元数据 -大型池:用于并行 -ASM高速缓存:用于在重平衡操作期间读取和写入块 -空闲内存:可用的未分配内存 ASM的建议最低内存为256M。ASM实例默认启用自动内存管理,该功能将动态优化各个SGA内存组件的大小。ASM实例所需的内存量将取决于ASM管理的磁盘空间量。ASM实例的第二部分是后台进程。ASM实例可以具有多个后台进程,并不是所有进程始终都会出现。 ASM组件 -ARCn:归档进程 -SMON:系统监控进程 -PMON:程式监控进程 -DBWn:数据库写入进程 -LGWR:日志写入进程 -CKPT:检查点进程 -DIGA:诊断进程 -Jnnn:作业队列进程 -QMNn:队列监控进程 -PSP0:进程衍生进程 -RECO:恢复器进程 -VKTM:虚拟计时器进程 -MMAN:内存管理器进程 ASM在RAC集群中的进程 -LMON:全局入队服务监控进程 -LMDn:全局入队服务守护程序 -LMSn:全局高速缓存服务进程 -LCKn:锁定进程 ASM实例-主要进程 -RBAL:协调重新平衡活动 -ARBn:一个或多个从属进程,用于执行重平衡活动 -GMON:负责管理磁盘级活动,如删除或脱机以及提高ASM磁盘组兼容性 -MARK:根据需要将ASM分配单元标记为过时 -Onnn:一个或多个ASM从属进程,形成与ASM实例的一组连接,用于交换消息 -PZ9n:一个或多个并行从属进程,用于从GV$视图提取有关集群ASM安装的数据 ASM实例初始化参数 -INSTANCE_TYPE:设置ASM,这是唯一一个必须定义的参数。对于数据库实例,该参数值设置为RDBMS -ASM_POWER_LIMIT:控制重平衡操作的速度。值的范围从1到11(默认值为1)。 -ASM_DISKSTRING:是一个与操作系统相关的值,ASM使用它来限制搜索时考虑的磁盘集(默认为空,表示所有)。 -ASM_DISKGROUPS:ASM实例需要装载的磁盘组的名称列表。该参数没有默认值。 -ASM_PREFERRED_READ_FAILURE_GROUPS:指定包含首选读取磁盘的故障组。 -DIAGNOSTIC_DEST:指定自动诊断存储(ADR)主目录。跟踪文件/预警日志/核心文件和意外事件文件。该参数的默认值由ORACLE_BASE派生 -LARGE_POOL_SIZE:指定大型池分配堆的大小(以字节表示) -REMOTE_LOGIN_PASSWORDFILE:指定Oracle软件是否检查密码文件。默认值为EXCLUSIVE 数据库实例与ASM之间的交互 1.数据库请求创建文件 2.ASM前台进程创建一个持续操作目录(COD) 条目并在磁盘组中为新的文件分配空间。 3.ASM数据库进程接收新文件的区映射 4.现在文件处于打开状态,数据库进程直接初始化该文件。 5.初始化后,数据库进程请求提交文件创建。这会导致ASM前台进程清除COD条目并将文件标记为已创建。 6.文件提交确认会隐式关闭该文件。将来发生I/O时,数据库实例需要重新打开该文件。 –数据库实例和ASM实例协同工作。数据库实例必须与ASM交互,以便将数据库文件映射到ASM区。 –数据库I/O不通过ASM实例来传输。实际上,数据库直接根据ASM文件执行I/O操作。 ASM实例:动态性能视图 -ASM实用程序使用SQL语言访问这些表来检索仅含元数据的信息 -包含许多专用的ASM相关视图 V$ASM_ALIAS V$ASM_ATTRIBURE V$ASM_CLIENT V$ASM_DISK V$ASM_DISK_IOSTAT V$ASM_DISK_STAT V$ASM_DISKGROUP V$ASM_DISKGROUP_STAT V$ASM_FILE V$ASM_OPERATION V$ASM_TEMPLATE ASM系统权限 -ASM实例没有数据字典 SYSASM–OSASM(asmadmin)—全部管理权限 SYSDBA–OSDBA(asmdba)—可访问ASM中存储的数据,在当前版本中还具有SYSASM权限 SYSOPER–OSOPER(asmoper)—受限权限,可使用一组非破坏ALTER DISKGROUP命令以及启动和停止ASM实例 启动和停止ASM实例使用SQL*Plus $sqlplys / as sysasm SQL>startup ALTER DISKGROUP … MOUNT; SQL>shutwon abort 【OPEN】 -FORCE:在重新启动ASM实例之前向它发出SHUTDOWN ABORT -MOUNT或OPEN:装载ASM_DISKGROUPS初始化参数中指定的磁盘组 -NOMOUNT:启动ASM实例而不装载任何磁盘组 -RESTRICT:在受限模式下启动实例。RESTRICT可以与MOUNT/NOMOUNT/OPEN组合使用(受限模式下数据库实例不能对磁盘进行操作) 【SHUTDOWN】 -NORMAL(默认关闭模式):ASM在卸载所有磁盘组并关闭ASM实例之间,等待正在进行的SQL操作完成,等待当前连接的用户从该实例断开。不会接受新的连接 -IMMEDIATE或TRANSACTIONAL:ASM在卸载所有磁盘组并关闭实例之前,等待正在进行的SQL操作完成,不会等待当前连接的用户断开连接。 -ABORT:ASM实例立即关闭,而不是按顺序卸载磁盘组。这将导致下次启动ASM时进行恢复操作。如果有任何数据库实例与ASM实例连接,则该数据库实例也将终止。 启动和停止ASM实例使用srvctl $srvctl start asm -o mount $srvctl stop asm -f $srvctl status asm 启动ASM实例 srvctl start asm [-o <start_option>] <start_option>启动选项 (FORCE/MOUNT/OPEN/NOMOUNT或RESTRICT) 停止ASM实例 srvctl stop asm [-o <stop_option> ] -f <stop_option>关闭选项 NORMAL/IMMEDIATE/TRANSACTIONAL或ABORT -f是强制 ASM实例的状态 srvctl status asm 启动和停止ASM实例使用asmcmd ASMCMD>startup ASMCMD>shutdown –abort 启动选项 –nomount 不装载磁盘组的情况下启动ASM实例 –restrict 启动ASM实例并限制数据库使用 -pfile <pfile.ora> 使用定制pfile启动ASM实例 关闭选项 –immediate 立即执行关闭 –abort 中止所有现有操作 磁盘组 磁盘组是一个或多个磁盘的逻辑分组,ASM将其作为一个集合来管理。每个磁盘组都包含与自身相关联的元数据。在概念上,ASM磁盘组类似于典型存储区域网络中的逻辑卷。 一个磁盘组可以包含属于多个数据库的文件,而一个数据库可以使用来自多个磁盘组的不同文件。 磁盘组的冗余设置: -外部冗余,其中ASM不提供任何镜像,磁盘都是假设为高度可靠。 -正常冗余,其中ASM默认支持双向镜像,从而保证在较不可靠的存储上实现数据完整性。 -高冗余,其中ASM默认支持三向镜像,从而更改地保证数据完整性。 ASM最多支持创建63个磁盘组。 ASM磁盘 -是为ASM磁盘组预配的存储设备 -通过正常O/S接口来访问 -必须可由ASM所有者读取和写入 -必须可由集群中的所有节点访问 -在不同的节点上可以有不同的O/S名称或路径 -可以是: -整个物理磁盘或物理磁盘的分区 -存储阵列中的磁盘或分区 -逻辑卷(LV)或逻辑单元(LUN) -网络连接文件(NFS) ASM分配单元 ASM磁盘划分为分配单元(AU) -在创建磁盘组时可以配置AU大小 -AU默认大小为1MB -足够小,能够被数据库缓存;但又足够大,能够提供高效的后续访问 -允许的AU大小 -1,2,4,8,16,32或64MB -在超大型数据库(VLDB)中或使用专门的存储硬件,较大的AU可能非常有用。 ASM文件 -是由AU组成的ASM区的集合 -可变大小的区支持大型文件 -对数据库内核显示为普通文件 -文件名称以“+”开头 -例如,+DATA/orcl/datafile/system.256.68912343 -可以与可选的文件名别名相关联 -例如,+DATA/datafile/mydb/system01.dbf -在磁盘组中的磁盘中平均分布 -根据磁盘组中定义的策略进行镜像 ASM区映射 ASM文件–>区映射–>磁盘组 ASM通过称为区映射的元数据跟踪文件的分布。区映射是一个表,将文件中的数据区映射到磁盘上的分配单元。 文件区与分配单元之间的关系: -一个AU用于前20,000个区(0-19999) -4个AU用于接下来的20,000个区(20000-39999) -16个AU用于40,000以上的区 条带化粒度 ASM用于负载平衡的条带化策略与用于等待时间的条带化策略不同 条带化主要用途: -在磁盘组的所有磁盘中执行I/O负载平衡 -改善I/O等待时间 -对于负载平衡,粗粒度条带化(AU/区单位)将多个分配单元连接起来使用 细粒度条带化 细粒度条带化在分配单元组中放置128KB条带单元 -磁盘组具有8个磁盘和外部冗余 -使用默认的AU大小:1MB -第一个1MB区在8个AU中以128KB条带形式写入 注意:控制文件和联机重做日志文件只能使用细粒度条带化 ASM故障组 -共享需要容错的一项公用资源的一组磁盘 -镜像的区副本存储在不同的故障组中 故障组可以用于避免单个磁盘/磁盘控制器/I/O网络组件以及甚至整个存储系统的故障。 条带化镜像和故障组示例 故障演练 管理磁盘组 CREATE DISKGROUP DROP DISKGROUP ALTER DISKGROUP ASM实例主要目的是管理磁盘组和保护器数据。ASM实例还将文件分布传送到数据库实例。这里,数据库实例就可以直接访问磁盘组中存储的文件。 执行这些命令都需要SYSASM或SYSDBA权限,且必须从ASM实例发出。 CREATE DISKGROUP dgroupA NORAML REDUNDANCY FAILGROUP controller1 DISK ‘/devices/A1’ NAME diskA1 size 120G FORCE, ‘/devices/A2’ FAILGROUP controller2 DISK ‘/devices/B1’, ‘/devices/B2’; DROP DISKGROUP dgroupA INCLUDING CONTENTS; ALTER DISKGROUP dgroupA ADD DISK ‘/dev/sde1’ NAME A5, ‘/dev/sdf1’ NAME A6, ‘/dev/sdg1’ NAME A7, ‘/dev/sdh1’ NAME A8; ALTER DISKGROUP dgroupA ADD DISK ‘/devices/A*’; ALTER DISKGROUP dgroupA DROP DISK A5; ALTER DISKGROUP dgroupA DROP DISK A6 ADD FAILGROUP controller3 DISK ‘/dev/sdi1’ NAME A9; ALTER DISKGROUP dgroupA UNDROP DISKS; ALTER DISKGROUP dgroupA REBALANCE POWER 5;–手动开始重平衡 ALTER DISKGROUP dgroupA DISMOUNT;–卸载dgroupA磁盘组 ASM磁盘组兼容性 每个磁盘组的兼容性都可以分别控制: -ASM兼容性控制磁盘上ASM元数据结构 -RDBMS兼容性控制最低使用者客户端级别 -ADVM兼容性确定磁盘组是否可以包含Oracle ASM卷 设置磁盘组兼容性的操作时不可逆的 DB实例 >=ASM磁盘组(RDBMS<=ASM>=ADVM)<=ASM实例 ASM磁盘组属性 -au_size,ASM允许使用在创建磁盘组时指定的不同分配单元(AU)大小。1/2/4/8/16/32或64MB -compatible.rdbms,RDBMS数据库版本,数据库与ASM之间交换的消息的格式 -compatible.asm,ASM实例版本,磁盘上ASM元数据结构的格式 -compatible.advm,ADVM兼容性 ASM实例版本,允许在磁盘中包含Oracle ASM卷 -disk_repair_time,0M到2^32D,磁盘脱机之后删除此磁盘之间的时间量,默认值3.6H,ALTER DISKGROUP …DISK OFFLINE; -template.tname.redundancy,UNPROTECT|MIRROR|HIGH,指定模板的冗余 -template.tname.stripe,COARSE|FINE,指定模板的条带化属性 对于每个已定义的磁盘组,可以通过V$ASM_ATTRIBUTE固定视图查看所有已定义的属性。 检索ASM元数据 SELECT f.TYPE, f.redundancy, f.striped, f.modification_date, a.system_created, a.name FROM v$asm_alias a, v$asm_file f WHERE a.file_number = f.file_number AND a.group_number = f.group_number AND TYPE = ‘DATAFILE’; ASMCMD>ls -l +DATA/orcl/datafile