建立ASM實例及ASM數據庫(轉載)

--========================css

-- 建立ASM實例及ASM數據庫node

--========================sql

 

1、ASM相關概念數據庫

    1.什麼是ASM(Auto Storage Management)vim

        簡稱自動存儲管理,是一種用於管理磁盤的工具服務器

        可以在多個物理設備之間實現條帶化、鏡像數據文件、恢復文件等oracle

        文件按分配單元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

       

2、建立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

       

3、建立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*'原文:https://blog.csdn.net/leshami/article/details/6080659

相關文章
相關標籤/搜索