Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Создание пользователя oracle

Code Block

# groupadd -r oinstall && \
  groupadd dba && \
  useradd -r -g oinstall -G dba -s /bin/bash -d /opt/oracle -m oracle

В случае, если в системе не существует группы nobody, ее необходимо создать:

Code Block

# groupadd -r nobody

Также нужно добавить в группу dba некоторых пользователей, чтобы у них было право выполнять команды под пользователем oracle:

Code Block

# usermod -a -G dba nixon && \
  usermod -a -G dba llama && \
  usermod -a -G dba gordon && \
  usermod -a -G dba fly && \
  usermod -a -G dba lodkin && \
  usermod -a -G dba tischenko && \
  usermod -a -G dba sda

После этого необходимо добавить новый конфигурационный файл sudo /etc/sudoers.d/oracle и выдать специальные права доступа к нему:

Code Block

# echo "%dba        ALL=(oracle)    NOPASSWD: ALL" > /etc/sudoers.d/oracle && \
  chmod 0440 /etc/sudoers.d/oracle

Конфигурирование ядра

Code Block

root@hydra:~# apt-get install bc

Для установки и сохранения необходимых параметров ядра следует воспользоваться следующей командой:

Code Block

# setparam() { val=`cat /proc/sys/${1//.//}`; if [ "$1" = "kernel.sem" ] || [ "$2" -gt "$val" ]; then val="$2"; fi; echo "$1 = $val" >> /etc/sysctl.d/oracle.conf; }
  echo -n "Memory per DB [GB]: " && read DB_MEM && \
  echo -n "DB count: " && read DB_COUNT && \
  setparam "kernel.shmall" `echo "$(free -b|grep Mem|awk '{print$2}')/$(getconf PAGE_SIZE)"|bc` && \
  setparam "kernel.shmmax" `echo "$DB_COUNT*$DB_MEM*1024*1024*1024*3/2"|bc` && \
  setparam "kernel.shmmni" 4096 && \
  setparam "kernel.sem" "250 32000 100 128" && \
  setparam "fs.file-max" 6815744 && \
  setparam "fs.aio-max-nr" 262144 && \
  setparam "net.core.rmem_default" 262144 && \
  setparam "net.core.wmem_default" 4194304 && \
  setparam "net.core.rmem_max" 1048576 && \
  setparam "net.core.wmem_max" 1048576 && \
  sysctl -p /etc/sysctl.d/oracle.conf

...

В файл /etc/security/limits.conf необходимо добавить следующее содержимое:

Code Block

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 64000

В файл /etc/pam.d/login необходимо добавить следующую строку (если ее там нет):

Code Block

session    required   pam_limits.so

...

