RedHat Enterprise Linux 5下Oracle11g安裝
一、系統要求
1、最小內存容量:1 GB of RAM
2、虛擬內存容量(如下):
Available RAM |
Swap Space Required |
Between 1 GB and 2 GB |
1.5 times the size of RAM |
Between 2 GB and 16 GB |
Equal to the size of RAM |
More than 16 GB |
16 GB |
3、硬盤空間要求:
Installation Type |
Requirement for Software Files (GB) |
Enterprise Edition |
3.95 |
Standard Edition |
3.88 |
4、/tmp目錄需要1 GB的空閒空間
5、Oracle 11g R2數據庫支持的操作系統:
Oracle Database 11g Release 2 (11.2) for Linux x86:
Asianux 2.0
Asianux 3.0
Oracle Enterprise Linux 4.0 Update 7 or later
Oracle Enterprise Linux 5.0
Red Hat Enterprise Linux 4.0 Update 7 or later
Red Hat Enterprise Linux 5.0
SUSE Linux Enterprise Server 10.0
SUSE Linux Enterprise Server 11.0
二、安裝Oracle 11g數據庫前系統配置
1、 安裝Oracle 11g R2數據庫所需相依賴的軟件包
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-gcc-34-3.4.6-4.i386.rpm
compat-gcc-34-c++-3.4.6-4.i386.rpm
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
elfutils-libelf-devel-static-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-common-2.5
glibc-devel-2.5
glibc-headers-2.5
kernel-headers-2.6.18
ksh-20060214
libaio-0.3.106
libaio-devel-0.3.106
libgcc-4.1.2
libgomp-4.1.2
libstdc++-4.1.2
libstdc++-devel-4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.11
unixODBC-devel-2.2.11
最後檢查包是否已經安裝:
rpm -q gcc binutils compat elfutils glibc libaio libgcc libgomp libstdc++ make sysstat
(注:可能有的包還提示“沒有安裝”,但是明明安裝了,並且安裝成功就不用管它。)
2、 創建Oracle用戶
# /usr/sbin/groupadd oinstall
# /usr/sbin/groupadd dba
# /usr/sbin/groupadd oper
# /usr/sbin/useradd -g oinstall -G dba oracle
# passwd oracle
3、 配置內核相關參數,以便支持Oracle數據庫
# vi /etc/sysctl.conf
# For Oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
(注:如果沒有相應的參數則添加之;若相應參數值較我給出的值大,請不要修改!)
修改好內核參數後,執行如下命令使新的設置生效:
# /sbin/sysctl -p
4、 修改用戶限制:
# vi /etc/security/limits.conf
# For Oracle
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
5、 修改用戶驗證選項:
# vi /etc/pam.d/login
# For Oracle
session required /lib/security/pam_limits.so
session required pam_limits.so
6、 創建安裝Oracle軟件所需要的目錄:
# mkdir -p /opt/oracle
# chown -R oracle:oinstall /opt/oracle
# chmod -R 775 /opt/oracle
7、 配置Oracle用戶環境變量,以便支持Oracle數據庫安裝以及今後的操作、維護:
# su - oracle
$ vi ~/.bash_profile
# For Oracle
export ORACLE_SID=PLAYBAR
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_ADMIN=$ORACLE_BASE/admin
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jlib
export JAVA_HOME=$ORACLE_HOME/jdk
export ORA_NLS10=$ORACLE_HOME/nls/data
export PATH=$PATH:$ORACLE_HOME/bin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/lib:$JAVA_HOME/bin
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
保存後使用如下命令,使設置生效:
$ source ~/.bash_profile
三、安裝Oracle 11g數據庫
1、解壓縮文件:
$ unzip linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
由於壓縮包是由root用戶上傳上去的,所以oracle用戶無法讀取,需要對文件分配權限:# chmod 755 /文件目錄(zip所在目錄)
2、運行xhost ip 命令啓動X-Windows安裝界面,如下圖所示:
$ xhost +
# su - oracle
# cd database
# export LANG=EN
# ./runInstaller
安裝完畢後用root用戶執行兩個腳本
[root@c app]# /u01/app/oraInventory/orainstRoot.sh
更改權限/u01/app/oraInventory.
添加組的讀取和寫入權限。
刪除全局的讀取, 寫入和執行權限。
更改組名/u01/app/oraInventory 到 oinstall.
腳本的執行已完成。
[root@c app]# /u01/app/oracle/product/11.2.0/dbhome_2/root.sh
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_2
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
[root@c app]#
安裝完畢
3、開機自動啓動:
1、修改oratab
# su - root
# vi /etc/oratab
找到
orcl:/u01/app/oracle/product/10.2.0/db_1:N
改爲
orcl:/u01/app/oracle/product/10.2.0/db_1:Y
也就是將最後的N改爲Y,意思是將不允許自動啓動改爲允許自動啓動。
然後,是修改ORACLE自帶的啓動與關閉腳本,分別是dbstart和dbshut。執行這兩個腳本就可以實現ORACLE腳本的啓動與關閉。
2、修改dbstart
# su - oracle
$ cd $ORACLE_HOME/bin
$ vi dbstart
找到 ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
顯然這個ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle是不存在的,修改成ORACLE_HOME_LISTNER=$ORACLE_HOME
3、編寫啓動shell
# su - root
# vi /etc/rc.d/init.d/orastart
將下面的內容拷貝到/etc/rc.d/init.d/orastart
# chkconfig: 2345 90 10
export ORACLE_BASE=/home/oracle_11/app/
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
ORCL_OWN="oracle"
# 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 -- start, stop, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
su - $ORCL_OWN -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/subsys/oradb
su - $ORCL_OWN -c "$ORACLE_HOME/bin/emctl start dbconsole"
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
su - $ORCL_OWN -c "$ORACLE_HOME/bin/emctl stop dbconsole"
su - $ORCL_OWN -c "$ORACLE_HOME/bin/dbshut"
rm -f /var/lock/subsys/oradb
echo "OK"
;;
reload|restart)
$0 stop
$1 start
;;
*)
echo "Usage: 'basename $0' start|stop|restart|reload"
exit 1
esac
exit 0
4、授權、啓動
# su - root
# chmod 700 /etc/rc.d/init.d/orastart
# cd /etc/rc.d/init.d/
# chkconfig --add orastart
# chkconfig --list orastart
5、其他
# chkconfig: 2345 99 01
其中chkconfig:2345 99 01 是指腳本將爲運行級2、3、4、5啓動oracle 10g服務,啓動優先級爲99,關閉優先級爲01。
參考:http://blog.csdn.net/westmaniac/article/details/6539487
http://www.liusuping.com/ubuntu-linux/redhat-linux-oracle-11g-r2.html
四、升級Oracle 11.2.0.1到11.2.0.3
1、關閉數據庫
SQL> conn sys as sysdba
Enter password: sys
Connected.
SQL> shutdown immediate
2、停止所有服務
a、關閉所有可能訪問數據庫的工具。例如Oracle Enterprise Manager/Database Control or SQL*Plus。
b、emctl stop dbconsole
c、isqlplusctl stop
d、lsnrctl stop
e、sqlplus /nolog
f、SQL> conn sys as sysdba
Enter password: sys
Connected.
SQL> shutdown
g、使用控制面板關閉服務。
3、備份系統
備份內容包括:Oracle Inventory, Oracle 11g Home 和 Oracle 11g Database
tar -cvf /home/oracle/orabak/DBsoft.tar $ORACLE_BASE --確保Oracle相關的所有配置都位於$ORACLE_BASE目錄,如監聽等
cp *.dbf con*.ctl redo*.log /orabak/ --對數據庫實施冷備
4、升級Oracle database軟件
升級DB,只需要其中的第一個和第二個文件。將2個文件解壓縮,然後將第二個文件的內容copy到第一個文件的對應目錄裏。即將2個文件合成一個文件。
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip
$ cd database/
$ ./ runInstaller
注意這裏,我們選擇第三個選項,skip software update,因爲我們的patchset已經下載過了,如果選擇第二個選項,會遇到如下錯誤,
INS-20704 Thelocation provided is not in the expected directory structure
Oracle 給的解決方式是用如下命令來執行:
./runInstaller –downloadUpdates
但是這個命令需要收費的Metalink帳號。 MOS 的相關文檔:
How To Download The Latest Updates AndPatches Using 11.2.0.2 OUI [ID 1295074.1]
Error: INS-20704 While Installing 11.2.0.2with "Use pre-downloaded software updates" Option [ID 1265270.1]
這裏要注意,我們之前講過11gR2的Patchset 可以直接用來安裝。在這個界面就可以選擇操作類型,這個功能比較方便,從而也導致patchset 越來越大,我們這裏選擇upgrade an existing database。
注意這裏的安裝位置,我之前的安裝目錄是11.2.0. 這裏我改成了11.2.0.3. 即將oracle 安裝到其他位置,這樣可以減少宕機時間,也是oracle 推薦的方法。
注意這裏的Inventory directory,這裏用來存放安裝文件的,我們之前安裝過DB,所以這個目錄已經存在,2種解決方法,刪除之前的目錄,二放到其他目錄,我這裏將安裝文件存放到其他目錄。
[root@dave oraInventory]#/u01/app/oraInventory2/orainstRoot.sh
Changing permissions of/u01/app/oraInventory2.
Adding read,write permissions for group.
Removing read,write,execute permissions forworld.
Changing groupname of/u01/app/oraInventory2 to oinstall.
The execution of the script is complete.
[root@dave oraInventory]#/u01/app/oracle/product/11.2.0.3/db_1/root.sh
Performing root user operation for Oracle11g
The following environment variables are setas:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0.3/db_1
Enter the full pathname of the local bindirectory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Entries will be added to the /etc/oratabfile as needed by
Database Configuration Assistant when adatabase is created
Finished running generic part of rootscript.
Now product-specific root actions will beperformed.
Finished product-specific root actions.
這裏會提示我們配置監聽,因爲監聽之前已經存在,所以這裏取消監聽配置。
我們點擊下一步時,會提示一些配置失敗,是否繼續,我們點是。結束Oracle database 軟件的安裝。
從上面來看,如果沒有錯誤,在監聽配置完畢會,會自動調用DBUA 來升級我們的實例。這裏我們配置失敗,正好驗證下手工升級實例。
3.3 配置新的ORACLE_HOME
這部分工作,主要是準備新的ORACLE_HOME,因爲我們的Oracle database 安裝到了新的位置,所以我們需要配置一下相關的信息。
這部分即使在上面自動調用了DBUA,我們也還是需要進行操作的。
4. 修改Oracle的.bash_profile 文件
我們重新指定了ORACLE_HOME,需要更新到.bash_profile 裏。
5. 修改/etc/oratab,該目錄下也有ORACLE_HOME
[oracle@dave db_1]$ cat /etc/oratab
anqing:/u01/app/oracle/product/11.2.0.3/db_1:N
具體操作步驟:
[oracle@dave dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@dave dbs]$ cp * /opt/oracle/product/11.2.0.3/db_2/dbs/
[oracle@dave admin]$ pwd
/u01/app/oracle/product/11.2.0/db_1/network/admin
[oracle@dave admin]$ ls
listener11092710PM3007.bak samples sqlnet11092710PM3007.bak tnsnames11092710PM3007.bak
listener.ora shrept.lst sqlnet.ora tnsnames.ora
[oracle@dave admin]$ cp -R * /opt/oracle/product/11.2.0.3/db_2/network/admin
[oracle@dave admin]$ cat /home/oracle/.bash_profile|grep ORACLE_HOME
ORACLE_HOME=$ORACLE_BASE/product/11.2.0.3/db_1; export ORACLE_HOME
TNS_ADMIN=$ORACLE_HOME/network/admin;exportTNS_ADMIN
PATH=$ORACLE_HOME/bin:$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
手工使用命令升級實例
SQL>conn / as sysdba
SQL> STARTUP UPGRADE
SQL> SPOOL /home/oracle/temp/upgrade_info2.log
SQL>@?/rdbms/admin/utlu112i.sql
SQL> @?/rdbms/admin/catupgrd.sql
SQL> SPOOL OFF
還有一點要注意,就是執行這個腳本會產生大量的歸檔文件,平均3分鐘產生40M的歸檔。
該腳本運行了80分鐘。而在Oracle10g下,運行該腳本在40分鐘左右。時間增加了一倍。增加了升級系統的宕機時間。
SQL> startup
SQL>@?/rdbms/admin/utlrp.sql
Verify that all expectedpackages and classes are valid:
SQL> SELECT count(*) FROM dba_invalid_objects;
SQL> SELECT distinct object_name FROM dba_invalid_objects;
最後調用一下dbca 重建一下OEM。
如果dbca 顯示OEM 已經配置過,rm 掉如下2個目錄,再次運行就ok了。
ORACLE_HOME/hostname_dbname
ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_hostname_dbname
至此,通過命令升級操作結束。
最後驗證一下各個組件的版本和狀態:
SQL> SELECT COMP_NAME, VERSION, STATUS FROM SYS.DBA_REGISTRY;
增加shared pool和java pool大小
[oracle@10gpri Disk1]$ sqlplus / as sysdba
SQL>startup
SQL>alter system set shared_pool_size='250M' scope=spfile;
SQL>alter system set java_pool_size='150M' scope=spfile;
SQL>shutdown immediate