天天看點

RHEL 6.2 x86_64 下安裝Oracle 11g步驟

RHEL6.2  x86_64 下oracle 11g的安裝 by 宮長玉

 在安裝過程中如遇到問題可以一起讨論,共同學習,如有錯誤,還請告知,謝謝

1.首先 修改 /etc/sysctl.conf檔案 添加參數

[[email protected] ~]# cat >>/etc/sysctl.conf << EOF

> #oracle need parameters

> fs.aio-max-nr=1048576

> fs.file-max=6815744

> kernel.shmall=2097152

> kernel.shmmax=1024000000(根據系統記憶體多少來調整)

> kernel.shmmni=4096

> kernel.sem=250 32000 100 65500

> net.ipv4.ip_local_port_range=9000 65500

> net.core.rmen_default=262144

> net.core.rmem_max=4194304

> net.core.wmem_default=262144

> net.core.wmem_max=1048586

> EOF

執行  /sbin/sysctl -p使參數生效

2. 修改 /etc/security/limits.conf

[[email protected] ~]# cat >>/etc/sysctl.conf << EOF

[[email protected] ~]# cat >> /etc/security/limits.conf << EOF

> # oracle need parameters

> orcle  soft  nproc    2047

> oracle  hard  nproc   16384

> oracle  soft  nofile  1024

> oracle  hard  nofile  65536

> EOF

3. 修改 /etc/pam.d/limits.conf

[[email protected] ~]# cat >> /etc/pam.d/login << EOF

> session  required  pam_limits.so

> EOF

4.修改 /etc/profile

if [ $USER = "oracle" ]; then

  if [ $SHELL = "/bin/ksh" ]; then

    ulimit -p 16384

    ulimit -n 65536

  else

    ulimit -u 16384 -n 65536

  fi

fi

4. 修改 /etc/csh.login

 vi /etc/csh.login

#oracle need setting

if ( $USER == "oralce" ) then

   limit maxproc        16384

   limit descriptors    65536

   umask 022

endif

5.建立使用者組及使用者

[[email protected] ~]# /usr/sbin/groupadd oinstall

[[email protected] ~]# /usr/sbin/groupadd dba

[[email protected] ~]# /usr/sbin/useradd -m -g oinstall -G dba oracle

[[email protected] ~]# echo "oracle"|passwd --stdin oracle

更改使用者 oracle 的密碼 。

passwd: 所有的身份驗證令牌已經成功更新。

6.建立安裝目錄并授權

[[email protected] ~]# mkdir -p /opt/oracle/ora11g

[[email protected] ~]# chown -R oralce:oinstall /opt/oracle/ora11g

[[email protected] ~]# chown -R oracle:oinstall /opt/oracle/ora11g

[[email protected] ~]# chmod -R 775 /opt/oracle/ora11g

[[email protected] ~]# mkdir -p /opt/oracle/oraInventory

[[email protected] ~]# chown -R oracle:oinstall /opt/oracle/oraInventory

[[email protected] ~]# chmod -R 775 /opt/oracle/oraInventory