В зависимости от дистрибутива необходимо произвести следующие действия.

  1. Gentoo Linux
    Необходимо создать файл /etc/env.d/99oracleсо следующим содержимым:

    Code Block
    
    ORACLE_BASE="/opt/oracle"
    ORACLE_HOME="/opt/oracle/product/11.2.0.2"
    ORACLE_SID="$ORACLE_SID"
    ORACLE_OWNER="oracle"
    TNS_ADMIN="/etc/oracle"
    NLS_LANG="AMERICAN_RUSSIA.AL32UTF8"
    DISABLE_HUGETLBFS="1"
    PATH="/opt/oracle/product/11.2.0.2/bin"
    ROOTPATH="/opt/oracle/product/11.2.0.2/bin"
    TZ="$TZ"
    

    $TZ нужно заменить на часовой пояс системы (например, Europe/Moscow), $ORACLE_SID — название основной БД (будет создана отдельно и, как правило, совпадает с названием компании).
    После этого нужно обновить системные переменные окружения следующей командой:

    Code Block
    
    # env-update && \
      source /etc/profile
    
  2. Debian Linux
    Необходимо добавить в файл /etc/environmentследующее содержимое:

    Code Block
    
    ORACLE_BASE="/opt/oracle"
    ORACLE_HOME="/opt/oracle/product/11.2.0.2"
    ORACLE_SID="$ORACLE_SID"
    ORACLE_OWNER="oracle"
    TNS_ADMIN="/etc/oracle"
    NLS_LANG="AMERICAN_RUSSIA.AL32UTF8"
    DISABLE_HUGETLBFS="1"
    TZ="$TZ"
    

    $TZ нужно заменить на часовой пояс системы (например, Europe/Moscow), $ORACLE_SID — название основной БД (будет создана отдельно и, как правило, совпадает с названием компании).
    Также необходимо добавить в файл /etc/profileперед строкой

    Code Block
    export PATH

    следующее содержимое:

    Code Block
    PATH="$PATH:/opt/oracle/product/11.2.0.2/bin"

    После этого нужно перевыполнить вход в систему, чтобы переменные окружения обновились.

  3. Ubuntu Linux
    Необходимо изменить в файле /etc/environment значение переменной PATH, добавив в конец ее значения следующее содержимое:

    Code Block
    
    :/opt/oracle/product/11.2.0.2/bin
    

    Также дополнительно необходимо добавить в этот файл следующее содержимое:

    Code Block
    
    ORACLE_BASE="/opt/oracle"
    ORACLE_HOME="/opt/oracle/product/11.2.0.2"
    ORACLE_SID="$ORACLE_SID"
    ORACLE_OWNER="oracle"
    TNS_ADMIN="/etc/oracle"
    NLS_LANG="AMERICAN_RUSSIA.AL32UTF8"
    DISABLE_HUGETLBFS="1"
    TZ="$TZ"
    

    $TZ нужно заменить на часовой пояс системы (например, Europe/Moscow), $ORACLE_SID — название основной БД (будет создана отдельно и, как правило, совпадает с названием компании).
    После этого нужно перевыполнить вход в систему, чтобы переменные окружения обновились.

  4. Red Hat Enterprise Linux
    В файл /etc/environmentнеобходимо добавить следующее содержимое:

    Code Block
    
    ORACLE_BASE="/opt/oracle"
    ORACLE_HOME="/opt/oracle/product/11.2.0.2"
    ORACLE_SID="$ORACLE_SID"
    ORACLE_OWNER="oracle"
    TNS_ADMIN="/etc/oracle"
    NLS_LANG="AMERICAN_RUSSIA.AL32UTF8"
    DISABLE_HUGETLBFS="1"
    PATH="$PATH"
    TZ="$TZ"
    

    $TZ нужно заменить на часовой пояс системы (например, Europe/Moscow), $ORACLE_SID — название основной БД (будет создана отдельно и, как правило, совпадает с названием компании).
    $PATHнужно заменить результатом выполнения команды:

    Code Block
    
    # echo $PATH:/opt/oracle/product/11.2.0.2/bin
    

    После этого нужно перевыполнить вход в систему, чтобы переменные окружения обновились.

Инсталляция Oracle

В зависимости от дистрибутива ОС необходимо произвести следующие дополнительные действия.

  1. Gentoo Linux (x64)
    Нужно установить следующие пакеты:

    Code Block
    
    # emerge openmotif libXtst libaio rpm && \
      emerge app-emulation/emul-linux-x86-baselibs app-emulation/emul-linux-x86-xlibs app-emulation/emul-linux-x86-compat && \
      USE="pic" emerge glibc binutils
    

    После выполнения вышеуказанных команд требуется создать необходимые символические ссылки:

    Code Block
    
    # ln -s /usr/bin/rpm /bin/rpm && \
      ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
    

    Также необходимо установить OpenSSH-сервер с USE-флагом "X", если это еще не сделано:

    Code Block
    
    # USE="X" emerge openssh
    
  2. Ubuntu Linux (x64), Debian Linux (x64)
    Нужно установить следующие пакеты:

    Code Block
    
    # apt-get install gcc libaio1 libstdc++5 lesstif2 lesstif2-dev libc6-i386 && \
      apt-get install libc6-dev-i386 lib32stdc++6 lib32z1 ia32-libs sysstat && \
      apt-get install rlwrap unixodbc unixodbc-dev elfutils rpm make g++
    

    После выполнения вышеуказанных действий требуется создать необходимые символические ссылки:

    Code Block
    
    # ln -s /usr/bin/awk /bin/awk && \
      ln -s /usr/bin/rpm /bin/rpm && \
      ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so && \
      ln -s /usr/bin/basename /bin/basename
    
  3. CentOs Linux (x64)
    Нужно установить следующие пакеты:

    Code Block
    
    # yum install setarch-2* make-3* glibc-2* libaio-0* && \
      yum install compat-libstdc++-33-3* compat-gcc-34-3* compat-gcc-34-c++-3* gcc-4* libXp-1* && \
      yum install openmotif-2* compat-db-4*
    

    После выполнения вышеуказанных действий требуется создать символическую ссылку:

    Code Block
    
    # ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
    

Далее следует извлечь архив с Oracle 11.2.0.2 во временную директорию и выполнить ssh-вход в систему с использованием "X11Forwarding". Пример команды:

Code Block

$ ssh -X user@server

