zoukankan      html  css  js  c++  java
  • Discover Your Missed ASM Disks

    经常有网友在构建10g/11g中ASM存储环境的时候遇到ASM磁盘无法识别的问题,虽然已经为存储设备赋予了适当的权限,也为ASM实例修改了asm_diskstring初始化参数,可是在DBCA的ASM Diskgroup创建页面里就是无法显示候选的ASM Disk磁盘。 实际上因为ASM存储方式比起裸设备或GPFS来说更为黑盒,我们也无法利用ASM instance中的一些动态性能视图或内部视图来排查造成这一问题的原因,使得这类问题显得十分棘手。 下面我来介绍一种使用操作系统调用追踪工具来排查ASM无法找到磁盘问题的方法。
    [oracle@vrh1 raw]$ cd /dev/rdsk 
    
    /* 演示中我们要用到的三个裸设备位于/dev/rdsk下 */
    
    [oracle@vrh1 rdsk]$ ls
    hdisk1  hdisk2  hdisk3
    
    [oracle@vrh1 rdsk]$ sqlplus / as sysdba
    
    SQL> select * from v$version;
    
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
    PL/SQL Release 10.2.0.4.0 - Production
    CORE    10.2.0.4.0      Production
    TNS for Linux: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    
    SQL>  select path from v$asm_disk;
    no rows selected
    
    SQL> alter system set asm_diskstring='/dev/rdsk/hdisk*';
    System altered.
    
    SQL> select * from v$asm_disk;
    no rows selected
    
    /* 以上虽然设置了asm_diskstring参数,ASM instance依然无法在指定路径下找到合适的设备
        这是为什么呢?!
    */
    
    [oracle@vrh1 rdsk]$ ps -ef|grep rbal|grep -v grep
    oracle   31375     1  0 15:40 ?        00:00:00 asm_rbal_+ASM1
    
    /* 找出当前ASM实例中的rbal后台进程  */
    
    /* 针对该后台进程做系统调用的trace,一般Linux上使用strace,而Unix上使用truss */
    
    strace -f -o /tmp/asm_rbal.trc -p $OS_PID_OF_RBAL_BGPROCESS
    truss  -ef -o /tmp/asm_rbal.trc -p $OS_PID_OF_RBAL_BGPROCESS
    
    [oracle@vrh1 rdsk]$ strace -f -o /tmp/asm_rbal.trc  -p 31375
    Process 31375 attached - interrupt to quit
    
    /* 在另外一个终端窗口中打开sqlplus登录ASM实例,执行对v$ASM_DISK或者X$KFDSK的查询 */
    
    SQL> select * from x$kfdsk;
    
    no rows selected
    
    /* 完成以上查询后使用Ctrl+C中断strace命令,并分析生成的system call trace */
    
    /* 因为在不同Unix平台上rbal后台进程可能使用不同的system call function函数以达到相同的目的,
        所以在你的平台上可能并不像在Linux上使用open和access2个关键词搜索就可以得到答案了!     */
    
    [oracle@vrh1 rdsk]$ cat /tmp/asm_rbal.trc |egrep "open|access"
    31375 open("/dev/rdsk", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 15
    31375 access("/dev/rdsk/hdisk3", R_OK|W_OK) = -1 EACCES (Permission denied)
    31375 access("/dev/rdsk/hdisk2", R_OK|W_OK) = -1 EACCES (Permission denied)
    31375 access("/dev/rdsk/hdisk1", R_OK|W_OK) = -1 EACCES (Permission denied)
    可以看到以上系统调用中使用access函数访问候选的hdisk*ASM磁盘设备时出现了"Permission denied"的问题,很显然是因为权限不足导致了ASM实例无法利用这部分的磁盘设备,我们来纠正这一问题后再次尝试:
    [root@vrh1 ~]# chown oracle:dba /dev/rdsk/hdisk*
    
    SQL> select path_kfdsk from x$kfdsk;
    
    PATH_KFDSK
    --------------------------------------------------------------------------------
    /dev/rdsk/hdisk3
    /dev/rdsk/hdisk2
    /dev/rdsk/hdisk1
    
    SQL> select path from v$asm_disk;
    
    PATH
    --------------------------------------------------------------------------------
    /dev/rdsk/hdisk3
    /dev/rdsk/hdisk1
    /dev/rdsk/hdisk2
    以上丢失ASM Disk诊断方法的原理是在查询v$asm_disk或者x$kfdsk视图时Oracle会让RBAL这个ASM特别的后台进程去访问asm_diskstring参数指定路径下的所有可用设备,只要我们了解了在访问过程中RBAL遭遇的问题,那么一般来说都可以很简单地予以解决,如果strace/truss也无法给予你任何启示的话,也许你不得不去提交一个SR让Oracle Support来进一步协助你了,当然在正式提交SR之前你有必要再次确认一下你的ASM Disk是否都满足了以下的这些硬指标: 1.合理地设置ASM_DISKSTRING参数,若没有设置ASM_DISKSTRING参数那么ASM实例会尝试到默认的一些路径去搜索磁盘设备,这些默认路径在不同操作系统上略有不同:
    操作系统 默认搜索路径
    Solaris /dev/rdsk/*
    Windows \\.\orcldisk*
    Linux /dev/raw/*
    Linux with ASMLIB ORCL:*
    Linux with ASMLIB /dev/oracleasm/disks/*
    HPUX /dev/rdsk/*
    HP-UX(Tru 64) /dev/rdsk/*
    AIX /dev/*
    2.候选磁盘设备应当属于安装ASM的Oracle软件的用户,否则使用chown或卷管理软件修改磁盘拥有者,并保证磁盘被正确加载 3.候选磁盘设备应当设置合理的权限,一般为660,如果存在问题那么可以临时设为770以便测试 4.RAC环境中需要注意所有的磁盘设备应当在所有节点都可见,建议使用cluvfy工具验证
  • 相关阅读:
    一段滚动文字的js (jQuery)
    VB ASP 使用 now() 时默认格式调整方法
    解决标题过长的CSS
    javascript Spline代码
    统计学中的几个重要的分布
    网页游戏开发秘笈 PDF扫描版
    网页设计与开发——HTML、CSS、JavaScript (王津涛) pdf扫描版
    网页设计与开发:HTML、CSS、JavaScript实例教程 (郑娅峰) pdf扫描版
    网页DIV+CSS布局和动画美化全程实例 (陈益材) 随书光盘
    实用掌中宝--HTML&CSS常用标签速查手册 PDF扫描版
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2967741.html
Copyright © 2011-2022 走看看