技术开发 频道

管理Oracle RAC中的存储

    2、在RAC中的ASM Instance和Crash 恢复

    每个disk group是自我描述的,包含了自己的文件目录、磁盘目录和其他数据,如元数据的日志信息。ASM自动的通过使用镜像技术(和外部磁盘组冗余一样)保护这些元数据。

    对于多ASM Instance加载相同的disk groups的情况,如果一个ASM Instance失败,其他ASM Instance自动恢复由失败的Instance造成的暂时的ASM元数据的变更。这种情况叫做ASM Instance恢复,并且它是被Global cache Service自动的、及时的监控的。

    对于多个ASM Instance挂载不同disk groups的情况,或是单个ASM Instance配置的情况,如果一个ASM Instance失败,并且此时ASM 元数据正在被打开用于更改,则那些尚未被加载到其他ASM Instance的disk groups将不被恢复,直到其被再次加载。当一个ASM Instance加载了一个失败的disk group,它会读取disk group log并恢复暂时的更改操作。这被称作是ASM crash恢复。

    因此,在使用ASM clustered Instance,推荐将所有的ASM Instance都挂载相同的disk groups。然而,可能存在这样的情况,一个disk group在本地加载的磁盘上,只有当前node可见。

    note:在这里,一个Oracle Database Instance的失败并会有重大影响,因为只有ASM Instance才可以更新ASM 元数据。

    3、ASMLibs

    它是一个用于ASM的支持库。其目的就是为了提供更好的高效的机制用于辨识和访问ASM disk groups中的块设备。此API 可以作为一个OS标准接口的替代物。

    ASMLib可以被分成三个功能集合:

    *  设备的发觉功能:在任何ASMLib中,必须被执行查找字符串经常包含了标识符前缀。对于Oracle提供的Linux ASMLib,前缀是ORCL。

    *  I/O处理功能扩展了OS接口,并提供了非常好的化的安排I/O操作的异步接口并管理I/O操作完成事件。这个功能被作为OS的内核应用于设备驱动程序

    *  性能和可靠性功能,使用I/O处理控制结构在Oracle Database和后面的存储设备之间传送元数据,允许后面的存储有额外的逻辑。

    对于ASMLib安装的过程,我就不累述了,在配置RAC是,已经用过了。

    要说的是有两个packages,分别是oracleasmlib(提供实际的ASM库)和oracleasm(提供配置和ASM驱动程序使用的工具)。在执行/etc/init.d/oracleasm configure命令后,它创建了/dev/oracleasm加载点用于ASMLib与ASM驱动程序交互。在使用RAC时,它的安装和配置必须在所有节点上进行。

    4、ASM管理——ASM Instance

    1)ASM Instance功能

    ASM Instance的主要目的是管理disk groups、保护其数据。ASM Instances也会将文件的布局信息传输给Database Instances。这样,Database Instance就可以直接访问存储在disk groups上的。

    有几个新的disk group管理命令,都需要SYSDBA权限才能执行,并且必须从ASM Instance上发起。

    可以添加新disk groups(CREATE DISKGROUP),可以修改已经存在的disk groups,为其添加、移除disks,等其他操作(ALTER DISKGROUP)。也可删除已经存在的disk groups(DROP DISKGROUP)。最后,可以阻止Database Instance与ASM Instance的链接。当ALTER SYSTEM ENABLE RESTRICTED SESSION 命令向ASM Instance发出,Database Instance就无法链接到ASM Instance上了。相反的,ALTER SYSTEM DISABLE RESTRICTED SESSION命令就可以从Database Instance上建立连接到ASM Instance上了。此命令是出于维护的目的,阻止Database Instances对disk groups的访问,ASM Instance可以start up并加载disk groups。

    2)ASM Instance的创建

    当创建一个ASM-enabled Database,DBCA会确定一个ASM Instance是否已经在主机上存在。如果存在,会显示一个disk groups列表,可以选择ASM-enabled Database要使用存储的disk groups。当没有发现ASM,DBCA会创建一个ASM Instance。作为ASM Instance创建过程的一部分,DBCA自动创建会在oratab文件中自动创建一个平台支持的实体,主要是用于discovery的目的。同时,ASM Instance参数文件和ASM Instance 密码文件也会自动创建。在创建ASM Instance前,可能需要指明部分ASM Instance的部分初始化参数。在ASM Instance被创建后,DBCA允许创建新的disk groups,用于存储 Database。

    note:ASM Instance远远小于Database Instance。64MB 的 SGA对于最大的ASM Instance就已经足够了。

    3)ASM Instance初始化参数

    参数文件在$ORACLE_HOME/dbs中。

    *  INSTANCE_TYPE:对于ASM Instances应该设置为ASM

    *  DB_UNIQUE_NAME:指明ASM Instance管理disk groups的Service provider的名称。默认是 +ASM。

    *  ASM_POWER_LIMIT:它控制了rebalance 操作的速度。可选值的范围是1到11,其中11是最快的。如果省略该值,则默认是1。用于进行rebalance 操作的从属进程会根据手动的rebalance 命令指明的并发级别或是此参数指明的数量创建。

    *  ASM_DISKSTRING:它是一个依赖操作系统的值,用于限定ASM在发现disks集合。当新的disk被加载到一个disk group,每个已经加载此disk group的ASM Instance必须可以通过ASM_DISKSTRING发现该新加入的disk。如果没有设置,则被认为是NULL,并且ASM磁盘discovery会查找所有ASM Instance曾读写访问过的disks。

    *  ASM_DISKGROUPS:是ASM Instance启动或执行ALTER DISKGROUP ALL MOUNT命令时加,载到上的disk groups的名字列表。

    note:ASM Instances使用的内部包是在LARGE POOL中执行的,所以,必须设置初始化参数LARGE_POOL_SIZE,并至少为8MB。对于其他buffer参数,可以使用其默认值。

    具体实例:

    INSTANCE_TYPE = ASM
    DB_UNIQUE_NAME = +ASM
    ASM_POWER_LIMIT = 1
    ASM_DISKSTRING = ‘/dev/rdsk/*s2′, ‘/dev/rdsk/c1*’
    ASM_DISKGROUPS = dgroupA, dgroupB
    LARGE_POOL_SIZE = 8MB
    PROCESSES = 25 + 15*<#DB inst using ASM for their storage>

    4)RAC和ASM Instance

    使用DBCA在cluster中创建ASM Instance,其步骤基本和single Instance环境是一致的。只是需要先选择oracle real Application clusters Database选项,再选择cluster中的所有节点。DBCA会自动在每个选择的节点上创建ASM Instance。第一个节点为+ASM1,第二个为+ASM2,等等。

    相关的参数有:

    *  CLUSTER_DATABASE:在RAC环境中的每个ASM Instance中,此参数必须设置为TRUE。这使得全局缓存服务在每个ASM Instance上被打开。

    *  ASM_DISKGROUP:多个Instance可以有不同的设置值。但出于之前恢复的因素考虑,建议所有的ASM Instance都加载相同的disk groups集合。此外,所有用于存储RAC Database的disk groups必须被cluster中的所有ASM Instances共享。

    如果在ASM Instance之间共享disk groups,它们的ASM_DISKSTRING初始化参数必须指向相同集合的物理媒介。然而,这个参数无需在每个节点有相同的设置。例如,假设在node A上一个disk group的物理磁盘被映射到/dev/rdsk/c1tld0s2,而在node B上映射到/dev/rdsk/c2tld0s2上,尽管两个节点有不同的disk string设置,它们却通过OS的映射定位到相同的设备上。这种情况可能会出现在node A和node B硬件配置不同的情况下。

ASM_POWER_LIMIT:多个Instances可有不同的设置值。

    5)用EM发现新的ASM Instance

    如果一个ASM Instance被加入一个已经存在的RAC环境中,它不会被自动Database control发现。必须执行下面的步骤令ASM target被发现:

    ①创建一个XML文件,具体格式如下:

    <Target TYPE=”osm_instance” NAME=”+ASMn” DISPLAY_NAME=”+ASMn”>
    <Property NAME=”SID” VALUE=”+ASMn”/>
   <Property NAME=”MachineName” VALUE=”clusnode1_vip”/>
   <Property NAME=”OracleHome” VALUE=”/u01/app/oracle/…”/>
   <Property NAME=”UserName” VALUE=”sys”/>
   <Property NAME=”password” VALUE=”manager” ENCRYPTED=”FALSE”/>
   <Property NAME=”Role” VALUE=”sysdba”/>
   <Property NAME=”Port” VALUE=”1521″/>
    </Target>

    其中:NAME,是ASM target名字,一般是hostname_ASMSid;DISPLAY_NAME,ASM target显示的名字,一般是+ASMn;SID,ASM SID(一般是+ASMn);MachineName,主机名,在RAC环境中使用相应的VIP;OracleHome,ASM oracle Home;UserName,ASM Instance的用户名,默认是sys;password,ASM用户的密码;Role,ASM用户的角色,默认是SYSDBA;Port,ASM 端口号,默认是1521

    ②执行下面的命令

    $ emctl config agent addtarget <filename>

    ③重启agent

    $emctl stop agent
    $emctl stop agent

    note:这个步骤需要在每个node中执行,并且使用6一致的ASM Instance名字。

    6)访问ASM Instance

    ASM Instance不存在数据字典,所以只能通过SYSDBA身份使用OS验证这种方法与其建立连接。如果是建立远程连接,需要使用密码文件。

    一般,SYSDBA权限是通过OS group进行授权的。在UNIX上,典型的是dba group。默认情况下,dba group的成员在节点的所有Instances上有SYSDBA权限,并有管理访问系统所有disk groups的权限。

    7)额外的动态性能视图

    在ASM Instance中,V$ASM_CLIENT为每一个使用通过此ASM Instance管理的disk group的Database Instance包含了一条记录。在Database Instance,每一个带有Database name和ASM Instance name的disk group都包含一条记录。在ASM Instance中V$ASM_DISKGROUP为每个被ASM Instance 发现的disk group 保存一条记录。在Database Instance中,V$ASM_DISKGROUP含有所有加载或是没有加载的disk groups的记录。

    在ASM Instance中,V$ASM_TEMPLATE为每个加载到ASM Instance的disk group中的当前模版都会保留一条记录。在Database Instance中,会包含加载的disk groups的所有模版的记录。

    在ASM Instance中,V$ASM_DISK为ASM Instance发现的每个disk保存一条记录,包括不属于任何disk group的disk。在Database Instance中,保存了Database Instance使用的disk groups中包含的disk的所有记录。

    在ASM Instance中,V$ASM_FILE为加载到ASM Instance中的所有disk groups中的每个ASM file都保存一条记录。在Database Instance中,此视图无记录。

    在ASM Instance中,V$ASM_ALIAS保存了每个加载到ASM Instance中的disk group现存的alias的记录。在Database Instance中,此视图无记录。

    8)ASM Instance的开启与关闭

    ①ASM Instance会在Database Instance被打开的同时被打开。除非初始化参数文件包含了INSTANCE_TYPE=ASM。该参数设置为ASM时,会告知oracle 只打开ASM Instance而不是Database Instance。此外,对于ASM Instance,startup时的mount选项会尝试加载ASM_DISKGROUPS参数指明的disk groups,此时数据库没有被加载。

    对于ASM Instance的STARTUP的其他子句与Database Instance是类似的。例如RESTRICT避免Database Instance与ASM Instance建立连接。OPEN对于ASM Instance是无效的。NOMOUNT对于ASM Instance,不会加载任何disk group。

    ②ASM Instance的关闭

    只要与ASM Instance连接的Database Instances没有stop,shutdown ASM Instance的命令就不会执行。SHUTDOWN NORMAL命令在ASM中,ASM Instance会开始shutdown,并等待所有sessions断开,就像标准的Database Instance。SHUTDOWN IMMEDIATE | TRANSACTIONAL | ABORT命令对于ASM,它会立即终断连接的Database Instance,则所有连接的Database Instance立即被abort。但IMMEDIATE和TRANSACTIONAL时,ASM等待所有进程中的ASM sql完成后才会关闭asm Instance。在single ASM Instance设置中,如果在disk groups被打开并更新时ASM Instance失败,则在ASM Instance被重新初始化后,它会读取disk group的log,恢复所有的暂时的改变。对于多个ASM Instances共享disk groups,如果一个ASM Instance失败,其他ASM Instance会自动恢复由刚失败的ASM Instance发起的暂时的ASM 元数据改变。Database Instance的失败不会对ASM Instance有影响。一般希望ASM Instance总是在主机上运行。当主机重启了,一个ASM Instance必须被自动的开启。ASM的自动startup机制需要OS底层的支持。

 

0
相关文章