Для запуска инсталлятора СУБД необходимо запустить установщик следующей командой (пользователю должно быть дано право выполнять команды от имени пользователя oracle):

Code Block

$ chmod o+r ~/.Xauthority && \
  sudo -u oracle -E ./database/runInstaller -ignoreSysPrereqs

...

По окончании установки необходимо выполнить следующие 2 файла от пользователя root:

Code Block

# /opt/oracle/oraInventory/orainstRoot.sh && \
  /opt/oracle/product/11.2.0.2/root.sh

Также требуется создать директорию /var/oradata для пользователя oracle, в которой в дальнейшем будут храниться БД Oracle:

Code Block

# mkdir /var/oradata && \
  chmod 750 /var/oradata && \
  chown oracle:oinstall /var/oradata

...

Необходимо создать каталог /etc/oracle, в котором будет лежать конфигурационный файл:

Code Block

# mkdir /etc/oracle

Далее в этом каталоге требуется создать конфигурационный файл прослушивателя listener.ora

Code Block

LISTENER = (
  ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)

SID_LIST_LISTENER = (
  SID_LIST =
    (SID_DESC = (SID_NAME = $ORACLE_SID)(ORACLE_HOME = /opt/oracle/product/11.2.0.2))
)

$ORACLE_SID нужно заменить на название основной БД (обязательно в нижнем регистре!). После создания нужно убрать права на чтение данного файла для всех пользователей:

Code Block

# chmod o-r /etc/oracle/listener.ora

После создания файла нужно поменять владельца директории /etc/oracle:

Code Block

# chown -R oracle:oinstall /etc/oracle

