Le petit programme C ci-dessous nous aidera à identifier si un disque/partition est toujours utilisé par ASM, a été utilisé par ASM ou n'a pas été utilisé par ASM sur les plates-formes Unix ou Linux.
1. Tout d'abord, nous devons compiler le code C ci-dessous :
#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. Enregistrez le code ci-dessus en tant que fichier ASCII , puis à l'aide d'un compilateur C, compilez-le comme suit :
$ 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. Vérifiez le(s) disque(s) souhaité(s) avec le script compilé. nous pouvons obtenir 4 états comme indiqué ci-dessous à la suite du script :
1. Le disque n'a pas été utilisé par 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. Le disque est toujours utilisé par 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. Le disque a été utilisé par ASM
SQL> drop diskgroup DATADG; Diskgroup dropped. SQL> !checkasmdisk /dev/sda14 This disk /dev/sda14 has been used by ASM
4. Le disque n'est pas accessible
# 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/sda14Oracle ASM :script shell pour mapper des périphériques de disque physique sur des disques ASMLIB