7設定oracle 使用者環境變量 (注意shell指令 '[',' ]‘和’=‘兩邊都有一個空格)

vi /home/oracle/.bash_profile

TMP=/tmp; export TMP

TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/opt/oracle/ora11g; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/11.2.2/dbhome; export ORACLE_HOME

ORACLE_SID=redzdb; export ORACLE_SID

ORACLE_TERM=xterm; export ORACLE_TERM

PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH;export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;

export CLASSPATH

if [ $USER = "oracle" ]; then

  if [ $SHELL = "/bin/ksh" ]; then

    ulimit -p 16384

    ulimit -n 65536

  else

    ulimit -u 16384 -n 65536

  fi

fi

umask 022

使檔案生效

source /home/oracle/.bash_profile

8設定系統防火牆

 [[email protected] ~]# vi /etc/sysconfig/iptables (隻有在防火牆啟用的情況下,才存在iptables檔案)

 加入

-A INPUT -m state --state NEW -m tcp -p tcp --drop 1158 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --drop 1521 -j ACCEPT

[[email protected] ~]# /etc/init.d/iptables restart(重新開機防火牆,啟用新規則)

9.在安裝前要設定在/etc/hosts檔案中添加本地ip

192.168.1.8  redz-server   localhost

10 .用oracle使用者登入。解壓資料庫安裝檔案後,開始安裝(如果環境變量前面設定成功,這裡便不用在手動設定,如果安裝中文是亂碼

在 終端先執行 export LANG=en_US)

[[email protected] ~]$  export LANG=en_US

[[email protected] ~]$  cd orainstall

[[email protected] ~ orainstall]# ./runInstaller

等候圖形界面安裝

ps :

 如果用root使用者登入後,在終端中su oracle 後,安裝,可能存在display錯誤

有許多解決辦法,但是不一定成功,是以還是建議直接用oracle使用者登入系統

display檢測不通過的解決

方法1:  [[email protected] ~]# xhost    local:oracle;

方法2:  [[email protected] ~]# xhost   +;

方法2:  [[email protected] ~]# xhost   +192.168.1.8;

             [ [email protected] ~]# su oracle

             [[email protected] ~]$ export DISPLAY=192.168.1.8:0.0

以上方法可能都不成功

11.安裝完成後, 配置監聽器監聽資料庫執行個體名稱(oracle監聽的動态注冊與靜态注冊不是很清楚,高版本資料庫,可能不需要手動配置監聽便能通路了,是以,此步驟可以暫時省略)

./netmgr

4.設定oralce 随機啟動

[[email protected] ~]# vi /etc/oratab

 redzdb:/opt/oracle/ora11g/product/11.2.2/dbhome:N

改為

 redzdb:/opt/oracle/ora11g/product/11.2.2/dbhome:Y

12.以系統使用者oracle編輯 $ORACLE_HOME/bin/dbstart

#注釋掉 ORACLE_HOME_LISTNER=$1

添加 ORACLE_HOME_LISTNER=$ORACLE_HOME

ps:因為在這個腳本自動生成的時候,也就是ORACLE被安裝進RHEL的時候,這個腳本并不知道你的

◆ORACLE_HOME_LISTNER是什麼,現在要将這個參數顯示的寫明,這樣就不會在執行這個腳本的時候報

◆ORACLE_HOME_LISTNER沒有被指定的錯誤了。注意:dbstart和dbshut腳本在10g之後就已經将監聽器的啟動與關閉合并進數

據庫執行個體的啟動與關閉腳本裡面了。而不再是單獨分開的了

13 以系統使用者oracle編輯 $ORACLE_HOME/bin/dbshut

#注釋掉 ORACLE_HOME_LISTNER=$1

添加 ORACLE_HOME_LISTNER=$ORACLE_HOME

14 編寫随機啟動腳本,注冊為系統服務

su root

vi /etc/init.d/redzora

#!/bin/bash

#chkconfig:2345 99 10

#description:StartupScriptfororacleDatabases

#/etc/rc.d/init.d/oradbstart

export ORACLE_BASE=/opt/oracle/ora11g

export ORACLE_HOME=/opt/oracle/ora11g/product/11.2.2/dbhome

export ORACLE_SID=redzdb

export PATH=$PATH:$ORACLE_HOME/bin

case "$1" in

start)

echo "-----startuporacle-----" >> /var/log/oracleauto.log

su oracle -c $ORACLE_HOME/bin/dbstart

su oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"

touch /var/lock/subsys/redzora

echo "-----startuporaclesuccessful-----" >> /var/log/oracleauto.log

echo "OK"

;;

stop)

echo "-----shutdwnoracle-----" >> /var/log/oracleauto.log

su oracle -c "$ORACLE_HOME/bin/emctl stop dbconsole"

su oracle -c $ORACLE_HOME/bin/dbshut

rm -f /var/lock/subsys/redzora

echo "-----shutdownoraclesuccessful-----" >> /var/log/oracleauto.log

echo "OK"

;;

*)

echo "Usage:'basename$0'start|stop"

exit1

esac

按 ALT+z

輸入:wq

儲存退出

執行 chmod -Rf 777  /var/lock/subs/

       chmod -Rf 777  /var/log