...

  1. Gentoo Linux
    Нужно создать следующие 2 файла в /etc/init.d с соответствующим содержимым:
    1. ora.database — управление БД

      Code Block
      collapsetrue
      
      #!/sbin/runscript
      
      # АСР "Гидра". Инициализационный скрипт БД Oracle
      # Автор: Петров Н. В.
      # (C) ООО "Латера Софтвер"
      # www.latera.ru | info@latera.ru
      
      
      # Зависимости
      depend() {
        need net logger hostname clock
      }
      
      
      # Запуск
      start() {
        ebegin "Starting Oracle Database"
      
        # Запуск БД
        su $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
      
        # Выход с результатом запуска
        eend $?
      }
      
      # Остановка
      stop() {
        ebegin "Stopping Oracle Database"
      
        # Остановка БД
        su $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
      
        # Выход с результатом остановки
        eend $?
      }
      
    2. ora.listener — управление прослушивателем СУБД

      Code Block
      collapsetrue
      
      #!/sbin/runscript
      
      # АСР "Гидра". Инициализационный скрипт прослушивателя СУБД Oracle
      # Автор: Петров Н. В.
      # (C) ООО "Латера Софтвер"
      # www.latera.ru | info@latera.ru
      
      
      # Зависимости
      depend() {
        need net logger hostname clock
        after ora.database
      }
      
      
      # Запуск
      start() {
        ebegin "Starting Oracle listener"
      
        # Запуск прослушивателя
        su $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start LISTENER"
      
        # Выход с результатом запуска
        eend $?
      }
      
      # Остановка
      stop() {
        ebegin "Stopping Oracle listener"
      
        # Остановка прослушивателя
        su $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop LISTENER"
      
        # Выход с результатом остановки
        eend $?
      }
      

      После создания файлов необходимо выдать разрешение на их запуск и добавить в автозапуск:

      Code Block
      
      # chmod +x /etc/init.d/ora.* && \
        rc-update add ora.database default && \
        rc-update add ora.listener default
      
  2. Ubuntu Linux, Debian Linux
    Нужно создать следующие 2 файла в /etc/init.d с соответствующим содержимым:
    1. ora.database — управление БД

      Code Block
      collapsetrue
      
      #!/bin/bash
      
      # АСР "Гидра". Инициализационный скрипт БД Oracle
      # Автор: Петров Н. В.
      # (C) ООО "Латера Софтвер"
      # www.latera.ru | info@latera.ru
      
      ### BEGIN INIT INFO
      # Provides:          ora.database
      # Required-Start:    $network
      # Required-Stop:     $network
      # Should-Start:      network-manager
      # Should-Stop:       network-manager
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: Oracle database
      ### END INIT INFO
      
      
      # Коды возврата скрипта
      RET_OK="0"
      RET_BAD_USAGE="1"
      RET_FAILED_RUN="2"
      
      
      # Подключение инит-функций
      . /lib/lsb/init-functions
      
      # Запись в вывод ошибок
      function echo_err {
        echo $@ >&2
      }
      
      # Инициализация окружения
      function init_environment {
        . /etc/environment
        export ORACLE_HOME
        export ORACLE_OWNER
      }
      
      # Выполнение команды
      function run_cmd {
        # Выполнение команды
        eval $@
      
        # Если выполнение было неудачным
        if [ $? != "0" ]; then
          # Завершение выполнения скрипта
          log_end_msg $RET_FAILED_RUN
          exit $RET_FAILED_RUN
        fi
      }
      
      
      # Действие на основе первого параметра вызова скрипта
      case "$1" in
        # Запуск
        start)
          log_daemon_msg "Starting Oracle Database"
      
          # Инициализация окружения
          init_environment
      
          # Запуск БД
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/dbstart $ORACLE_HOME\""
      
          # Выход c успехом
          log_end_msg $RET_OK
          exit $RET_OK
          ;;
        # Остановка
        stop)
          log_daemon_msg "Stopping Oracle Database"
      
          # Инициализация окружения
          init_environment
      
          # Остановка БД
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/dbshut $ORACLE_HOME\""
      
          # Выход c успехом
          log_end_msg $RET_OK
          exit $RET_OK
          ;;
        # Перезапуск
        restart)
          # Остановка
          $0 stop
          # Запуск
          $0 start
      
          # Выход с успехом
          exit $RET_OK
          ;;
        # Любое другое действие
        *)
          # Вывод сообщения с вариантами использования
          echo_err "Usage: $0 (start|stop|restart)"
      
          # Выход с неудачей
          exit $RET_BAD_USAGE
          ;;
      esac
      
    2. ora.listener — управление прослушивателем СУБД

      Code Block
      collapsetrue
      
      #!/bin/bash
      
      # АСР "Гидра". Инициализационный скрипт прослушивателя СУБД Oracle
      # Автор: Петров Н. В.
      # (C) ООО "Латера Софтвер"
      # www.latera.ru | info@latera.ru
      
      ### BEGIN INIT INFO
      # Provides:          ora.listener
      # Required-Start:    $network
      # Required-Stop:     $network
      # Should-Start:      network-manager ora.database
      # Should-Stop:       network-manager ora.database
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: Oracle listener
      ### END INIT INFO
      
      
      # Коды возврата скрипта
      RET_OK="0"
      RET_BAD_USAGE="1"
      RET_FAILED_RUN="2"
      
      
      # Подключение инит-функций
      . /lib/lsb/init-functions
      
      # Запись в вывод ошибок
      function echo_err {
        echo $@ >&2
      }
      
      # Инициализация окружения
      function init_environment {
        . /etc/environment
        export ORACLE_HOME
        export ORACLE_OWNER
      }
      
      # Выполнение команды
      function run_cmd {
        # Выполнение команды
        eval $@
      
        # Если выполнение было неудачным
        if [ $? != "0" ]; then
          # Завершение выполнения скрипта
          log_end_msg $RET_FAILED_RUN
          exit $RET_FAILED_RUN
        fi
      }
      
      
      # Действие на основе первого параметра вызова скрипта
      case "$1" in
        # Запуск
        start)
          log_daemon_msg "Starting Oracle listener"
      
          # Инициализация окружения
          init_environment
      
          # Запуск прослушивателя
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/lsnrctl start LISTENER\""
      
          # Выход c успехом
          log_end_msg $RET_OK
          exit $RET_OK
          ;;
        # Остановка
        stop)
          log_daemon_msg "Stopping Oracle listener"
      
          # Инициализация окружения
          init_environment
      
          # Остановка прослушивателя
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/lsnrctl stop LISTENER\""
      
          # Выход c успехом
          log_end_msg $RET_OK
          exit $RET_OK
          ;;
        # Перезапуск
        restart)
          # Остановка
          $0 stop
          # Запуск
          $0 start
      
          # Выход с успехом
          exit $RET_OK
          ;;
        # Любое другое действие
        *)
          # Вывод сообщения с вариантами использования
          echo_err "Usage: $0 (start|stop|restart)"
      
          # Выход с неудачей
          exit $RET_BAD_USAGE
          ;;
      esac
      

      После создания файлов необходимо выдать разрешение на их запуск и добавить в автозапуск:

      Code Block
      
      # chmod +x /etc/init.d/ora.* && \
        update-rc.d ora.database defaults && \
        update-rc.d ora.listener defaults
      
  3. Red Hat Enterprise Linux
    Нужно создать следующие 2 файла в /etc/init.d с соответствующим содержимым:
    1. ora.database — управление БД

      Code Block
      collapsetrue
      
      #!/bin/bash
      
      # АСР "Гидра". Инициализационный скрипт БД Oracle
      # Автор: Петров Н. В.
      # (C) ООО "Латера Софтвер"
      # www.latera.ru | info@latera.ru
      
      # Коды возврата скрипта
      RET_OK="0"
      RET_BAD_USAGE="1"
      RET_FAILED_RUN="2"
      
      
      # Запись в вывод ошибок
      function echo_err {
        echo $@ >&2
      }
      
      # Инициализация окружения
      function init_environment {
        . /etc/environment
        export ORACLE_HOME
        export ORACLE_OWNER
      }
      
      # Выполнение команды
      function run_cmd {
        # Выполнение команды
        eval $@
      
        # Если выполнение было неудачным
        if [ $? != "0" ]; then
          # Завершение выполнения скрипта
          log_end_msg $RET_FAILED_RUN
          exit $RET_FAILED_RUN
        fi
      }
      
      
      # Действие на основе первого параметра вызова скрипта
      case "$1" in
        # Запуск
        start)
          echo "Starting Oracle Database..."
      
          # Инициализация окружения
          init_environment
      
          # Запуск БД
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/dbstart $ORACLE_HOME\""
      
          # Выход c успехом
          exit $RET_OK
          ;;
        # Остановка
        stop)
          echo "Stopping Oracle Database..."
      
          # Инициализация окружения
          init_environment
      
          # Остановка БД
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/dbshut $ORACLE_HOME\""
      
          # Выход c успехом
          exit $RET_OK
          ;;
        # Перезапуск
        restart)
          # Остановка
          $0 stop
          # Запуск
          $0 start
      
          # Выход с успехом
          exit $RET_OK
          ;;
        # Любое другое действие
        *)
          # Вывод сообщения с вариантами использования
          echo_err "Usage: $0 (start|stop|restart)"
      
          # Выход с неудачей
          exit $RET_BAD_USAGE
          ;;
      esac
      
    2. ora.listener — управление прослушивателем СУБД

      Code Block
      collapsetrue
      
      #!/bin/bash
      
      # АСР "Гидра". Инициализационный скрипт прослушивателя СУБД Oracle
      # Автор: Петров Н. В.
      # (C) ООО "Латера Софтвер"
      # www.latera.ru | info@latera.ru
      
      
      # Коды возврата скрипта
      RET_OK="0"
      RET_BAD_USAGE="1"
      RET_FAILED_RUN="2"
      
      
      # Запись в вывод ошибок
      function echo_err {
        echo $@ >&2
      }
      
      # Инициализация окружения
      function init_environment {
        . /etc/environment
        export ORACLE_HOME
        export ORACLE_OWNER
      }
      
      # Выполнение команды
      function run_cmd {
        # Выполнение команды
        eval $@
      
        # Если выполнение было неудачным
        if [ $? != "0" ]; then
          # Завершение выполнения скрипта
          log_end_msg $RET_FAILED_RUN
          exit $RET_FAILED_RUN
        fi
      }
      
      
      # Действие на основе первого параметра вызова скрипта
      case "$1" in
        # Запуск
        start)
          echo "Starting Oracle listener..."
      
          # Инициализация окружения
          init_environment
      
          # Запуск прослушивателя
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/lsnrctl start LISTENER\""
      
          # Выход c успехом
          exit $RET_OK
          ;;
        # Остановка
        stop)
          echo "Stopping Oracle listener..."
      
          # Инициализация окружения
          init_environment
      
          # Остановка прослушивателя
          run_cmd "su $ORACLE_OWNER -c \"$ORACLE_HOME/bin/lsnrctl stop LISTENER\""
      
          # Выход c успехом
          exit $RET_OK
          ;;
        # Перезапуск
        restart)
          # Остановка
          $0 stop
          # Запуск
          $0 start
      
          # Выход с успехом
          exit $RET_OK
          ;;
        # Любое другое действие
        *)
          # Вывод сообщения с вариантами использования
          echo_err "Usage: $0 (start|stop|restart)"
      
          # Выход с неудачей
          exit $RET_BAD_USAGE
          ;;
      esac
      

      После создания файлов необходимо выдать разрешение на их запуск и добавить в автозапуск:

      Code Block
      
      # chmod +x /etc/init.d/ora.* && \
        update-rc.d ora.database defaults && \
        update-rc.d ora.listener defaults
      

...

Следует выполнить следующую команду по запуску прослушивателя СУБД:

Code Block

# /etc/init.d/ora.listener start

...