学习ASM技术[转]

从朋友反馈信息来看,oracle引进了自动存储管理ASM占据越来越重要位置,因此

开始学习一下ASM。以下测试环境是在RedHat 5.3平台上。

1、建立裸设备
  
     # lvcreate -L 5000M -n ora_asm1 vg00
     # lvcreate -L 5000M -n ora_asm2 vg00
     # lvcreate -L 5000M -n ora_asm3 vg00
     # lvcreate -L 5000M -n ora_asm4 vg00
     # lvcreate -L 5000M -n ora_asm5 vg00

     # cd /dev
     # MAKEDEV raw

     # raw  /dev/raw/raw1  /dev/vg00/ora_asm1
     # raw  /dev/raw/raw1  /dev/vg00/ora_asm2
     # raw  /dev/raw/raw1  /dev/vg00/ora_asm3
     # raw  /dev/raw/raw1  /dev/vg00/ora_asm4
     # raw  /dev/raw/raw1  /dev/vg00/ora_asm5

   在/etc/sysconfig/rawdevices中添加如下:

     /dev/raw/raw1  /dev/vg00/ora_asm1
     /dev/raw/raw1  /dev/vg00/ora_asm2
     /dev/raw/raw1  /dev/vg00/ora_asm3
     /dev/raw/raw1  /dev/vg00/ora_asm4
     /dev/raw/raw1  /dev/vg00/ora_asm5
 
  更改raw权限
   # chown oracle:dba /dev/raw/raw*
   # vi /etc/init.d/app
       chown oracle:dba /dev/raw/raw*
   # ln -s /etc/init.d/app /etc/rc5.d/S99mapp

2、配置ASM
   # su - oracle
   # export ORACLE_SID=+ASM
   # dbca
       选择Configure Automatic Storage Management

3、ASM参数文件信息
   
  #strings $ORACLE_HOME/dbs/spfile+ASM.ora
        +ASM.asm_diskgroups='ASM_DISKGROUP'#Manual Mount
        *.asm_diskgroups='ASM_DISKGROUP'
        *.background_dump_dest='/home/oracle/admin/+ASM/bdump'
        *.core_dump_dest='/home/oracle/admin/+ASM/cdump'
        *.instance_type='asm'
        *.large_pool_size=12M
        *.remote_login_passwordfile='SHARED'
        *.user_dump_dest='/home/oracle/admin/+ASM/udump'

   在$ORACLE_HOME/dbs存在两个文件:
   1)  ab_+ASM.dat
        
        SQL>shutdown
        $ rm ab_+ASM.dat
        SQL>startup
       重新生成该文件,RDBMS连接ASM实例时候,使用该文件确定相关的环境信息。如果文件删除,RDBMS不能连接ASM.

   2) hc_+ASM.dat
    
       EM使用该文件进行健康监控,如果该文件删除,健康检查信息将不准确。

4、进程检查
 
    # ps -ef |grep asm
    # crsctl check css
    # ps -ef |grep d.bin  

 

###############

ASM 信息查询

1、查看diskgroup空间大小,以及ASM状态

SQL> select name, total_mb, free_mb, usable_file_mb, state
           from v$asm_diskgroup;

NAME                             TOTAL_MB    FREE_MB   USABLE_FILE_MB   STATE
------------------------------ ------------------ --------------- -------------------------- -----------
ASM_DISKGROUP             25120      24963           9969                         MOUNTED


2、进程数计算
SQL>show parameter process
   processes=40

计算公式=25+(10+最大数量并行数据文件创建)*RDMS连接ASM数量
                = 25+(10+5)*1
               =40

3、显示SGA值
SQL>show sga

4、ASM控制文件
SQL>show parameter control
control_files =  /home/oracle/app/ora10g/dbs/cntrl+ASM.dbf
该文件在目录中不存在,在ASM实例中没有任何意义

5、查看管理ASM用户

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB   SYSOP
--------------------------------- ------------ ----------
SYS                                        TRUE    TRUE


6、查看diskgroup中各个磁盘状态
SQL> select name, mount_status from v$asm_disk;

