Пара слов про установку Oracle на Ubuntu

    Не так давно мне нужно было быстро поднять маленькую виртуалку под Linux, чтобы проверить переносимость одного модуля в своем приложении, написанного на Java и вызывающего Oracle SQL Loader через java.lang.Process API.

    Поскольку, как известно, Oracle SQL Loader не входит в поставку Oracle Instant Client, то для такой задачи надо или копировать руками нужные библиотеки с машины, где установлен сервер, либо ставить на этой виртуалке полный сервер Oracle.

    Установка Oracle Enterprise Edition под Ubuntu это задача не на 5 минут. Полная и точная (по словам автора — я сам пробовал многочисленные похожие инструкции, все равно полностью без ошибок поставить ни разу не удавалось) инструкция находится здесь — www.excession.org.uk/blog/installing-oracle-on-ubuntu-karmic-64-bit.html. Сравните, насколько это геморройнее и сложнее, чем установка того же Oracle EE под Windows — там запустил OUI (Oracle Universal Installer) и следуешь его указанием. Короче, отличный пример протекающей абстракции в Linux среде (хотя, казалось бы, user-friendly дистрибутив) в духе Джоэля Спольски.

    Но для Express (XE) версии есть все же человеческое решение.



    Оригинал по английки тут — www.varyonic.com/2010/01/installing-oracle-xe-on-ubuntu., и я наткнулся на него не сразу, наверное потому что сначала пытался поставить Enterprise Edition.

    Мой вольный перевод на русский:

    Oracle XE официально доступен только под x86 системы, хотя, возможно, его можно с помощью бубна, удачи и чьей-то матери поставить и на x64. Требует это чудо природы 512Мб памяти и 1Гб свопа.

    Для установки на Ubuntu через apt-get добавьте в файл /etc/apt/sources.list следующую строчку:

    deb oss.oracle.com/debian unstable main non-free

    и потом запустите под рутом (т.е. sudo .., он спросит пароль текущего юзера и исполнит команду под рутом):

    wget oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | sudo apt-key add -
    apt-get update
    apt-get install oracle-xe


    Библиотеки libaio и bc доступны в самом репозитории, и будут подтянуты автоматически по зависимостям, ставить их вручную больше не нужно.

    Надеюсь, кому-то это будет полезно.

    Комментарии 11

      0
      целая статья про то как добавить реп и набрать команду установки? — сильно
        +1
        В вопросах и ответах такое по формату не подходит, а формата «котротких заметок» тут на Хабре пока нет. А сама инфа пригодится многим.
        0
        >… unstable main non-free

        Желаю вам удачи и всяческих удовольствий в проверке. Заодно видимо и проверите насколько unstable :)

        А в установке SE/EE на бубунту ничего сложного нет, если конечно не считать сложным поставить чучуть пакетов из стандартных репов, скачнуть две сборки либы, да вписать немножко буковок в sysctl.
          0
          А мне для девелоперских целей, пусть будет чуть-чуть unstable. А, раз уж вы ставили EE под убунту, дайте линк на полную и работающую инструкцию? А то по линку что я дал ошибки в процессе инсталла все равно валятся.
            +3
            К сожалению оригинальную статью найти не могу, но для себя писал howto-ку, под катом. Для разных версий бубунты могут отличаться названия пакетов, но несложно понять какие именно нужны, поискав через aptitude search

            Устанавливаем Oracle 10gR2 на Ubuntu-10.04

            1. Устанавливаем пакеты, требуемые для оракла

            apt-get install unzip build-essential x11-utils rpm ksh lsb-rpm libaio1
            apt-get install libc6 libc6-dev linux-libc-dev alien binutils libdb1-compat make gcc libgcc1 sysstat unixODBC unixODBC-dev pdksh elfutils libelf-dev
            apt-get install libaio-dev libstdc++6
            apt-get install libstdc++6-4.3-dev # libstdc++-dev
            apt-get install gdc lib32c-dev libc6-i386 libc6-dev-i386
            apt-get install ssh lsh-client
            apt-get install rlwrap # для врапера sqlplus
            apt-get install sysv-rc-conf # для настройки демона автозапуска прослушивателя

            2. Качаем либы C++ версии 5, требуемые для оракла, доставляем их руками

            wget mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-17ubuntu1_amd64.deb
            dpkg-deb -x libstdc++5_3.3.6-17ubuntu1_amd64.deb ia64-libs
            sudo cp ia64-libs/usr/lib/libstdc++.so.5.0.7 /usr/lib64/
            cd /usr/lib64/
            sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5

            cd

            wget security.ubuntu.com/ubuntu/pool/universe/i/ia32-libs/ia32-libs_2.7ubuntu6.1_amd64.deb
            dpkg-deb -x ia32-libs_2.7ubuntu6.1_amd64.deb ia32-libs
            sudo cp ia32-libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib32/
            cd /usr/lib32
            sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5

            2.1 Доставляем библиотеку (после того как мы руками создали линки на библиотеки)

            apt-get install ia32-libs # ia64-libs

            3. Создаем пользователя и группу

            sudo su — addgroup oinstall
            addgroup dba
            addgroup nobody

            useradd -s /bin/bash -g oinstall -G dba oracle -d /opt/oracle
            passwd oracle
            mkdir /opt/oracle
            chown -R oracle:oinstall /opt/oracle

            4. Создаем ссылки на ПО по образу рэд-хата

            ln -s /usr/bin/awk /bin/awk
            ln -s /usr/bin/rpm /bin/rpm
            ln -s /usr/bin/basename /bin/basename
            sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
            mkdir /etc/rc.d
            for i in 0 1 2 3 4 5 6 S; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d; done
            mkdir -p /opt/oracle/database
            chown -R oracle:oinstall /opt/oracle/database

            5. Правим параметры sysctl

            В файле /etc/sysctl.conf (предварительно делаем бэкап файла)

            fs.file-max = 6815744
            fs.aio-max-nr = 1048576
            kernel.shmall = 2097152
            kernel.shmmax = 2147483648
            kernel.shmmni = 4096
            kernel.sem = 250 32000 100 128
            net.core.rmem_default = 4194304
            net.core.rmem_max = 4194304
            net.core.wmem_default = 1048576
            net.core.wmem_max = 1048576
            net.ipv4.ip_local_port_range = 9000 65535
            vm.swappiness=5

            В файле /etc/security/limits.conf (предварительно делаем бэкап файла)

            oracle soft nproc 2047
            oracle hard nproc 16383
            oracle soft nofile 1023
            oracle hard nofile 65535

            Активируем новые настройки командой

            sysctl -p

            6. Запускаем инсталлер (предварительно логинимся пользователем oracle)

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

            export ORACLE_HOME=/opt/oracle/database
            export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32
            cd db_linux64_install
            ./runInstaller -ignoreSysPrereqs

            При ошибке: ins_emdb (error invoking target 'collector' ...) просто жмакаем «Continue»


            7. Правим профайл юзера оракла (/opt/oracle/.bashrc) (или лучше системный профайл /etc/profile), добавляем

            ORACLE_BASE=/opt/oracle
            ORACLE_HOME=/opt/oracle/database
            ORACLE_SID=ndb
            export ORACLE_BASE ORACLE_HOME ORACLE_SID
            PATH=$ORACLE_HOME/bin:$PATH:.
            export PATH
            LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
            CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
            export LD_LIBRARY_PATH CLASSPATH
            alias sqlplus='rlwrap sqlplus'
            export NLS_LANG=AMERICAN_AMERICA.UTF8
            export JAVA_HOME=/usr/lib/jvm/java-6-sun

            8. Послеустановочные действия
            DBCA на различные действия (создание БД например) может ругаться

            ORA-27125: unable to create shared memory segment

            решение такое:

            cd $ORACLE_HOME/bin
            mv oracle oracle.bin
            vi oracle # и вносим строчки в него
            #!/bin/bash
            export DISABLE_HUGETLBFS=1
            exec $ORACLE_HOME/bin/oracle.bin $@
            chmod +r oracle
            chmod +x oracle

            9. Настраиваем автозапуск прослушивателя

            su — cd /etc/init.d
            vi listener # создаем демон запуска/остановки прослушивателя

            — file begin — #!/bin/bash
            #
            # chkconfig: 345 51 49
            # description: startup and shutdown the Oracle 10g listener
            #
            echo «Oracle 10g listener start/stop/restart/status»
            ORA_OWNER=oracle
            ORACLE_BASE=/opt/oracle
            ORACLE_HOME=/opt/oracle/database
            ORACLE_SID=navdb
            export ORACLE_BASE ORACLE_HOME ORACLE_SID
            PATH=$ORACLE_HOME/bin:$PATH:.
            export PATH
            LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
            CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
            export LD_LIBRARY_PATH CLASSPATH
            alias sqlplus='rlwrap sqlplus'
            export NLS_LANG=AMERICAN_AMERICA.UTF8

            case $1 in
            start)
            echo -n «Starting oracle listener: „
            su — $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl start»
            echo
            ;;

            stop)
            echo -n «Shutting down oracle listener: „
            su — $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl stop»
            echo
            ;;

            status)
            echo -n «Status of oracle listener: „
            su — $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl status»
            echo
            ;;

            restart)
            echo -n «Restarting oracle listener:»
            $0 stop
            $0 start
            echo
            ;;
            *)

            echo «Usage: listener [ start | stop | restart | status ]»
            exit 1
            esac
            exit 0
            — file end — chmod 700 listener
            sysv-rc-conf --level 2345 listener on # в некоторых версиях не работает так, приходится ручками править через sysv-rc-conf (она графическая в консоли)

            10. Настраиваем автозапуск инстанса
            создаем файл /etc/init.d/oracle, который будет читать настройки из файла /etc/oratab и запускать соответствующие инстансы

            — file begin — #!/bin/bash
            #
            # /etc/init.d/oracle
            #
            # Run-level Startup script for the Oracle Instance, Listener, and Web Interface

            echo «Oracle 10g database start/stop/restart»
            ORA_OWNER=oracle
            ORACLE_BASE=/opt/oracle
            ORACLE_HOME=/opt/oracle/database
            ORACLE_SID=navdb
            export ORACLE_BASE ORACLE_HOME ORACLE_SID
            PATH=$ORACLE_HOME/bin:$PATH:.
            export PATH
            LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
            CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
            export LD_LIBRARY_PATH CLASSPATH
            alias sqlplus='rlwrap sqlplus'
            export NLS_LANG=AMERICAN_AMERICA.UTF8

            # if the executables do not exist — display error

            if [! -f $ORACLE_HOME/bin/dbstart -o! -d $ORACLE_HOME ]
            then
            echo «Oracle startup: cannot start»
            exit 1
            fi

            # depending on parameter — startup, shutdown, restart
            # of the instance and listener or usage display

            case "$1" in
            start)
            # Oracle listener and instance startup
            echo -n «Starting Oracle: „
            su $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl start»
            su $ORA_OWNER -c $ORACLE_HOME/bin/dbstart
            touch /var/lock/oracle
            # su $ORA_OWNER -c "$ORACLE_HOME/bin/emctl start dbconsole"
            echo «OK»
            ;;
            stop)
            # Oracle listener and instance shutdown
            echo -n «Shutdown Oracle: „
            su $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl stop»
            su $ORA_OWNER -c $ORACLE_HOME/bin/dbshut
            rm -f /var/lock/oracle
            # su $ORA_OWNER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
            echo «OK»
            ;;
            restart)
            $0 stop
            $0 start
            ;;
            *)
            echo «Usage: `basename $0` start|stop|restart»
            exit 1
            esac
            exit 0
            — file end — chmod 700 oracle
            sysv-rc-conf --level 2345 oracle on

            Настраиваем нужные инстансы в /etc/oratab, заменяет :N на :Y при необходимости автостарта

            11. Особенности:

            При установке оракл запоминает привязку IP к имени компа в /etc/hosts. Был такой случай когда я поменял привязку
            127.0.1.1 ubuntu-server-test
            на
            127.0.1.1 server-test
            после этой замены экземпляры оракла перестали запускаться с ошибкой:
            ubuntu ORA-00600: internal error code, arguments: [keltnfy-ldmInit], [46], [1], [], [], [], [], []
            добавление в /etc/hosts старой привязки исправило ситуацию.

            12. Все.
              0
              Извиняюсь, habracut почему-то не сработал, видимо не умею его готовить… :(
                0
                Отличное хау-ту, может, напишете отдельный пост по нему?
                  0
                  хабракат работает только в постах, не в комментариях
              0
              И это, кстати, да — сложно. В user-friendly среде я должен мочь дать команду — apt-get install oracle-server, или что-то подобное, и он должен найти и предложить версию, скачать, и запустить инсталлятор. Я понимаю, тут без помощи самого оракла такое не сделать, но тем не менее несколько напрягает.
              0
              А зачем ставить целиком сервер, если кроме instant client есть обычный клиент, в котором есть тот самый sql loader?
              • НЛО прилетело и опубликовало эту надпись здесь

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое