GNU/Linux >> Linux の 問題 >  >> Linux

ディスク/パーティションがOracle ASMによって使用されているか、Oracle ASMによって使用されていたか、またはOracle ASMによってまったく使用されていないかどうかを確認する方法

以下の小さな C プログラムは、ディスク/パーティションがまだ ASM によって使用されているか、ASM によって使用されているか、または Unix または Linux プラットフォーム上の ASM によって使用されていないかを識別するのに役立ちます。

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); 
}

2. 上記のコードを 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

3. コンパイルされたスクリプトで目的のディスクを確認します。スクリプトの結果として、以下に示す 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 
Oracle ASM :物理ディスク デバイスを ASMLIB ディスクにマップするシェル スクリプト


Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  1. / dev/randomと/dev/ urandomをいつ使用するか?

  2. cronジョブを/dev/ null /に完全に沈黙させる方法は?

  3. このディスクをマウントする方法は?

  1. /usr と /var を別のパーティションまたはディスクに移動する方法

  2. /dev/sda と /dev/sdb をどのように交換しますか?

  3. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?