NAME                                           MOUNT_S
----------------------------------        -----------------
ASM_DISKGROUP_0004             CACHED
ASM_DISKGROUP_0003             CACHED
ASM_DISKGROUP_0002             CACHED
ASM_DISKGROUP_0001             CACHED
ASM_DISKGROUP_0000             CACHED

v$asm_disk_stat与v$asm_disk类似
v$asm_file显示ASM文件
v$asm_operation:显示ASM重新负载平衡操作过程
###############

1、删除disk

SQL> select group_number, name from v$asm_diskgroup;

GROUP_NUMBER         NAME
---------------------------- ------------------
           1                         ASM_DISKGROUP

SQL> select path, name from v$asm_disk where group_number=1;
PATH                           NAME
------------------------------ ------------------------------
/dev/raw/raw5                  ASM_DISKGROUP_0004
/dev/raw/raw4                  ASM_DISKGROUP_0003
/dev/raw/raw3                  ASM_DISKGROUP_0002
/dev/raw/raw2                  ASM_DISKGROUP_0001
/dev/raw/raw1                  ASM_DISKGROUP_0000

SQL>alter diskgroup ASM_DISKGROUP drop disk asm_diskgroup_0004;
SQL>alter diskgroup ASM_DISKGROUP drop disk asm_diskgroup_0003;

2、创建新的diskgroup
SQL> select name, path, mode_status, state from v$asm_disk; 

NAME                           PATH                           MODE_ST STATE
------------------------------ ------------------------------ ------- --------
                                                          /dev/raw/raw6                  ONLINE  NORMAL
                                                          /dev/raw/raw5                  ONLINE  NORMAL
                                                           /dev/raw/raw4                  ONLINE  NORMAL
ASM_DISKGROUP_0002             /dev/raw/raw3                  ONLINE  NORMAL
ASM_DISKGROUP_0001             /dev/raw/raw2                  ONLINE  NORMAL
ASM_DISKGROUP_0000             /dev/raw/raw1                  ONLINE  NORMAL

SQL>create diskgroup dg1  external redundancy disk '/dev/raw/raw4';

SQL> select name, state, type, total_mb, free_mb from v$asm_diskgroup;

NAME                                STATE            TYPE       TOTAL_MB    FREE_MB
------------------------------ ----------- ------ ---------- ----------
ASM_DISKGROUP        MOUNTED     NORMAL      15072      14919
DG1                                  MOUNTED     EXTERN          5024       4974

SQL>drop diskgroup dg1;

SQL> create diskgroup dg1 normal redundancy
  2  failgroup f1 disk '/dev/raw/raw4'                        
  3  failgroup f2 disk '/dev/raw/raw5';

在创建diskgroup有三个选项:external, normal和high redunancy,具体在使用中,如果使用中高端存储设备,通常磁盘镜像在硬件级别就完成了,所以在创建diskgroup采用external,normal则至少需要两个磁盘,high则是三个磁盘,通常用于低端存储设备。

3、添加disk到现有的diskgroup
SQL>alter diskgroup ASM_DISKGROUP add disk
          '/dev/raw/raw6' name ASM_DISKGROUP_0003;

删除failure group 下的所有disk
SQL>alter diskgroup dg1 drop disks in failgroup f2;
检查disk状态,f2下的磁盘处于hung状态
SQL> select group_number,disk_number,name,failgroup,state from v$asm_disk;

4、重新设置disk大小
alter diskgroup asm_diskgroup resize disk ASM_DISKGROUP_0001 size 800m;

5、将diskgroup进行dismount和mount

SQL> select name, state from v$asm_diskgroup;
NAME                                         STATE
------------------------------------- ---------------
ASM_DISKGROUP                  MOUNTED
DG1                                            MOUNTED

SQL>alter diskgroup dg1 dismount;
SQL> alter diskgroup asm_diskgroup dismount;

SQL> select name, state from v$asm_diskgroup;
NAME                                         STATE
------------------------------------- ---------------
ASM_DISKGROUP                  DISMOUNTED
DG1                                            DISMOUNTED

