Кілька способів визначити битность Oracle, Інші СУБД, Бази даних, статті

Автор: Юрій Пудовченко, Відділ центрів обробки даних “Відкриті Технології”


У ряді випадків у адміністратора баз даних виникає необхідність визначити битность ПО Oracle і битность бази даних.



  1. Найпростіше – набрати команду ls-ld $ ORACLE_HOME / lib * і перевірити наявність каталогів $ ORACLE_HOME / lib і $ ORACLE_HOME/lib32.

    Якщо на диску існують обидві директорії, то це 64-бітова інсталяція. Якщо на диску існує тільки директорія ORACLE_HOME / lib, то це – 32-бітова інсталяція.

    Приклади:

    AIX (64-біт)
    oracle@helios:~ $ ls -ld $OH/lib*
    drwxr-xr-x 2 oracle dba 8192 Apr 11 2008 /oracle/db9i/lib
    drwxr-xr-x 2 oracle dba 8192 Jun 05 2007 /oracle/db9i/lib32
    HPUX (64-біт)
    pluto:/u01/ORADB$ ls -ld lib*
    drwxr-xr-x 2 oracle dba 6144 Mar 28 2008 lib
    drwxr-xr-x 2 oracle dba 3072 Mar 28 2008 lib32
    LINUX32
    [oracle@rac1 ->]$ls -ld lib*
    drwxr-x— 3 oracle oinstall 12288 Jan 21 2008 lib
    LINUX64
    [ora11g@ora11g ~]$ ls -ld $OH/lib*
    drwxr-xr-x 3 ora11g dba 12288 Oct 31 19:40 /ora11g/ora11g/db_1/lib
    drwxr-xr-x 3 ora11g dba 4096 Oct 31 19:40 /ora11g/ora11g/db_1/lib32

  2. Виконати команду file:
        $ file $ORACLE_HOME/bin/oracle
    Результат досить очевидний:
    AIX         64-bit XCOFF executable or object module not stripped
    HP-UX IA ELF-64 executable object file – IA64
    HPUX PARISC ELF-64 executable object file – PA-RISC 2.0 (LP64)
    Solaris ELF 64-bit MSB executable SPARCV9 Version 1, dynamically linked, not stripped
    LINUX-32 setuid setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
    for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
    LINUX-64 setuid setgid ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV),
    for GNU/Linux 2.6.9, dynamically linked (uses shared libs),
    for GNU/Linux 2.6.9, not stripped

    Цю команду можна застосовувати не тільки до бінарним файлу oracle, але і до інших бінарниках, наприклад:
    [ora9i@www bin]$ file imp
    imp: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically
    linked (uses shared libs), not stripped

  3. Для вивчення бінарних файлів в операційних системах Unix (AIX, HPUX, SOLARIS, Linux) існує команда readelf, яка показує інформацію про ELF-файлах.
    Цю команду можна застосувати до бінарним файлів Oracle:
       /usr/local/bin/readelf -h $ORACLE_HOME/bin/oracle
    Результат її роботи виглядає так:
    [root@ora11g ~]# readelf -h /ora11g/ora11g/db_1/bin/oracle
    ELF Header:
    Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
    Class: ELF64
    Data: 2″s complement, little endian
    Version: 1 (current)
    OS/ABI: UNIX – System V
    ABI Version: 0
    Type: EXEC (Executable file)
    Machine: Advanced Micro Devices X86-64
    Version: 0x1
    Entry point address: 0x9553d0
    Start of program headers: 64 (bytes into file)
    Start of section headers: 172080696 (bytes into file)
    Flags: 0x0
    Size of this header: 64 (bytes)
    Size of program headers: 56 (bytes)
    Number of program headers: 8
    Size of section headers: 64 (bytes)
    Number of section headers: 32
    Section header string table index: 29
    Рядок Class: ELF64 або ELF32 покаже битность цього бінарного файлу.

    Для порівняння – 32-розрядна версія, отримана в Linux-32:

    [oracle@rac1 ->]$readelf -h oracle
    ELF Header:
    Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
    Class: ELF32
    Data: 2″s complement, little endian
    Version: 1 (current)
    OS/ABI: UNIX – System V
    ABI Version: 0
    Type: EXEC (Executable file)
    Machine: Intel 80386
    Version: 0x1
    Entry point address: 0x82c1310
    Start of program headers: 52 (bytes into file)
    Start of section headers: 90132080 (bytes into file)
    Flags: 0x0
    Size of this header: 52 (bytes)
    Size of program headers: 32 (bytes)
    Number of program headers: 8
    Size of section headers: 40 (bytes)
    Number of section headers: 31
    Section header string table index: 28
    У ряді випадків можна отримати інше повідомлення, яке, тим не менш, теж досить інформативно:
    [/u01/ORADB/bin]$ readelf -h ./oracle
    readelf: Error: This instance of readelf has been built without support
    for a
    64 bit data type and so it cannot read 64 bit ELF files.
    readelf: Error: ./oracle: Failed to read file header

  4. Якщо ситуація допускає підключення до БД, то розрядність Oracle можна подивитися в банері sqlplus, якщо вона присутня:
       $ sqlplus “/ as sysdba”

    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production

    Якщо явне вказівку 64-розрядності відсутній, то версію слід вважати 32-бітової.

    Однак при неакуратному виконанні в цьому методі існує ймовірність помилки.
    Розглянемо два варіанти підключення:


    • при відсутності змінної ORACLE_SID;
    • c невірної зазначеної змінної ORACLE_SID.
    Переконуємося, що бінарники є 64-бітовими:
    ora10g@host:ora10g# file $ORACLE_HOME/bin/oracle
    /oracle/db10g/bin/oracle: ELF 64-bit MSB executable SPARCV9
    Version 1, dynamically linked, not stripped
    Підключаємося з відсутнім ORACLE_SID:
    ora10g@holsten:ora10g#unset $ORACLE_SID
    ora10g@holsten:ora10g#sqlplus “/ as sysdba”
    SQL*Plus: Release 10.2.0.2.0 – Production on Tue Jul 17 10:35:15 2007
    Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
    ERROR:
    ORA-12162: TNS:net service name is incorrectly specified
    Enter user-name:
    ERROR:
    ORA-12162: TNS:net service name is incorrectly specified
    Enter user-name:
    ERROR:
    ORA-12162: TNS:net service name is incorrectly specified
    SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
    Іноді по квапливості чи через неуважність таку інсталяцію можна помилково визнати 32-бітової, тому що в банері відсутня вказівка ​​на 64-битность.
    Розглянемо випадок невірно встановленого ORACLE_SID:
    ora10g@holsten:ora10g#export ORACLE_SID=aaaaaa
    ora10g@holsten:ora10g#sqlplus “/ as sysdba”
    SQL*Plus: Release 10.2.0.2.0 – Production on Tue Jul 17 10:35:30 2007
    Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
    Connected to an idle instance.
    SQL> Disconnected
    В даному випадку також відсутній повідомлення про 64-розрядності, і тому адміністратор Oracle також може по-помилку віднести дану інсталяцію до 32-бітової версії.
  5. Якщо ситуація допускає підключення до БД, то можна опитати уявлення v $ version, доступне навіть користувачеві, що має тільки “create session”:
    SQL> select * from v$version;
    BANNER
    —————————————————————-
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – Prod
    PL/SQL Release 10.2.0.3.0 – Production
    CORE 10.2.0.3.0 Production
    TNS for Linux: Version 10.2.0.3.0 – Production
    NLSRTL Version 10.2.0.3.0 – Production
    SQL> select * from v$version;
    AIX
    —————————————————————-
    Oracle9i Enterprise Edition Release 9.2.0.8.0 – 64bit Production
    PL/SQL Release 9.2.0.8.0 – Production
    CORE 9.2.0.8.0 Production
    TNS for IBM/AIX RISC System/6000: Version 9.2.0.8.0 – Production
    NLSRTL Version 9.2.0.8.0 – Production
    HPUX
    —————————————————————-
    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 – 64bi
    PL/SQL Release 10.2.0.2.0 – Production
    CORE 10.2.0.2.0 Production
    TNS for Solaris: Version 10.2.0.2.0 – Production
    NLSRTL Version 10.2.0.2.0 – Production
    LINUX-64
    SQL> select * from v$version;
    BANNER
    ——————————————————————————–
    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – 64bit Production
    PL/SQL Release 11.1.0.6.0 – Production
    CORE 11.1.0.6.0 Production
    TNS for Linux: Version 11.1.0.6.0 – Production
    NLSRTL Version 11.1.0.6.0 – Production

  6. Наступний спосіб заснований на розрядності адрес.
    SELECT Length(addr)*4 // “-bits” word_length FROM v$process WHERE ROWNUM =1;
    [oracle@rac1 ->]$sqlplus “/ as sysdba”
    SQL*Plus: Release 10.2.0.3.0 – Production on Mon Nov 24 17:56:35 2008
    Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – Production
    With the Partitioning, Real Application Clusters, OLAP and Data Mining
    options
    SYS@racdb1 > SELECT Length(addr)*4 // “-bits” word_length FROM v$process
    WHERE ROWNUM =1;
    WORD_LENGTH
    ———————————————
    32-bits
    В даному випадку обрано уявлення v $ process, що містить поле ADDR, це наводить на думку, що можна скористатися іншими уявленнями словника, що містять стовпець ADDR. Тому виконуємо нескладний запит:
    select OWNER,TABLE_NAME from dba_tab_columns where COLUMN_NAME=”ADDR”;
    і виявляємо, що в версиии 9i існують ще п’ять дестякі уявлень, що містять стовпець “ADDR”:
    OWNER   TABLE_NAME                  OWNER   TABLE_NAME
    ——- ————————- ——- ———————-
    SYS GV$DLM_LATCH SYS V$RESUMABLE
    SYS GV$ENQUEUE_LOCK SYS V$TRANSACTION
    SYS GV$GLOBAL_BLOCKED_LOCKS SYS V$TRANSACTION_ENQUEUE
    SYS GV$LATCH SYS X$BH
    SYS GV$LATCH_CHILDREN SYS X$KCBFWAIT
    SYS GV$LATCH_PARENT SYS X$KCBWBPD
    SYS GV$LOCK SYS X$KCBWDS
    SYS GV$PROCESS SYS X$KSBDP
    SYS GV$RESOURCE SYS X$KSLED
    SYS GV$RESUMABLE SYS X$KSLEI
    SYS GV$TRANSACTION SYS X$KSLES
    SYS GV$TRANSACTION_ENQUEUE SYS X$KSLLD
    SYS STATS$X$KCBFWAIT SYS X$KSLLT
    SYS STATS$X$KSPPI SYS X$KSMLRU
    SYS STATS$X$KSPPSV SYS X$KSMSP
    SYS V$DLM_LATCH SYS X$KSPPCV
    SYS V$ENQUEUE_LOCK SYS X$KSPPI
    SYS V$GLOBAL_BLOCKED_LOCKS SYS X$KSPPSV
    SYS V$KCCDI SYS X$KSQRS
    SYS V$KCCFE SYS X$KSQST
    SYS V$LATCH SYS X$KSUSECST
    SYS V$LATCH_CHILDREN SYS X$KSUSESTA
    SYS V$LATCH_PARENT SYS X$KTFBFE
    SYS V$LOCK SYS X$KTFBHC
    SYS V$PROCESS SYS X$KTFBUE
    SYS V$RESOURCE
    А в моїй версії 10g існують близько 178 різних уявлень, виявити які можна запитом:
    SQL> select TABLE_NAME,COLUMN_NAME  from dba_tab_columns
    where COLUMN_NAME like “%ADDR%” and OWNER=”SYS”and DATA_ENGINE=”RAW”;

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*