使使用者能夠讀寫啟動檔案及日志

ps:

(參考文章引用,對作者表示感謝)

現在,我要對這段腳本做一個關鍵解釋:

第一:#chkconfig:23459910雖是一行注釋,但是确實關鍵的必不可少的一行,除非你不用chkconfig指令來自動生成符号連接配接檔案,而是完全采用手工建立。否則沒有這一行,執行chkconfig系統将會報出oracle11沒有chkconfig服務權限的錯誤。

第二:suoracle-c$ORACLE_HOME/bin/dbstart和touch/var/lock/subsys/oracle11這兩行的作用是首先執行dbstart腳本啟動oracle,然後在服務活動清單目錄中建立一個與oracle11這個服

務同名的一個檔案,表示這個服務是活動的,也就是被啟動的。

而suoracle-c$ORACLE_HOME/bin/dbshut和rm-f/var/lock/subsys/oracle11這兩行的作用是首先執行dbshut急哦腳本關閉oracle,然後從服務活動清單目錄中删除那個與oracle11同名的那

個檔案,表示這個服務不是活動的,也就是已經被關閉。

那麼為什麼要做touch/var/lock/subsys/oracle11和rm-f/var/lock/subsys/oracle11這兩步呢?原因是跟LINUX系統的機制有關的:LINUX的判别一個服務是否被啟動的依據是在/var/lock/subsys/目錄下是否與服同名的檔案,若有則表示這個服務已經被啟動了,在系統關閉的時候,LINUX會把這裡面列出的服務全部關閉,并删掉與服務同名的檔案。若一個服務被啟動了,但卻在這個目錄裡沒有那個服務的同名檔案,則不會關閉那個服務。網上的文章均将這個地方設定錯了,是以會發現,ORACLE可以随系統啟動了,但卻沒有随系統關閉。我也是分析了/etc/rc.d/rc.local後才發現這個原理的。經過試驗,果然如此。再分析mysql的啟動與關閉腳本也是這樣做的,最終恍然大悟

原來如此。這個地方請大家注意了。

15将編寫的啟動腳本注冊為系統服務

   1)給腳本賦予可以被執行的權限

   su root

  chown oracle /etc/init.d/redzora

  chmod 775 /etc/init.d/redzora

 2)建立符号連結檔案

 chkconfig --add /etc/init.d/redzora

(參考文章引用,對作者表示感謝)

執行這個指令就需要你在腳本中寫上#chkconfig:2345 99 10了。這樣當這個指令被執行的時候,回去oracle11檔案中尋找這行注釋,并解析這行注釋,根據解析結果分别在/etc/rc.d/rc2.d;/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc /rc.d/rc5.d中建立符号連接配接檔案S99oracle11檔案,這個檔案是系統啟動時要執行的,其實這個檔案是指向/etc/init.d /oracle11的,啟動的時候系統向這個檔案發送一個start參數,也就執行了oracle11檔案中的start分支了。還會在/etc /rc.d/rc0.d;/etc/rc.d/rc1.d;/etc/rc.d/rc6.d中建立K10oracle11檔案,這個檔案時系統關閉時要執行的,其實這個檔案也是指向/etc/init.d/oracle11的,關閉的時候系統向這個檔案發送一個stop參數,也就執行了oracle11檔案中的stop分支了。

我想你應該明白#chkconfig:2345 99 10中這些數字的含義了吧:指出2,3,4,5級别啟動這個服務,99是在相應的/etc /rc.d/rcN.d(N為前面指定的級别,這裡是2345)目錄下生成的連結檔案的序号(啟動優先級别)S99oracle11,10為在除前面指出的級别對應的/etc/rc.d/rcN.d(N為除2345之外的級别)目錄生成的連結檔案的序号(服務停止的優先級别)K10oracle11。至于為什麼在這些目錄中建立檔案和檔案的命名規則,這就要您對LINUX的系統啟動流程有一個熟悉的了解了,在這就不詳談了

在root使用者下測試執行 /etc/init.d/redzora start

/etc/init.d/redzora stop

自動啟動成功