创建ASM实例及ASM数据库

系统 1441 0

--========================

-- 创建 ASM 实例及ASM数据库

--========================

 

一、 ASM 相关概念

    1. 什么是 ASM(Auto Storage Management)

        简称自动存储管理,是一种用于管理磁盘的工具

        能够在多个物理设备之间实现条带化、镜像数据文件、恢复文件等

        文件按分配单元 AUs ( allocation units ) 平衡分布在磁盘组的所有磁盘中, ASM 使用索引技术来跟踪每个 AUs 的位置

        支持联机磁盘的动态增加和减少,当磁盘发生变化后, AUs 会自动重新实现动态分布

        支持 RAC 集群技术,每一节点上运行一个 ASM 实例,各 ASM 实例间能实现点对点通讯

        是一个纯软件级别的实现方式,第三方 RAID 工作在卷层次上,使用统一条带大小, ASM 可以工作在文件层次级别,不同文件可以使用

            不同的条带大小

       

    2.ASM 的优点

        磁盘增加:增加磁盘变得非常容易。无需停机时间,并且文件区域自动重新分配。

        I / O 分配: I / O 自动分布在所有可用的磁盘上,无需人工干预,从而减少了热点出现的可能性。  

        带区宽度:在重做日志文件中分段可以细分( K ,以获得更快的传输速率),对于数据文件,带区则略大一些( MB ,以一次性

            传输大量的数据块)。

        缓冲: ASM 文件系统不进行缓冲,直接进行输入 / 输出。

        镜像:如果硬件镜像不可用,则可以容易地建立软件镜像。   

        核心化的异步 I / O :实现核心化的异步 I / O 无需特殊的设置,并且无需使用原始或第三方的文件系统(如 Veritas Quick I / O

                   

    3.Oracle 常用数据文件的 RAID 级别

        SYSTEM UNDO 表空间通常置于 RAID 1 卷上

        联机重做日志通常置于 RAID 0 卷上

        控制文件通常置于 RAID 0 + 1 卷上

        数据文件通常置于 RAID 5 卷上

       

    4.ASM 体系结构 ( 主要由 ASM 实例及 ASM 磁盘组组成 )

        ASM 的使用需要创建一个 ASM 实例,用于管理 ASM 磁盘组

        ASM 磁盘组由 ASM 磁盘组成,可以包含一个或多个 ASM 磁盘

        ASM 磁盘可以是实际的磁盘,也可以是磁盘的某个分区,或 LVM 管理的逻辑卷,但必须是未格式化的原始设备

        ASM 磁盘组的大小为该组内 ASM 磁盘大小的总和,可使用的容量则根据容错级别而有不同的可用大小

       

    5.ASM 实例及 RDBMS 实例

        ASM 实例类似于普通的数据库实例 ( RDBMS ) ,同样由 SGA 和一堆后台进程组成 , 对大多数系统而言, SGA 只需 64 MB 即可

        ASM 实例中的 LargePool 用于存放 Extent Map , 可以根据数据库的大小来计算 LargePool 的大小 , 通常 100GB 大小需要 1MB 存放 Extent Map

        普通的 RDBMS 实例会定位数据文件并打开其数据文件,而在使用 ASM 存储的数据库中,该工作由 ASM 实例接管,即 ASM 实例用于定位和

            管理 ASM 磁盘,磁盘组。

        ASM 实例拥有类似于普通 RDBMS 实例的后台进程,如 SMON PMON LGWR DBWR CKPT 等,还增添了两个新进程 , 一类是 RBAL , 一类是 ARBn

            RBAL : 用于协调和管理磁盘组之间的动态平衡

            ARBn : 可以为多个,用于完成 AU 的移动

        ASM 实例仅仅是定位管理 ASM 磁盘,不能加载或打开数据库,因此也无法读取数据字典信息

        ASM 实例通常有个参数,只能使用口令文件或操作系统身份验证作为 sysdba sysoper 来启动或关闭该实例。

            关于 sysdba sysoper 区别请参考: system sys ,sysoper sysdba

 

        一个 ASM 实例可以为多个 RDBMS 提供服务,可以在一台主机上创建多个 ASM 实例,但通常一台主机上使用一个 ASM 实例

        如果一个实例服务于多个 RDBMS ,建议将 ASM ASM_HOME DB ORACLE_HOME 分开,便于日后的升级与维护

        ASM 磁盘组的创建与配置在 ASM 实例启动之后

       

使用 ASM 磁盘的 RDBMS 实例与普通的 RDBMS 实例相同,但多出了两个后台进程, RBAL ASMB

            ASMB 借助某个服务器进程如 oracle + ASM1 建立普通 RDBMS 实例到 ASM 实例的会话,并传递磁盘文件的相关信息

            RBAL 打开通过 ASM 实例定位的 ASM 磁盘

        注意: ASM 实例并不代替 RDBMS 实例来读取或写入数据文件,数据是直接在 ASM 磁盘和 RDBMS 实例传递, ASM 实例仅用于定位数据文件

            所在的 asm 磁盘,盘区以及所需的相关信息。假定新增加数据文件,则 RDBMS 告知 ASM 实例要创建数据文件, ASM 实例则分配盘区

            ( extent ) ,并创建盘区映射地址返回给 RDBMS 实例, RDBMS 则将数据直接写入到磁盘组。

               

    6.ASM 实例中存储的文件类型

        控制文件         参数文件         联机日志文件         归档日志文件         数据文件         临时文件

        RMAN 备份集、映像副本         控制文件备份集       datapump 转储文件、 Change Tracing file

       

二、创建 ASM 实例 ( 下面基于 VMware + RHEL 5.4 + Oracle 10g R2 演示 )

    1. 安装 ASM

        使用 ASM 实例,需要到 Oracle 官方网站下载所需的 ASM 包。下载路径: ASMLib

        注意下载支持该内核的包,分为两部分,一是 Library and Tools ,二是 Drivers for kernel

        如本人的 Linux 的内核为:

            [root@oradb ~]# uname - rm

              2.6.18 - 164.el5 i686

        则下载对应的包为:

            Library and Tools

                oracleasmlib - 2.0.4 - 1.el5 . x86_64 . rpm

                oracleasm - support - 2.1.3 - 1.el5 . i386 . rpm

            Drivers for kernel 2.6.18 - 164.el5

                oracleasm - 2.6.18 - 164.el5xen - 2.0.5 - 1.el5 . i686 . rpm

                oracleasm - 2.6.18 - 164.el5debug - 2.0.5 - 1.el5 . i686 . rpm

                oracleasm - 2.6.18 - 164.el5PAE - 2.0.5 - 1.el5 . i686 . rpm

                oracleasm - 2.6.18 - 164.el5 - debuginfo - 2.0.5 - 1.el5 . i686 . rpm

                oracleasm - 2.6.18 - 164.el5 - 2.0.5 - 1.el5 . i686 . rpm

        使用下面类似的方式来安装这些包,关于 RPM 的使用请参考: RPM 使用简介

            [root@oradb asm]# rpm - Uvh oracleasm - support - 2.1.3 - 1.el5 . i386 . rpm

        验证安装的包

            [root@oradb asm]# rpm - qa | grep asm

            oracleasm - support - 2.1.3 - 1.el5

            oracleasm - 2.6.18 - 164.el5 - debuginfo - 2.0.5 - 1.el5

            oracleasm - 2.6.18 - 164.el5 - 2.0.5 - 1.el5            

   

    2. 启用 css 服务 ( Cluster Synchronization Services )

        用于同步 ASM 实例与 RDBMS 实例

            使用 root 帐户进行配置 , 配置程序位于 $ORACLE_HOME/bin

            [root@oradb ~]# / u01 / oracle / 10g / bin / localconfig add

            / etc / oracle does not exist . Creating it now .

            Successfully accumulated necessary OCR keys .

            Creating OCR keys for user 'root' , privgrp 'root' ..

            Operation successful .

            Configuration for local CSS has been initialized

 

            Adding to inittab

            Startup will be queued to init within 90 seconds .

            Checking the status of new Oracle init process ...

            Expecting the CRS daemons to be up within 600 seconds .

            CSS is active on these nodes .

                    oradb

            CSS is active on all nodes .

            Oracle CSS service is installed and running under init ( 1M )

           

    3. 创建 ASM 参数文件 ( 使用 VI VIM )

        [oracle@oradb dbs]$ cat / u01 / oracle / 10g / dbs / init + ASM . ora

        *. asm_diskstring = ''                                       # 为空表示可以搜索任意的 ASM 磁盘

        *. background_dump_dest = '/u01/oracle/admin/+ASM/bdump'     # 后台进程存放位置

        *. core_dump_dest = '/u01/oracle/admin/+ASM/cdump'           # 核心进程存放位置

        *. user_dump_dest = '/u01/oracle/admin/+ASM/udump'           # 用户进程存放位置

        *. instance_type = 'ASM'                                     # 实例类型,普通实例默认则为 RDBMS

        *. instance_name = '+ASM'                                    # 实例名字

        *. large_pool_size = 12M                                     # 为实例分配 large_pool 的大小

        *. remote_login_passwordfile = 'SHARED'                      # 登陆认证方式

        *. asm_power_limit = 1                                       # 控制均衡操作的资源,缺省为

               

    4. 创建 ASM 后台进程目录,参照参数文件中的配置来创建   

        [oracle@oradb ~]$ echo $ORACLE_BASE

        / u01 / oracle / 10g

        [oracle@oradb ~]$ mkdir - p $ORACLE_BASE / admin /+ ASM / bdump

        [oracle@oradb ~]$ mkdir - p $ORACLE_BASE / admin /+ ASM / udump

        [oracle@oradb ~]$ mkdir - p $ORACLE_BASE / admin /+ ASM / cdump    

       

    5. 创建密码文件及 spfile 参数文件

        [oracle@oradb ~]$ orapwd file = $ORACLE_HOME / dbs / orapw + ASM password = redhat entries = 8

        [oracle@oradb ~]$ export ORACLE_SID =+ ASM

        SQL > conn / as sysdba

        Connected to an idle instance .

        SQL > startup     

        ASM instance started

        ORA - 15110 : no diskgroups mounted        

        SQL > create spfile from pfile ;

 

        SQL > select * from v$asm_diskgroup ;

 

        no rows selected

   

    7. 创建 ASM 磁盘及配置 ASMlib 驱动

        Vmware 分配几个空闲的磁盘用于创建 ASM 磁盘,建议使用不同的磁盘控制器

        下面使用个磁盘来组建 ASM 磁盘组 , 分别为 sdd , sde , sdf , sdg

        分别对个磁盘进行分区 , 列出 sdd 的分区样例,其余如法炮制

            [root@oradb ~]# fdisk /dev/sdd

 

            Command (m for help): n

            Command action

               e    extended

               p    primary partition (1-4)

            p

            Partition number (1-4): 1

            First cylinder (1-261, default 1):

            Using default value 1

            Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):

            Using default value 261

 

            Command (m for help): w

            The partition table has been altered!

 

            Calling ioctl() to re-read partition table.

            Syncing disks.      

       

        创建 ASM 磁盘 ( 三种方法 )

           a. 配置裸设备映射,修改 /etc/udev/rules.d/60-raw.rules 文件

            使用 root 帐户修改 /etc/udev/rules.d/60-raw.rules 按如下方式添加磁盘

            [root@oradb ~]# cat / etc / udev / rules . d / 60 - raw . rules        -- 查看添加的内容

            ACTION == "add" , KERNEL == "sdd1" , RUN += "/bin/raw /dev/raw/raw1 %N"

            ACTION == "add" , ENV{MAJOR} == "8" , ENV{MINOR} == "1" , RUN += "/bin/raw /dev/raw/raw1 %M %m"

 

            ACTION == "add" , KERNEL == "sde1" , RUN += "/bin/raw /dev/raw/raw2 %N"

            ACTION == "add" , ENV{MAJOR} == "8" , ENV{MINOR} == "17" , RUN += "/bin/raw /dev/raw/raw2 %M %m"   

           

            [root@oradb ~]# start_udev     # 重启 udev 服务

            Starting udev : [   OK   ]

           

            [root@oradb ~]# ll / dev / raw   

            total 0

            crw ------- 1 root root 162, 1 Nov 10 18:50 raw1

            crw ------- 1 root root 162, 2 Nov 10 18:50 raw2

       

            [root@oradb ~]# chown oracle : dba / dev / raw / raw [1-2]   -- 修改属主,否则创建磁盘组时提示权限不够

 

          b . 也可以采用下面的方式来增加磁盘,即直接修改 / etc / sysconfig / rawdevices   ( root 帐户 )

            [root@oradb ~]# vim / etc / sysconfig / rawdevices

            [root@oradb ~]# cat / etc / sysconfig / rawdevices   -- 查看增加的内容为 raw3,raw4

            / dev / raw / raw3 / dev / sdf1

            / dev / raw / raw4 / dev / sdg1

           

            [root@oradb ~]# chown oracle : dba / dev / raw / raw [3-4]   -- 修改属主,否则创建磁盘组时提示权限不够

            [root@oradb ~]# ll / dev / raw /

            total 0

            crw ------- 1 oracle dba 162, 1 Nov 10 20:12 raw1

            crw ------- 1 oracle dba 162, 2 Nov 10 20:12 raw2

            crw ------- 1 oracle dba 162, 3 Nov 10 20:12 raw3

            crw ------- 1 oracle dba 162, 4 Nov 10 20:12 raw4

           

            重启裸设备服务

            [root@oradb ~]# / sbin / service rawdevices restart

            Assigning devices :

                       / dev / raw / raw3   -->    /dev/sdf1

            / dev / raw / raw3 :   bound to major 8 , minor 81

                       / dev / raw / raw4   -->    /dev/sdg1

            / dev / raw / raw4 :   bound to major 8 , minor 97

            done

 

            SQL > select instance_name , status from v$instance ;

 

            INSTANCE_NAME     STATUS

            ---------------- ------------

            + ASM              STARTED

           

            SQL > create diskgroup DG1 normal redundancy disk '/dev/raw/raw1' , '/dev/raw/raw2' ;   -- 创建磁盘组 DG1

 

            SQL > select * from v$fixed_table where name like '%ASM%' ; -- 查看和 asm 相关的视图

           

            SQL > select name , allocation_unit_size , state , type ,

              2   free_mb , required_mirror_free_mb req_mi_fr_mb , usable_file_mb

              3   from v$asm_diskgroup ;

 

            NAME             ALLOCATION_UNIT_SIZE STATE        TYPE       FREE_MB REQ_MI_FR_MB USABLE_FILE_MB

            --------------- -------------------- ----------- ------ ---------- ------------ --------------

            DG1                           1048576 MOUNTED      NORMAL         296             0             148

 

            SQL > create diskgroup DG2 normal redundancy disk '/dev/raw/raw3' , '/dev/raw/raw4' ;    -- 创建磁盘组 DG2

 

            SQL > select name , state , free_mb , required_mirror_free_mb , usable_file_mb    -- 查看磁盘组的状态及信息

              2   from v$asm_diskgroup ;

 

            NAME             STATE           FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB

            --------------- ----------- ---------- ----------------------- --------------

            DG1              MOUNTED              296                        0             148

            DG2              MOUNTED             296                        0             148

           

            SQL > select disk_number , total_mb , free_mb from v$asm_disk ;

 

            DISK_NUMBER    TOTAL_MB     FREE_MB

            ----------- ---------- ----------

                      1         199         148

                      0         199         148

                      1         199         148

                      0         199         148   

           

            重新启动 Linux 主机后

            SQL > startup     -- 重新启动 ASM 实例,收到了磁盘组 insufficient 信息

            ASM instance started

            ORA - 15032 : not all alterations performed

            ORA - 15063 : ASM discovered an insufficient number of disks for diskgroup "DG2"

            ORA - 15063 : ASM discovered an insufficient number of disks for diskgroup "DG1"           

                       

            SQL > ho ls - hlt / dev / raw         # LINUX 主机重新启动之后属主性质已发生变化

            total 0

            crw ------- 1 root root 162, 4 Nov 10 20:28 raw4

            crw ------- 1 root root 162, 3 Nov 10 20:28 raw3

            crw ------- 1 root root 162, 2 Nov 10 20:28 raw2

            crw ------- 1 root root 162, 1 Nov 10 20:28 raw1     

 

            原因:原始设备在引导时会重新映射。默认情况下,在引导时原始设备的拥有者将更改为 root 用户

            将下面的内容增加到 / etc / rc . local 文件 ( root 帐户 ) ,重新启动主机,使得属主变为 oracle ,则不再出现类似的提示

                chown oracle : dba / dev / raw / raw1

                chown oracle : dba / dev / raw / raw2

                chown oracle : dba / dev / raw / raw3

                chown oracle : dba / dev / raw / raw4

                chmod 660 / dev / raw / raw1

                chmod 660 / dev / raw / raw2

                chmod 660 / dev / raw / raw3

                chmod 660 / dev / raw / raw4         

           

            SQL > drop diskgroup dg1 ;    -- 将刚才创建的两个磁盘组删除

           

            SQL > drop diskgroup dg2 ;

           

                使用 root 帐户清除 /etc/udev/rules.d/60-raw.rules /etc/sysconfig/rawdevices   以及 /etc/rc.local 刚刚增加的记录

                便于下面使用 asmlib 来创建 asm 磁盘

           

          c . 使用 root 帐户配置 ASMLib 驱动及创建 ASM 磁盘, Oracle 建议使用 ASMLIB 驱动来配置 ASM 磁盘

                [root@oradb ~]# / etc / init . d / oracleasm configure

                Configuring the Oracle ASM library driver .

 

                This will configure the on - boot properties of the Oracle ASM library

                driver .   The following questions will determine whether the driver is

                loaded on boot and what permissions it will have .   The current values

                will be shown in brackets ( '[]' ).   Hitting < ENTER > without typing an

                answer will keep that current value .   Ctrl - C will abort .

 

                Default user to own the driver interface [] : oracle

                Default group to own the driver interface [] : dba

                Start Oracle ASM library driver on boot ( y / n ) [n] : y

                Scan for Oracle ASM disks on boot ( y / n ) [y] : y

                Writing Oracle ASM library driver configuration : done

                Initializing the Oracle ASMLib driver : [   OK   ]

                Scanning the system for Oracle ASMLib disks : [   OK   ]       

               

                -- 注意下面创建磁盘前本人重新对磁盘分过区

                [root@oradb ~]# ls / dev / oracleasm / disks

                [root@oradb ~]# / etc / init . d / oracleasm createdisk VOL1 / dev / sdd1

                Marking disk "VOL1" as an ASM disk : [   OK   ]

                [root@oradb ~]# / etc / init . d / oracleasm createdisk VOL2 / dev / sdd2

                Marking disk "VOL2" as an ASM disk : [   OK   ]

                [root@oradb ~]# / etc / init . d / oracleasm createdisk VOL3 / dev / sde1

                Marking disk "VOL3" as an ASM disk : [   OK   ]

                [root@oradb ~]# / etc / init . d / oracleasm createdisk VOL4 / dev / sde2

                Marking disk "VOL4" as an ASM disk : [   OK   ]

                [root@oradb ~]# / etc / init . d / oracleasm listdisks

                VOL1

                VOL2

                VOL3

                VOL4

                [root@oradb ~]# su - oracle

                [oracle@oradb ~]$ export ORACLE_SID =+ ASM

                [oracle@oradb ~]$ sqlplus / nolog

                SQL > conn / as sysdba

           

                SQL > startup

                ASM instance started

 

                ORA - 15110 : no diskgroups mounted

 

                SQL > create diskgroup DG1 normal redundancy

                  2   failgroup FG1 disk '/dev/oracleasm/disks/VOL1' name VOL1

                  3   failgroup FG2 disk '/dev/oracleasm/disks/VOL2' name VOL2 ;

                create diskgroup DG1 normal redundancy

                *

                ERROR at line 1 :

                ORA - 15018 : diskgroup cannot be created     -- 下面提示磁盘路径未在 discovery set 中设置

                ORA - 15031 : disk specification '/dev/oracleasm/disks/VOL2' matches no disks  

                ORA - 15014 : location '/dev/oracleasm/disks/VOL2' is not in the discovery set

                ORA - 15031 : disk specification '/dev/oracleasm/disks/VOL1' matches no disks

                ORA - 15014 : location '/dev/oracleasm/disks/VOL1' is not in the discovery set

 

                SQL > show parameter asm_diskstring

 

                NAME                                  TYPE         VALUE

                ------------------------------------ ----------- ------------------------------

                asm_diskstring                        string

               

                SQL > alter system set asm_diskstring = '/dev/oracleasm/disks/VOL*' ;

 

                SQL > create diskgroup DG1 normal redundancy      -- 设置 asm_diskstring 后重新创建磁盘 DG1 成功

                  2   failgroup FG1 disk '/dev/oracleasm/disks/VOL1' name VOL1

                  3   failgroup FG2 disk '/dev/oracleasm/disks/VOL2' name VOL2 ;

                   

                SQL > select name , state , free_mb , required_mirror_free_mb , usable_file_mb

                  2   from v$asm_diskgroup ;

 

                NAME             STATE           FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB

                --------------- ----------- ---------- ----------------------- --------------

                DG1               MOUNTED            2964                        0            1482           

           

    8. 创建 ASM 数据库

        使用 dbca 工具根据提示来创建使用 ASM 存储的数据库

        创建使用 ASM 存储的数据库完毕之后,对于 ASM 数据库启动应首先保证 ASM 实例先被启动,因为 RDBMS ASM 实例服务的一个客户端

        接下来再来启动 RDBMS

       

        -- 首先启动 asm 实例

            export ORACLE_SID =+ ASM

            sqlplus / as sysdba

            startup

            exit

           

        -- 接下来启动 rdbms 数据库

            export ORACLE_SID = orcl

            sqlplus / as sysdba

            startup

       

