ASM

----
asm管理大量物理卷并将他们作为一个或多个逻辑卷呈交给oracle。
物理卷可以是实际的磁盘或磁盘分区或者是隶属操作系统的卷管理器管理的卷。无论采用哪种方式,他们都不能使用任何文件系统格式化。他们必须时原始设备。asm会接受原始设备并将他们放到许多asm磁盘磁盘组中,磁盘组就是逻辑卷。
asm磁盘必须时没有文件系统的原始磁盘,但不必时实际的磁盘,他们可以时磁盘,磁盘分区或LVM管理的逻辑卷。
asm只能用于数据库和恢复文件,而不能用于oracleHome或其他任何事物。数据库文件的定义很宽泛,但是不包括跟踪文件,警报日志,口令文件或静态参数文件。
asm镜像默认时单镜像,但是可以设置为无镜像或双镜像;不能禁用条带化。
----------------asm实例
常规的磁盘活动不涉及ASM实例。ASM实例是一种使文件可用的管理和控制功能,它不执行时间的I/O工作。
asm实例像其他任何实例一样。它有一个SGA和一些重用的后台进程,但时它不能加载或打开数据库,它所做的工作就是定位并管理asm磁盘。由于它不能加载或打开数据库,因此它永远不能读取数据字典。为此,只能作为sysoper,sysdba,sysasm使用口令文件或操作系统身份验证的方式联接到它。sysasm是一种oracle11g版本引入的角色,已允许分离数据库管理员和asm管理员的职责。
应该为每台计算机创建一个asm实例,并使用它代表运行在计算机上的所有rdbms实例来管理此计算机上所有可用的asm磁盘。
一个asm实例除了常规的进程外还有两个后台进程,他们是RBAL和ARBn进程,用来处理再平衡活动.asm磁盘中多个asm磁盘之间的数据移动来响应磁盘组中磁盘的删除或添加。如果在磁盘组中添加一个新设备,那么asm将会检测到该设备并启动一个操作以便使用该磁盘。这意外这将数据移动到磁盘上,考虑增加的条带化可能性并包括新磁盘以便均匀地分配I/O工作负荷。RBAL进程协调这种在平衡活动,而由ARBn进程完成此任务。
再平衡操作将自动启动以响应磁盘组重配置。
为了创建和配置磁盘组,必须首先连接到asm实例并启动它。一旦创建并加载了磁盘组,asm实例将会等待来自RDBMS实例的访问文件的请求。
asm实例代表rdbms实例管理asm磁盘组中的文件,有rdbms实例创建,读取和写入这些文件。
所有asm文件都跨越磁盘组中的所有asm磁盘进行条带化。空间的分配依照分配单元(AU)实施。标准的AU大小是1MB,并且对于数据访问倾向采用适度大的磁盘I/O操作的数据来说,条带化的单位也是1MB。这种做法称为粗略的条带化。对于读和写操作请求通常针对较小的I/O单位的文件来说,AU自身按照128KB的条带化跨越磁盘实施条带化,这称为精细化条带化。
创建和管理asm文件的语法与基于文件系统的文件采用的语法完全相同。所有文件都是通过rdbms实例使用常见命令创建并管理的。唯一的不同之处是文件名:当创建一个数据文件时,值需指定文件应该指向的磁盘组的名称,asm就会生成实际的文件名并管理物理位置。

获取asm文件的唯一途径时通过oracle实用程序。但是它确实表明必须使用rman来备份asm数据文件,归档日志和控制文件。

因为不能使用任何操作系统提供的工具写入asm磁盘组,对于数据文件来说,这种迁移必须使用rman通过备份和还原操作来完成的。为了移动联机日志,在asm磁盘组中创建新的成员并删除旧的成员。

