如何查看磁盘/分区是否被Oracle ASM使用

如何验证磁盘/分区是否正在被 Oracle ASM 使用、
如何检查磁盘是否被 Oracle ASM 使用
如何查看磁盘是否从未被 Oracle ASM 使用

下面的小 C 程序我们识别磁盘/分区是否仍在被 ASM 使用、已被 ASM 使用或者未被 ASM 在 Unix 或者 Linux 平台上使用。

  1. 首先,我们需要编译下面的C代码:
#include <stdio.h>
#include <fcntl.h> 
#define BLOCK_SIZE 4096 
int main(int argc, char *argv[]) 
{ 
    char buf[BLOCK_SIZE]; 
    char *fname; 
    int  fd; 
    int  count; 
    if (argc != 2) 
    { 
      fprintf(stderr, "Exactly one argument required\n"); 
      return (-1); 
    } 
    fname = argv[1]; 
    fd = open(fname, O_RDONLY); 
    if (fd < 0) 
    { 
      perror(fname); 
      return (-1); 
    } 
    count = read(fd, buf, sizeof(buf)); 
    if (count < 0) 
    { 
      perror(fname); 
      return (-1); 
    } 
    if (count < sizeof(buf)) 
    {  
      return (1); 
    } 
    if ( buf[32] == 'O' && buf[33] == 'R' && buf[34] == 'C' && buf[35] == 'L' 
      && buf[36] == 'D' && buf[37] == 'I' && buf[38] == 'S' && buf[39] == 'K') 
    {  
      if (buf[71] != 4) { 
        printf("This disk %s still used by ASM\n",argv[1]); 
        return (0);                                      
      } 
      else 
      printf("This disk %s has been used by ASM\n",argv[1]); 
      return (0);         
     } 
    printf("This disk %s has not been used by ASM\n",argv[1]); 
    return (1); 
}
  1. 将上述代码保存为ASCII文件,然后使用C编译器编译如下:
$ ls  
-rw-r--r--  1 oracle oinstall 2014 Jun 16 15:57 checkasmdisk.c
$ cc checkasmdisk.c -o checkasmdisk
$ ls  
-rwxr-xr-x  1 oracle oinstall 5670 Jun 16 15:57 checkasmdisk 
-rw-r--r--  1 oracle oinstall 2014 Jun 16 15:57 checkasmdisk.c
  1. 用编译好的脚本检查所需的磁盘。
    作为脚本的结果,我们可以获得如下所示的 4 个状态:

1.磁盘没有被ASM使用过

Connected to: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 
SQL> !dd if=/dev/zero of=/dev/sda14 bs=8192 count=12800 
12800+0 records in 
12800+0 records out 
SQL> !checkasmdisk /dev/sda14 
This disk /dev/sda14 has not been used by ASM

2.磁盘仍然被ASM使用

SQL> create diskgroup DATADG external redundancy disk '/dev/sda14'; 
Diskgroup created. 
SQL> !checkasmdisk /dev/sda14 
This disk /dev/sda14 still used by ASM

3.磁盘已被ASM使用

SQL> drop diskgroup DATADG; 
Diskgroup dropped. 
SQL> !checkasmdisk /dev/sda14 
This disk /dev/sda14 has been used by ASM

4.磁盘无法访问

# ls -l /dev/sda14 
brw-rw---- 1 oracle dba 8, 14 Jun 11 19:12 /dev/sda14 
# chown root:disk /dev/sda14 
# ls -l /dev/sda14 
brw-rw---- 1 root disk 8, 14 Jun 11 19:12 /dev/sda14 
SQL> !checkasmdisk /dev/sda14 
/dev/sda14: Permission denied 
brw-rw---- 1 root disk 8, 14 Jun 11 19:12 /dev/sda14
日期:2020-09-17 00:13:15 来源:oir作者:oir