三、创建 ASM 实例时的常见故障

 

    1. 创建磁盘时出现错误可以查看 asm 日志

        tail -f /var/log/oracleasm      

 

    2. 启动 asm 实例时出现 ORA-29701 错误

        ORA-29701: unable to connect to Cluster Manager

        首次需要启用 css 服务,使用 root 帐户 , 运行 $ORACLE_HOME/bin/localconfig add

       

        如果下次启动实例的时候仍然碰到如下报错:

        ORA-29701: unable to connect to Cluster Manager

        那么检查 /etc/inittab 文件,看看是否有下面这行

        h1:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1 </dev/null

        如果没有请添加,如果被注释了请取消注释 (root 帐户 )

 

        也可以使用 root 帐户执行 /u01/oracle/10g/bin/localconfig reset 来解决

       

    3. 磁盘搜索路径问题  

        SQL > create diskgroup DG1 normal redundancy disk 'ORCL:VOL1' , 'ORCL:VOL2' ;

        create diskgroup DG1 normal redundancy disk 'ORCL:VOL1' , 'ORCL:VOL2'

        *

        ERROR at line 1 :

        ORA - 15018 : diskgroup cannot be created

        ORA - 15031 : disk specification 'ORCL:VOL2' matches no disks

        ORA - 15031 : disk specification 'ORCL:VOL1' matches no disks

       

        使用 oraclasm 创建磁盘后,缺省会在 / dev / oracleasm / disks 目录下添加刚刚创建的磁盘映射

        修改 asm_diskstring 修改路径之后再次创建即可

            alter system set asm_diskstring = '/dev/oracleasm/disks/VOL*'

           

 

 

创建ASM实例及ASM数据库


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论