-----------------使用文件模拟原始设备。
LIUNX
dd if=/dev/zero of=/u01/app/oracle/raw1.disk bs=1024 count=1000000
dd if=/dev/zero of=/u01/app/oracle/raw2.disk bs=1024 count=1000000
WINDOWS
查找大文件,它的大小时1024字节的倍数,将它复制到选定的目录两次。在这个示例中,文件恰好是一个关盘的ISO映像。
copy \tmp\oel2\d1.iso \app\oracle\raw1.disk
copy \tmp\oel2\d1.iso \app\oracle\raw2.
当创建的文件分配到磁盘组时,asm将会进行格式化。asm会做一些检查(例如,它不会接受oracle数据库的副本),但是几乎任何文件都应该可以作为文件来源。
-------------常用的asm初始化参数
instance_type     对于asm实例,值必须是asm
instance_name   必须加前缀‘+’
asm_power_limit  控制用于在平衡操作的asmb进程的数量,默认值是1,这是最小数量
asm_diskstring 表示分配给asm的磁盘的路径列表。当asm扫描磁盘时,它将使用该字符串并查找有权打开的任何设备。如果成功地发现相应的设备,asm实例上的V$asm_disk视图将会反映发现的磁盘。
asm_diskgroups启动时要再加的磁盘组。
-------------启动asm实例的前置条件
为了启动实例,必须作为sysasm用户连接它,并发出startup命令。可以通过将oracle_sid环境变量设置为实例名称(不要忘记必须前缀‘+’符号)来创建连接,或者如果像上一个示例那样已经创建和启用了一个
口令文件,则可以使用口令文件身份验证的方式进行连接。启动首先经历nomount,此时在内存中构建实例并且识别由ASM_DISKSTRING参数标识的磁盘。然后,实例会加载由ASM_DISKGROUP指定的磁盘组。对于
asm实例不存在mount或open模式,可以加载或卸载磁盘组。

rdbms实例使用由asm实例管理的磁盘组中的文件。如果asm实例没有启动和加载磁盘,那么rdbms实例不能打开。因此必须通过操作系统实用程序确保在依赖它的rdbms实例之前启动asm实例。如果asm实例终止,那么也会终止依赖它的rdbms实例。如果当向一个asm实例发出shutdown命令时,一个或多个rdbms实例已打开了其中一个磁盘中上的文件,
那么将会收到下面消息:ora-15097 cannot shutdown asm instance with connected rdbms instance
例外是shutdown abort,它会终止asm实例并因此造成rdbms实例终止。
如果rdbms实例失败,asm实例不会受到影响。如果asm实例失败,依赖它的rdbms实例就会异常中止。

---------------创建一个参数文件并使用它来启动一个asm实例。
本练习中所有步骤都应该在操作系统提示符下完成。注意第(2)步仅适用于windows系统
(1)配置cluster synchronization Services Daemon .这要求运行oracle_home/bin目录中的localconfig 实用程序。在unix上,必须作为根用户运行此命令
localconfig add;在windows上,将会看到一个已创建并置于自动启动的名为oracleCSService服务;在unix上,将会在/etc/initabl文件中看到一个记录项,它会在运行级别3和运行级别5上重新
启动init.cssd进程。
(2)
(3)在oracle_home\dbs创建init+asm.ora的文件
instance_name='+asm'
instance_type='asm'
asm_diskstring='/u01/app/oracle/raw*.disk'
_asm_allow_only_raw_disk=false这是一个隐藏参数,它允许本练习使用文件来替代原始设备
memory_target=0禁用自动内存管理
(4)将oracle_sid环境变量设置为asm实例名称
(5)作为sysasm使用sql*plus连接到asm实例,并启动该实例
(6)使用下面sql语句确认asm已经找到磁盘
select path,os_mb from v$asm_disk;
磁盘组由asm实例创建,随后由rdbms实例使用。为了创建磁盘组,至少要为磁盘组取一个名称并分配通过asm磁盘字符串找到的并能够在v$asm_disk视图中看到的一个磁盘列表
sql>create diskgroup dg1 disk '/dev/sdc','/dev/sdd','/dev/sde','/dev/sdf'
如果指定了一个已属某个磁盘组的磁盘,则该命令会失败。asm提供的默认冗将余级别是“标准”冗余,即镜像AU一次。将会跨越所有磁盘条带化所有文件来获得最大性能。对于标准冗余,磁盘组至少要有两个磁盘,磁盘组的有效大小将是分配的总空间的一半。
为了重写默认的normal冗余,也数据单镜像,向create diskgroup命令添加关键字high redundancy或external redundancy。
high redundancy将会为每个分配单元创建3个副本。
external redundancy
通过将一个磁盘组中的asm磁盘放置到股故障组中可以进一步提高冗余性。当asm镜像扩展卷时,它永不会将扩展卷镜像到同一个故障组中的另一个磁盘。这意味着能够更好地防范多个磁盘出现故障。默认情况下。数
认为每个磁盘是它自己的故障组;这使得asm能够完全自由地将该磁盘的数据镜像到组中的其他任何磁盘。但是,如果一些磁盘时在硬件级别连接时,通常连接到相同的控制器上,将不会希望asm在他们之间进行镜像。
使用故障组强制asm在组内一个不同的磁盘子集上创建镜像。这样做的一个示例是:
create diskgroup dgroups normal redundancy
failgroup controller2 disk '/dev/rdsk/c2*'
failgroup controller3 disk '/dev/rdsk/c3*'
该命令创建一个包含由给定的通配符匹配的所有磁盘设备构成的磁盘组,也数据挂起第二个和第三个控制器的所有磁盘。但是使用故障组(他们的名称并不重要)指示asm用于不要在同一个控制器上两个磁盘之间镜像数据。

create diskgroup dg1 disk 'c:\app\oracle\raw1.disk','c:\app\oracle\raw2.disk';
select name,group_numer,type,state,total_mb from v$asm_diskgroup;
注意,该组的冗余为normal,因此可用的总空间实际上只有一半大小,该组是mounted表明它可供使用。
为了确保在启动asm实例时自动挂在磁盘组,在参数文件添加如下一行
asm_diskgroups=dg1
如果没有这样做,那么每次启动asm实例时必须手动加载磁盘组
alter diskgroup dg1 mount;


asm磁盘组是在asm实例中创建的,asm文件是在rdbms实例中创建的。创建数据文件,临时文件,和日志文件的标准命令都可以采用一个磁盘组名称来代替一个文件名。
sql>create tablespace new_tbs datafile '+dg1' size 100m;
sql>alter tablespace system add datafile '+system_dg' size 1000m;
sql>alter database add logfile group 4 '+dg_log1','+dg_log2' size 100m;
第一个命令是在磁盘组dg1中创建一个含有一个数据文件的新的表空间。
第二个命令项system表空间添加一个数据文件,该表空间处于专门为system数据文件创建的一个磁盘组中。
第三条命令创建一个新的联机日志文件组,它含有不同磁盘组中的两个成员。这些组很可能具有external冗余的磁盘组,因此可以依赖多路复用来提供容错性。
为了指引归档日志到ASM,设置log_Archive_Dest参数以指向磁盘组
sql>alter system set log_Archive_DEst_1='location=+dg_arc1';
sql>alter system set log_Archive_Dest_2='location=+dg_arc2';
还可以将闪回恢复区指引到asm磁盘组
alter system set db_Recovery_file_Dest='+dg_flash'

-----------------------------使用rman将控制文件迁移到ASM
rman还是将数据库从传统的文件系统存储区迁移到asm存储区的唯一可用的工具。假设您有三个磁盘组:组dg1用于数据文件,组dg2,dg3用于控制文件和联机重做日志文件
要迁移控制文件,更改controlfile实例参数以指向磁盘组,然后关闭数据库闭关在nomount模式下启动它。
alter system set controlfiles='+dg2','+dg3' scope=spfile;
shutdown immediate;
startup nomount;
然后,启动rman并从它的原始位置还原控制文件在
 rman>restors controlfile from '/u01/app/oracle/oradata/orcl/control01.ctl'
现在可以加载和打开数据库,使用asm设备上的控制文件

---------------------使用rman将所有数据文件系统迁移到asm磁盘组
shutdown
startup mount
backup as copy database format '+dg1';
switch database to copy;
alter database open;
----------------
sql>alter database add logfile member '+dg2','+dg3' to group 1;
sql>alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo01a.log','/u01/app/oracle/oradata/orcl/redo02a.log' ;
--------------
最后,必须转移临时表空间临时文件,不能备份这些文件,技巧是删除他们并在磁盘中创建新文件。只创建新的临时表空间并删除原始的临时表空间可能更简单些。
create temporary tablespace tempasm tempfile '+dg1' size 1g;
alter database default temporary tablespace tempasm;
drop tablespace temp including contents and datafiles;

