Как я Установил ORACLE 10 r2 на Gentoo 2005.1

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск
Вернуться в раздел советов

Содержание

[править] Основная часть

После 3 дней копания в инете и по форумам я установил оракл. Хочу дать несколько рекомендаций.

  • Перед установкой сразу установите binutils (я взял binutils-2.16), а также установите libaio (Я нашел ее на сайте Fedora Linux). Главное - чтобы была версия 0.4.
  • Не нажимайте клавишу игнорировать при инсталяции, постарайтесь найти проблему (посте пункта 1 у меня все прошло по маслу). Потом будет намного хуже.

Если что, пишите, я поcтараюсь помочь (alien@icon3.ru).


Отбросьте Все скрипты, которые предлагают из оракла: Вот мой(Возражения принимаются):

  1. Для /etc/init.d/
Файл: /etc/init.d/oracle
 #!/sbin/runscript
 # Copyright 1999-2004 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2

depend() {
        use logger dns
        need net logger hostname clock
}
start() {
        ebegin "Starting Oracle"
        /bin/su  $ORACLE_OWNER -c "/opt/oracle/script/db_operate start"
        eend $? "Failed to start Oracle."
}
stop() {
        ebegin "Stopping Oracle"
        /bin/su  $ORACLE_OWNER -c "/opt/oracle/script/db_operate stop"
        eend $? "Failed to stop Oracle."
}
----
# /opt/oracle/script/db_operate (Пока отсутствует поддержка ASM, но, клянусь, допишу =))
----
 :
 # Скрипт по запуску и останову базы данных. Исполняется только из под Оракла!
 source /sbin/functions.sh
 ORACLE_OWNER="oracle"
 ORACLE_ROOT="/opt/oracle"
 ORACLE_HOME="$ORACLE_ROOT/product/10.2.0.1"
 ORACLE_LOG="$ORACLE_ROOT/log";
 LOGMSG="logger -puser.alert -s "
 LISTENER_LOG=$ORACLE_LOG/listener.log
 STARTUP_LOG=$ORACLE_LOG/startup.log
 SHUTDOWN_LOG=$ORACLE_LOG/shutdown.log
 PRG_LISTENER=$ORACLE_HOME/bin/tnslsnr
 PRG_LISTENER_CONTROL=$ORACLE_HOME/bin/lsnrctl
 ORA_TAB="/etc/oratab"
 ##### Команды SQLPLUS
 SqlPlusStart="sqlplus /nolog"
 SqlPlusConnect="connect / as sysdba"
 SqlPlusDbShut="shutdown abort"
 SqlPlusDbStart="startup pfile"
 SqlPlusQuit="quit"
 #set path if path not set (if called from /etc/rc)
case $PATH in
    "") PATH=/bin:/usr/bin:/etc
            export PATH ;
esac
 PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/etc ; export PATH
 LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib ; export LD_LIBRARY_PATH
 ##############################################################################