SQL> alter diskgroup dg1 mount;
SQL>alter diskgroup  asm_diskgroup mount;

SQL> select name, state from v$asm_diskgroup;
NAME                                         STATE
------------------------------------- ---------------
ASM_DISKGROUP                  MOUNTED
DG1                                            MOUNTEDx`

6、冗余性考虑

        我们在创建diskgroup没有指定failure group, failure group 自动在自己盘重建。但我们要注意指定failure group 时,每个failure group中的盘数量和大小要一致,避免空间浪费。
        在ASM的diskgroup中,第一个被分配的file extents,作为primary extent,其他作为second extents,在10g中,缺省都是先读primary extents,但在11g,我们可以设置prefered read 特性,主要解决了RAC的两个节点中,节点1优先读取primary extent,节点2优先读取second extents,提高I/O性能

7、disk partnership
     在normal和high redundancy diskgroup中,磁盘故障切换备用盘的信息可查询x$kfdpartner.

SQL> select name, disk_number
            from v$asm_disk
            where GROUP_NUMBER=2
            order by 2;

NAME                                         DISK_NUMBER
----------------------------------- -------------------------
ASM_DISKGROUP_0000                       0
ASM_DISKGROUP_0001                       1
ASM_DISKGROUP_0002                       2

SQL> select disk, NUMBER_KFDPARTNER from x$kfdpartner;

      DISK        NUMBER_KFDPARTNER
----------------- -----------------------------------
         0                 1
         0                 2
         1                 0
         1                 2
         2                 0
         2                 1
可以看到磁盘1的parner是磁盘2和磁盘3.

####################

一、条带化:
 
        ASM的条带化有两种:coarse和fine-gained。AU是最小分配单元,缺省是1M,每个AU缺省由8个128K条带空间组成。
       
         coarse条带化中一个extent映射为一个AU,缺省是1M大小,比如4个磁盘
#0~#3,分配extent时候,第一个AU分配给disk0,第二个AU给disk1,依此顺推。所以该条带化适合连续的I/O读写,比如全表扫描表。

        Fined-gained条带化,一个AU中的8个128K条带空间,平均打散在磁盘上,也就是说,4个磁盘,1个AU是平均分布在4个磁盘,每个磁盘2个128K。适合于对数据读写延迟比较敏感的文件。如redo日志,控制文件,spfile等。

        10g版本AU和条带设置参数:_asm_ausize和_asm_stripesize,11g版本数据库在创建diskgroup时候,可以设置attribute 'au_size' = '16M'。

 二、Rebalance

        从diskgroup中添加或删除disk时候,将触发RBAL进程创建rebalance计划,并计算执行Rebalance所需要时间和工作要求,然后发消息给ASM Reblance (ARBx)进程处理该请求。ARBx进程的数量由参数ASM_POWER_LIMIT决定。COD (Continuting Operation Directory)用于记录rebalances情况。如果rebalance失败,在重启instance时候,将从COD读取记录,重新启动rebalance。ARBx进程对每个extents进行locked, relocated和unlocked操作,执行过程中可以参考v$asm_operation视图。

     ASM_POWER_LIMIT范围是0~11,0:表示不进行rebalance,值越大, rebalance速度越快。

       在进行rebalance时候要注意以下几点:
     
      1、每个disk的大小必须是相同,如果存在一个小盘,因为rebalance将对每个盘的分配相同比例的空间,可能造成rebalance时候空间不足。

      2、rebalance仅仅在diskgroup发生改变时候才进行的,并不是定时执行

      3、如果磁盘大小一样,仍然没有进行rebalance,需要查看asm_power_limit

      4、如果rebalance执行过程中,server宕机,重启后会自动进行rebalance

      5、影响rebalance速度因素有很多,最重要是I/O子系统

      6、如果执行过程中,空闲空间不足,造成rebalance失败,将出现ORA-15041错误,需要再添加disk,。

      7、如果需要频繁添加disk,每一次都可能造成数据的频繁移动,为提高效率,最好批量添加。

     从老的磁盘阵列切换和迁移disk到新的磁盘阵列命令如下:

SQL> alter diskgroup add disk '/dev/xxx/xxx'
           drop disk [disk_name] rebalance power 8;
#############

1、数据文件命名含义
SQL> select file_name from dba_data_files;

FILE_NAME
------------------------------------------------------------
+ASM_DISKGROUP/ora10g/datafile/system.259.712716453
+DG1/ora10g/datafile/undotbs1.259.712716475
+ASM_DISKGROUP/ora10g/datafile/sysaux.260.712716487
+ASM_DISKGROUP/ora10g/datafile/users.261.712716503

格式说明:
 +DATA/yoda/datafile/tbs_name.asm_filenumber.incarnation_number

  +DATA: diskgroup名
     yoda: 该数据库
 datafile: 文件类型,表示是数据文件
tbs_name: 表空间名
asm file#: 表示ASM file编号,$asm_file.file_number
incarnation number:  从时间戳提取,唯一值  。

2、在ASM实例中查询文件编号和大小
$export ORACLE_SID=+ASM
SQL>sqlplus '/as sysdba'
SQL> select file_number, bytes/1024/1024 from v$asm_file;

FILE_NUMBER        BYTES/1024/1024
-------------------------- ---------------
        259                      500.007813
        260                      340.007813
        261                      5.0078125
        259                      340.007813

所查询到的值,与dba_data_files相匹配。

3、数据文件的模板(template)管理

查看数据文件属性
SQL>select name, redundancy, striped
           from v$asm_alias a, v$asm_file b
           where a.file_number = b.file_number
             and  a.group_number = b.group_number
            order by name;

NAME                                                        REDUND     STRIPE
------------------------------------------------ ----------------- ------------
Current.256.712716441                            HIGH           FINE
Current.257.712716441                            HIGH           FINE
Current.258.712716441                            HIGH           FINE
SYSAUX.260.712716487                          MIRROR      COARSE
SYSTEM.259.712716453                          MIRROR      COARSE
TEMP.260.712716493                               UNPROT     COARSE
UNDOTBS1.259.712716475                    UNPROT     COARSE
USERS.261.712716503                            MIRROR      COARSE
control01.ctl                                                  HIGH            FINE
control02.ctl                                                  HIGH            FINE
control03.ctl                                                  HIGH            FINE
group_1.256.712716443                          UNPROT      FINE
group_2.257.712716445                          UNPROT      FINE
group_3.258.712716447                          UNPROT      FINE
redo01.log                                                    UNPROT      FINE
redo02.log                                                    UNPROT      FINE
redo03.log                                                    UNPROT      FINE
spfile.262.712718229                                MIRROR      COARSE
spfileora10g.ora                                          MIRROR      COARSE

系统管理人员能改变系统缺省 template, 但不能删除该删除,管理员能增加自己的template,然后在该模板上创建数据文件。

SQL> alter diskgroup dg1 add template noncritical_files attributes (unprotected);

SQL> create tablespace test datafile '+DG1/test.dbf(noncritical_files)' size 100M;

更改template属性
SQL>alter diskgroup dg1 alter template noncritical_files attributes (coarse);

删除template
SQL> alter diskgroup dg1 drop template noncritical_files;

以下是ASM 缺省template信息

文件类型                              缺省模板                缺省条带化
------------------------------- ------------------------  ---------------------
archived redo logs       ARCHIVELOG             coarse
control files                   CONTROLFILE            fine
control files autobackup AUTOBACK              coarse
datafile                            DATAFILE                    coarse
datafile backup piece   BACKUPSET              coarse
DataGuard broker
configuration                  DATAGUARDCONFIG coarse
datapump Dumpset     DUMPSET                    coarse
flashback logs               FLASHBACK                fine
Online Redo Logs         ONLINELOG                fine
spfile                                PARAMETERFILE        coarse
tempfiles                         TEMPFILE                      coarse

查看ASM template
SQL>select * from v$asm_template;

 

 



source:http://space.itpub.net/?uid-354732-action-viewspace-itemid-629497

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7583803/viewspace-709737/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7583803/viewspace-709737/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值