-------------asm的一些主要优点:
(1)将I/O均匀地分别到所有可用磁盘驱动器以防止产生热点,并且最大化性能。
(2)不再需要过多地进行配置工作,并且最大化推动数据库合并的存储资源利用
(3)内在地支持大文件
(4)在增量增加或删除存储容量后执行自动联机重分配。
(5)维护数据的冗余副本以提供高可用性,或者利用第三方的raid功能
(6)支持oracle 10g以及rac
(7)可以利用第三方的多路经技术。

使用nomount选项可在不安装任何磁盘组的情况下启动asm实例,而使用mount选项则会安装所有已定义的磁盘组。

-----------------------------asm和多路经
I/O路径一般由启动器端口,结构端口,目标端口和LUN组成。I/O路径的每种赔了方式都被认为是一个独立的路径。动态多路径/故障恢复工具将这些独立的路径聚集为单个的逻辑路径。这种路径抽象提供了多个主机
总线适配器(HBA)之间的I/O负载平衡以及产生I/O路径故障时不中断的故障恢复。多路径软件需要所有必需的磁盘在每个可用的,符合条件的HBA上可见。MP驱动程序将通过执行SCSI查询命令检测多个路径。多路径软件也提供多路径软件驱动程序。为了支持多路径,实际的HBA驱动程序必须服从基础驱动程序提供的多路经服务。确保正在考虑的配置经过供应商的证明。
--多路径工具提供了如下的优点
(1)为多路径的LUN提供了单个的块设备接口
(2)检测I/O路径中的任何组件故障,例如结构端口,通道适配器和HBA
(3)发生路径丢失故障时,确保I/O重新路由到可用的路径,而不会产生进程中断。
(4)在时间发生时自动重新配置多个路径。确保尽可能使产生故障的路径重新生效,并且提供自动恢复功能。
(5)配置多个路径,从而使用各种负载平衡方法最大化性能,例如循环复用,最少I/O队列或最少服务时间。

多路径软件实例包括emc powerpath ,veritas dmp,sun traffic manager,hitachi hdlm和ibm sddpcm.
linux 2.6有一个基于内核的多路经驱动程序,称为device mapper。此外,一些供应商也提供了多路经解决方案。
构建asm基础结构的第一项任务是在asm管理中发现和关联(添加)磁盘。
asm必须只使用字符设备作为磁盘,而不能使用块设备。根据oracle10.2版本的管理指南,用户可以使用asmlib访问块设备:ASMLib是ASM的可选附件,它的目标是为ASM支持的内核提供发现和访问块设备的备选接口。在大多数unix系统上,字符设备显示为/dev/rdsk,而在linux上则显示为/dev/raw/rwa。唯一的例外情况时在asm使用nas文件系统作为磁盘时。

-----------------------asm磁盘组
一旦发现了磁盘,就可以创建封装一个或多个这些磁盘的磁盘组。
磁盘组中会隐士地创建ASM文件系统层,该文件系统对于用户是透明的,只可以通过asm,联接的数据库以及10.2版本中的asm命令行工具访问,并且内在地具有自动化文件级数据分条和镜像功能。在asm磁盘组中创建
的数据库文件将其文件盘区平均地分布到磁盘组中的所有联机磁盘,从而提供均匀的I/O负载。
成功创建磁盘组后,包括创建日期,磁盘组,和冗余类型的元数据信息存储在SGA和DATA磁盘组中每个磁盘的磁盘头中。
v$asm_disk视图现在将反映这个磁盘头信息。一旦这些磁盘处于asm管理下,随后的所有磁盘组安装操作将造成asm重新读取并确认asm磁盘头。安装磁盘组时,无论是在asm启动时的安装或随后的安装,都建议用户一次性安装所有必需的磁盘组,实现该操作可最小化多个asm磁盘发现扫描的系统开销。