Check(){
        error=false;
        ebegin "Проверка окружения"
        eindent 3;
        if [ $ORACLE_OWNER != $USER ]; then
                eerror "Запуск скрипта можно только производить из под Пользователя ($ORACLE_OWNER)"
                error=true;
        fi
        if [ ! $ORACLE_HOME ] ; then
                eerror "ORACLE_HOME ($ORACLE_HOME) не существует"
                error=true;
        fi
        if [ ! -f $PRG_LISTENER ] ; then
                eerror "Листенер ($PRG_LISTENER) не существует"
                error=true;
        fi
        if [ ! -f $PRG_PRG_LISTENER_CONTROL ] ; then
                eerror "Листенер-Управление ($PRG_LISTENER_CONTROL) не существует"
                error=true;
        fi
        if [ ! -f $ORA_TAB ] ; then
                eerror "Список загружаемых баз данных не найден, проверьте ($ORA_TAB)"
                error=true;
        fi
        eoutdent 3;
        if [ $error != false ]; then
                eend -1;
                return -1;
        else
                eend 0;
                return 0;
        fi
}
CheckListener(){
        ebegin "Проверка состояния листенера"
        CheckLst=`ps -ef | egrep $PRG_LISTENER  | grep -v grep`
        if [ "$CheckLst" != "" ]; then
                LISTENER_START=1;
        else
                LISTENER_START=0;
        fi
        eend 0;
}
CheckSid(){
        error=false;
        eindent 3;
        ebegin "Проверка Инстанса $ORACLE_SID"
        PFILE="${ORACLE_HOME}/dbs/${ORACLE_SID}.ora"
        SPFILE=${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora
        SPFILE1=${ORACLE_HOME}/dbs/spfile.ora
        if [ ! -f $PFILE ] ; then
                eerror "Файл настройки инстанса ($PFILE) не найден"
                error=true;
        fi
        if [ -f $SPFILE ] ; then
                eerror "Файл $SPFILE не должен существовать"
                error=true;
        fi
        if [ -f $SPFILE1 ] ; then
                eerror "Файл $SPFILE1 не должен существовать"
                error=true;
        fi
        eoutdent 3;
        if [ $error = true ]; then
                eend -1;
                return -1;
        else
                eend 0;
                return 0;
        fi
}
Hello(){
        echo "* Скрипт для запуска и остановки баз данных оракла."
        echo "* Версия 1.0"
        echo "* Создатель AlienZzzz"
        echo "* Для запуска используйте командны $0 [Инстанс] start или stop "
        echo "* Если не указан Инстанс, то стартуются все базы, которые "
        echo "* Указаны в файле $ORA_TAB"
        echo "* Установки по умолчанию (можно поменять в скрипте):"
        echo "* ORACLE_ROOT = $ORACLE_ROOT"
        echo "* ORACLE_HOME = $ORACLE_HOME"
        echo "* ORACLE_LOG  = $ORACLE_LOG"
        echo "* LOGMSG      = $LOGMSG"
        echo "* ORA_TAB     = $ORA_TAB"

}
IsSIDStarted(){
        SIDps=`ps -ef | egrep pmon_$ORACLE_SID  | grep -v grep`
        if [ "$SIDps" = "" ];
        then
                SID_STARTED=0;
        else
                SID_STARTED=1;
        fi
}
PrepareLog(){
        case $1 in
                startup)
                        LOG_FILE=$STARTUP_LOG;
                ;;
                shutdown)
                        LOG_FILE=$SHUTDOWN_LOG;

                ;;
                listener_stop)
                        LOG_FILE=$LISTENER_LOG;
                ;;
                listener_start)
                        LOG_FILE=$LISTENER_LOG;
                ;;
        esac
        touch $LOG_FILE;
        if [ ! -w $LOG_FILE ]; then
                eerror "Файла для статистики для $1 ($LOG_FILE) не существует или нет доступа";
                return -1;
        else
                einfo "Файл статистики для $1: $LOG_FILE";
                return 0;
        fi
}
GetSidFromLine(){
 if [ "`echo $1 | awk -F: '{print $NF}' -`" = "Y" ] ; then
        ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`
 else
        ORACLE_SID="";
 fi
}
StartSidEOF(){
        $SqlPlusStart <<EOF
        $SqlPlusConnect
        $SqlPlusDbStart=$PFILE
        $SqlPlusQuit
EOF
}
StopSidEOF(){
        $SqlPlusStart <<EOF
        $SqlPlusConnect
        $SqlPlusDbShut
        $SqlPlusQuit
EOF
        return $?
}
StartSid(){
        ORACLE_SID=$1;
        IsSIDStarted;
        ebegin "Попытка запуска Инстанса $ORACLE_SID";
        eindent 3;

        error=false;
        if [ $SID_STARTED = 1 ]; then
                ewarn "Инстанс $ORACLE_SID уже запущен, останавливаю"
                StopSid $ORACLE_SID
        fi
        CheckSid;
        if [ $? != 0 ]; then
                error=true;
        else
                PrepareLog "startup";
                if [ $? != 0 ]; then
                        error=true;
                else
                        einfo "Файл параметров для инстанса $ORACLE_SID : $PFILE"
                        StartSidEOF >> $LOG_FILE 2>&1
                        IsSIDStarted;
                        if [ $SID_STARTED = 1 ]; then
                                einfo "Инстанс $ORACLE_SID запущен "
                        else
                                eerror "Инстанс $ORACLE_SID не запущен"
                                error=true;
                        fi
                fi
        fi
        eoutdent 3;
        if [ $error = false ]; then
                eend 0;
                return 0;
        else
                eend -1;
                return -1;
        fi
}
StopSid(){
        ORACLE_SID=$1;
        IsSIDStarted;
        ebegin "Попытка остановки Инстанса $ORACLE_SID";
        eindent 3;
        error=false;
        if [ $SID_STARTED = 0 ]; then
                ewarn "Инстанс $ORACLE_SID не запущен"
                eoutdent 3;
                eend -1;
                return -1;

        fi
        PrepareLog "shutdown";
        StopSidEOF >> $LOG_FILE 2>&1
        IsSIDStarted;
        if [ $SID_STARTED = 0 ]; then
                einfo "Инстанс $ORACLE_SID остановлен"
        else
                eerror "Инстанс $ORACLE_SID не остановлен"
                error=true;
        fi
        if [ $error = false ]; then
                eend 0;
                return 0;
        else
                eend -1;
                return -1;
        fi
}

StartListener(){
        ebegin "Попытка запуска Листенера "
        eindent 3;
        error=false;
        if [ $LISTENER_START = 1 ]; then
                ewarn "Листенер уже запущен, останавливаю"
                StopListener;
                if [ $? != 0 ] ;then
                        eoutdent 3;
                        exit;
                fi
        fi
        PrepareLog "listener_start";
        $PRG_LISTENER_CONTROL start >> $LOG_FILE 2>&1
        if test $? -eq 0 ; then
                einfo "Листенер запущен"
        else
                eerror "Листенер не запущен"
                error=true;
        fi
        eoutdent 3;
        if [ $error = false ]; then
                eend 0;
                return 0;
        else

                eend -1;
                return -1;
        fi
}
StopListener(){
        ebegin "Попытка остановки Листенера"
        eindent 3;
        error=false;
        PrepareLog "listener_stop";
        if [ $LISTENER_START = 1 ]; then
                $PRG_LISTENER_CONTROL stop >> $LOG_FILE 2>&1
                if test $? -eq 0 ; then
                        einfo "Листенер остановлен"
                else
                        eerror "Листенер не остановлен"
                        error=true
                fi
        else
                ewarn "Листенер не был запущен"
        fi
        if [ $error = false ]; then
                eend 0;
        else
                eend -1;
        fi
}
StartAll(){
        cat $ORA_TAB | while read LINE
                do
                        case $LINE in
                                \#*) # Коментарий
                                ;;
                                *) #Будут обрабатываться записи только с параметрами (Y или N)
                                        GetSidFromLine $LINE
                                        if [ "$ORACLE_SID" = "" ] ; then
                                                continue
                                        else
                                                StartSid $ORACLE_SID;
                                        fi
                                ;;
                        esac
                done
        return $?;
}
StopAll(){
        cat $ORA_TAB | while read LINE
                do
                        case $LINE in
                                \#*) # Комментарий
                                ;;
                                *) #Будут обрабатываться записи только с параметрами (Y или N)
                                        GetSidFromLine $LINE
                                        if [ "$ORACLE_SID" = "" ] ; then
                                                continue
                                        else
                                                StopSid $ORACLE_SID;
                                        fi
                                ;;

                        esac
                done
        return $?;
}
 # Начало скрипта
CheckListener;
case "$1" in
        start)
                StartListener;
                StartAll;
        ;;
        stop)
                StopAll;
                StopListener;
        ;;
        *)
                case "$2" in
                        start)
                                StartListener;
                                StartSid $1;
                        ;;
                        stop)
                                StopSid $1;
                        ;;
                        *)
                                Hello
                        ;;
                esac
        ;;
esac
exit
Личные инструменты
На других языках