在Linux下安裝配置Oracle11g R2
最近在安裝Linux下的Oracle環境,折騰了很久,遇到了不少問題,最後終於搞定了,於是寫下此文,記錄安裝過程,以備後用。
1.Linux環境配置準備
環境:Linux:Redhat Enterprise 5.4,DB:Oracle 11g R2 X64,Oracle安裝到/home/oralce_11目錄下。
配置過程如下:(大部分是網上的內容,個人也是按照網上步驟來的)
1) 檢查基本需求(對於牛逼的伺服器來說,這個肯定是滿足要求的,可以跳過)
內存大小
grep MemTotal /proc/meminfo
交換分區大小
grep SwapTotal /proc/meminfo
增加交換分區
創建/home/swap這麼一個分區文件。文件的大小是5120000個block,一般情況下1個block為1K,所以這裡空間是5G。
dd if=/dev/zero of=/home/swap bs=1024 count=5120000
接著再把這個分區變成swap分區。
mkswap /home/swap
然後把它加到fstab裡面
echo "/home/swap swap swap defaults 0 0" >> /etc/fstab
2) 檢查軟體需求,沒有的yum install安裝
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel gcc- gcc-c++ libaio-devel libaio libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel pdksh
(這裡如果出現沒有安裝的,那麼就要把Linux光碟放入,進入Server文件夾,找到對應的RPM包,運行RPM命令來進行安裝,如果喜歡圖形界面的話,在圖像界面也可以通過雙擊對應的RPM包來安裝。需要注意的是在安裝libaio-devel unixODBC unixODBC-devel 這3個軟體包的時候,除了安裝X64的包以為,還要安裝i386的包,不能因為是X64的系統,就不裝i386的包了。 )
3) 配置內核。
編輯 /etc/sysctl.conf。
將以下內容添加至文件
# Kernel paramaters required by Oracle 11gR1
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.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
4) 要使 /etc/sysctl.conf 更改立即生效,執行以下命令。
sysctl –p
5) 編輯 /etc/security/limits.conf。
添加以下行:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
6) 編輯 /etc/pam.d/login。
添加以下行:
session required /lib/security/pam_limits.so
session required pam_limits.so
【注意:如果是X64的系統,那麼這裡就要用 /lib64/security/pam_limits.so,不然系統可能會在伺服器上無法登錄!】
7) 編輯 /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
8) 創建操作系統用戶,作為軟體安裝和支持組的擁有者。
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
9) 創建軟體安裝目錄。
mkdir –p /home/oracle_11/app/
chown -R oracle.oinstall /home/oracle_11/
chmod -R 755 /home/oracle_11/
10) 編輯 /home/oracle/.bash_profile。
添加以下行:
umask 022
ORACLE_BASE=/home/oracle_11/app
ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/db_1
ORACLE_SID=MYTEST --實例名,根據需要進行修改
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
LANG=C --設定此參數避免安裝過程出現亂碼
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH LANG
11) 在圖形界面下(在本機操作或者通過VNC遠程操作) 以root身份打開另一個終端窗口
--這步至關重要,不執行這步在以oracle用戶運行 # ./runInstaller時會啟動不了圖型安裝界面
#xhost +
#xhost + localhost
12) 將下載的Oracle安裝文件解壓到Linux中,然後安裝資料庫
#su - oracle
cd database/
./runInstaller
13)接下來會出現圖形化的安裝嚮導,按照嚮導一步一步的操作,和Windows下安裝Oracle的嚮導一樣,沒有太大區別,直到最後安裝完成。
2.確認安裝成功
Linux下的Oracle在安裝結束后是處於運行狀態的。運行top –u oracle可以看到以Oracle用戶運行的進程。在圖形化界面下,運行$ORACLE_HOME/sqldeveloper/sqldeveloper.sh可以出現Oracle自帶的免費Oracle管理客戶端SQL Developer。試著連接剛安裝的Oracle,連接成功。
這時需要重啟伺服器,看伺服器重啟后,Oracle是否可以正常啟動。以Root用戶運行reboot命令可以重啟Linux,重啟完成後,默認情況下Oracle並不像Windows中的Oracle那樣註冊成服務,隨機器一起啟動的,所以需要手動敲入命令來啟動。啟動方式:以oracle用戶登錄運行以下語句:
1,進入sqlplus:
sqlplus /nolog
2,以sysdba的身份連接到資料庫,並啟動Oracle資料庫引擎:
SQL> conn /as sysdba
SQL> startup
3,退出sqlplus,運行Listener
SQL> exit
$ lsnrctl start
這樣資料庫的TNS也啟動了,可以通過網路連接資料庫了。一般情況下就啟動這兩個就夠了,如果想用Oracle提供的EM來管理Oracle的話還需要啟動EM控制台,運行如下命令:
$ emctl start dbconsole
這樣就可以通過https://servername:1158/em/console來訪問EM控制台了。
這裡我在實際操作中運行sqlplus出現了錯誤,大致如下:
sqlplus / as sysdba
sqlplus: error while loading shared libraries: /u01/app/oracle/product/11.1.0/db_1/lib/libnnz11.so: cannot restore segment prot after reloc: Permission denied
網上也有很多人遇到了這個問題,原來是SELinux在作怪,我採用的解決辦法是禁止掉SELinux:
更改/etc/sysconfig/selinux 文件的內容為 SELINUX=disabled,然後重啟伺服器。
好像這個辦法不是很好,也有說的解決辦法是使用chcon 命令
示例: chcon -t texrel_shlib_t /usr/local/rsi/idl_6.1/bin/bin.linux.x86/*.so
另外我在啟動Listener時也報錯TNS-12555: TNS:permission denied
後來網上搜了下,發現是oracle用戶就無法進入/var/tmp/.oracle文件夾,方法很簡單,執行:chmod 777 /var/tmp/.oracle 之後就ok了.
還有,我在啟動EM控制台的時候又遇到了錯誤:Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.
設置了這個變數后(運行export ORACLE_UNQNAME=xxxx實例名)后,再啟動EM控制台,又出現了新的錯誤:OC4J Configuration issue. /u01/app/oracle/product/11.2.0/db_1/oc4j/j2ee/OC4J_DBConsole_xxxx not found.沒有這個文件?去查了一下,確實是沒有這樣一個文件存在,怎麼辦呢?其實很簡單,運行:
emca -config dbcontrol db
根據嚮導重新配置一下就可以了。
3.配置Oracle為開機自啟動
雖然說Oracle作為伺服器不會經常關機,但是偶爾重啟一下,每次都要去手動啟動Oracle還是太麻煩了,希望的是能夠像在Windows中一樣,每次開機的時候自動啟動Oracle,只需要將Oracle配置為Linux的服務就可以了。操作如下:
1,以root用戶建立/etc/rc.d/init.d/oracle11g腳本文件,內容如下(環境變數設置根據實際情況進行修改):
#!/bin/bash
#
# chkconfig: 35 95 1
# description: init script to start/stop oracle database 11g, TNS listener, EM
#
#
#
# match these values to your environment:
ORACLE_BASE=/home/oracle_11/app
ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/db_1
ORACLE_SID=BRDWDEV
ORACLE_UNQNAME=BRDWDEV
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
LANG=C
export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_UNQNAME PATH LD_LIBRARY_PATH LANG
# see how we are called:
case $1 in
start)
su - oracle<<EOO
lsnrctl start
sqlplus /nolog<<EOS
connect / as sysdba
startup
EOS
emctl start dbconsole
EOO
;;
stop)
su - oracle<<EOO
lsnrctl stop
sqlplus /nolog<<EOS
connect / as sysdba
shutdown immediate
EOS
emctl stop dbconsole
EOO
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
2,以root用戶執行以下命令
chmod 755 /etc/rc.d/init.d/oracle11g
chkconfig --add oracle11g
3, 重啟服務
service oracle11g stop
service oracle11g start
這樣在開關機的時候oracle自動啟動和停止。
另外,還有說,需要修改/etc/oratab這個文件,將最後的N改為Y,如下:
xxxxTEST:/home/oracle_11/app/oracle/product/11.2.0/db_1:Y
最後,我們要測試一下這個自啟動是否真的有效,重啟一下伺服器吧,過幾分鐘后,可以看到客戶端可以正常連接到Oracle了。Oracle環境配置成功!
《解決方案》
:em02:謝謝。。。