asm实例也在v$asm_disk,v$asm_disk_stat视图中驻留I/O统计信息,这些视图包括执行的读/写操作,处理的读/写块,以及引发的读/写错误。基于asm的实用程序asmiostat,可用于显示基于asm磁盘的I/O统计信息。来自oracle的该使用程序可以复制到文件中,并且针对任何10.2ASM实例执行。
查询v$Asm_disk,v$asm_diskgroup是一项昂贵的操作,因为每次执行该操作都涉及执行磁盘发现。为了最小化喜糖开销并且允许轻量化地访问该数据集。10.2版本中引入了两个新的视图:
v$asm_dis_Stat和v$asm_Disgroup_Stat这个两个视图等同v$Asm_disk,v$asm_diskgroup。
然而通过内存轮询v$asm_dis_Stat和v$asm_Disgroup_Stat视图,因此不需要执行磁盘发现。这些新的视图提供了有效的轻量访问,因此em可以周期性地在磁盘级上查询性能统计信息,并且在磁盘组级上聚集空间使用情况统计信息,而不会导致大量的系统开销。

对于没有使用外部冗余的系统,asm通过故障组提供了自己的内部冗余机制和额外的高可用性。故障组是磁盘组的一个子集,根据定义,它时一个磁盘集合,可能会由于一个相关组件(例如控制器或整个阵列)产生故障而变得不可用。因此,给定磁盘组的两个独立故障组中的磁盘不能共享常见的故障组件。如果为磁盘组定义故障组,asm就会容忍单个故障组中的多个磁盘同时产生的故障。

阿斯名使用独特的镜像算法:不镜像磁盘,而是镜像盘区。作为结果,为了在产生故障时提供连续的保护,只需要磁盘组中的空间容量,而不需要预备一个热后备磁盘。不建议用户创建不同尺寸的故障组,因为这将会导致在分配辅助盘区时产生问题。asm将文件的主盘区分配给磁盘组中的一个磁盘时,它会将该盘区的镜像副本分配给磁盘组中的另一个磁盘。给定磁盘上的主盘区将在磁盘组中的某个伙伴磁盘上具有各自的镜像盘区。

asm确保主盘区和其镜像副本不会驻留在相同的故障组中。磁盘组的冗余可以有如下形式:双向镜像文件(至少需要两个故障组)的普通冗余(默认冗余)和使用三向镜像(至少需要3个故障组)提供较高保护程度的高冗余。一旦创建磁盘组,就不可以改变它的冗余级别。w为了改变磁盘组的冗余,必须创建具有适当冗余的另一个磁盘组,然后必须使用rman还原或dbms_file_transfer将数据文件移动到这个新创建的磁盘组。

创建时具有普通冗余或高冗余的磁盘组包含分别带有两个或三个镜像文件。选择第一个分配的文件盘区作为主盘区,而将镜像的盘区称为辅助盘区。在高冗余的情况下将会有两个辅助盘区。这种分为主盘区和辅助盘区的逻辑分组称为盘区集。盘区集总是包含完全相同的数据,因为他们时彼此之间的镜像版本。因此,在将块写入到文件时,并行写入盘区集中的每个盘区。然而,在从磁盘中读取块时,总是从主盘区中读取该块,除非不能读取主盘区,需要注意的是,磁盘组(以及故障组)中的每个磁盘都包含接近相同数据主盘区和辅助盘区,从而可以在所有磁盘之间均匀地分布读I/O活动。这种方式不同于大多数的逻辑卷管理器,这些管理器具有主磁盘集和镜像磁盘集。

-------------------------下面是asm重新平衡操作的典型流程

在asm实例上,dba添加或删除磁盘组中的磁盘:
(1)调用RBAL进程创建重新平衡计划,然后开始协调重新分布.
(2)RBAL将计算执行该认为所需的估计时间和工作,然后发送消息给ARBX进程以实际地处理请求。通过asm_power_limit参数直接确定调用的ARBx进程的数量
(3)更新持续操作目录(元数据)以反映重新平衡活动
(4)将重新定位的每个盘区分配给ARBX进程
(5)ARBX对这些盘区执行重新平衡。锁定,重新定位,解锁每个盘区。这个v$asm_operation中显示为operation REBAL.
 重新平衡涉及在物理上移动AU盘区。这种移动的影响一般较低,因为一次只对一个AU盘区执行重新平衡,因此,在任何给定时间,每个ARBx进程只有一个未完成的I/O,这应该不会给联机数据库活动带来负面影响。然而,一般建议用户在非高峰期间调度重新平衡操作。
也可以使用alter diskgroup命令为特定的重新平衡活动设置速度极限值,该值只对特定的重新平衡任务有效。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值