伺服器作業系統為Debian Squeeze AMD64,沒有安裝X,通過ssh遠端訪問。客戶端為debian testing,安裝有gnome桌面環境。
先安裝10.2.0.1,然後安裝升級包10.2.0.4,比安裝10g r2客戶端多了一些操作,具體安裝過程如下:
一、安裝10.2.0.1
1、下載oracle 10g r2
下載回來的檔案為10201_database_linux_x86_64.cpio.gz
$gunzip 10201_database_linux_x86_64.cpio.gz
$cpio -idmv < 10201_database_linux_x86_64.cpio
解壓縮後所有的安裝檔案位於database目錄下。
2、檢查硬體是否達到要求
物理RAM必須大於512M,現在的機器記憶體都沒問題。超過8GB RAM時,swap應該在物理RAM的0.75倍以上。Enterprise Edition安裝型別大約使用2G硬碟空間。
通過以下命令檢查,如果不滿足需要做相應的調整
$grep MemTotal /proc/meminfo //檢查實體記憶體大小
$grep SwapTotal /proc/meminfo //檢查swap大小
$df -h //檢查可用硬體空間大小
3、安裝需要的軟體包,建立需要的符號連結
安裝依賴包
$sudo apt-get install build-essential ia32-libs ia32-libs-dev libc6 libc6-i386 libc6-dev libc6-dev-i386 rpm libstdc++5 libaio1
如果不安裝ia32-libs,安裝時會提示
/…/client/runInstaller: 63: /…/client/install/.oui: not found
建立符號連結
#ln -sf /usr/bin/awk /bin/awk
#ln -sf /usr/bin/rpm /bin/rpm
#ln -sf /usr/bin/basename /bin/basename
4、建立oracle需要的組和使用者
oracle安裝使用的組
#groupadd oinstall
系統管理使用的組
#groupadd dba
建立使用者oracle
#useradd -g oinstall -G dba oracle
為使用者oracle設定密碼
#passwd oracle
建立nobody使用者和nobody組
#groupadd nobody
debian預設已經建立了nobody使用者,其屬於nogroup組,但$ORACLE_HOME/root.sh為$ORACLE_HOME/bin/extjob設定的組為nobody,所以這裡也要建立nobody組,否則root.sh會抱怨
/bin/chgrp: invalid group: `nobody’
5、配置核心引數和oracle使用者資源限制值
核心引數
oracle 10g要求的核心引數值如下
semmsl 250
semmns 32000
semopm 100
semmni 128
shmmni 4096
file-max 65536
ip_local_port_range 最小:1024 最大:65000
rmem_default 262144
rmem_max 262144
wmem_default 262144
wmem_max 262144
shmall是全部允許使用的共享記憶體大小,shmmax是單個段允許使用的大小。可以直接將這兩個引數設定為實體記憶體的大小或者是SGA值的大小。
shmall是按頁計數的所有共享記憶體的數量,計算方法如下:
獲取頁面大小
$getconf PAGE_SIZE
4096
也就是說頁面大小為4K,如果實體記憶體或SGA總數為16G,則shmall的值為16*1024*1024/4=4194304
如果oracle出現以下錯誤提示
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
則需要適當增加核心引數shmall的值
如果系統預設的核心引數值高於oracle 10g需要的值,則保持預設引數不變,否則用oracle 10g要求的值來修改核心引數。修改引數時在/etc/sysctl.d目錄下新建oracle.conf,將新的引數值寫入此檔案
kernel.sem = 250 32000 100 128
kernel.shmmax = 8589934592
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
kernel.sem引數值按semmsl semmns semopm semmni這個順序指定,中間以空格隔開
為oracle使用者所在組賦予分配大記憶體頁的許可權
#id oracle
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)
#echo “1002″ >/proc/sys/vm/hugetlb_shm_group
這樣oracle才有許可權分配大記憶體頁,否則建庫時會有錯誤提示:
ORA-27125:unable to create shared memory segment
不過這樣設定重啟後引數就丟失了,可以在/etc/sysctl.conf或/etc/sysctl.d/oracle.conf檔案裡面新增該引數
vm.hugetlb_shm_group=1002
之後執行命令
#sysctl -p
或
#sysctl -p /etc/sysctl.d/oracle.conf
可使該引數在核心記憶體中立即生效
oracle使用者資源限制值
在/etc/security/limits.d目錄下新建檔案oracle.conf,檔名隨意,但副檔名一定要是conf,輸入一下內容
#
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
在/etc/profile.d目錄下新建檔案oracle.sh,檔名隨意,但副檔名一定要是sh,輸入以下內容
#for oracle 10g r2
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
6、建立oracle基準目錄
oracle安裝目錄的設定最好遵循oracle OFA(Optimal Flexible Architecture)規範的建議。
用以下命令來設定ORACLE BASE目錄/u01/app/oracle
#mkdir -p /u01/app/oracle
#chown -R oracle:oinstall /u01
#chmod -R 775 /u01/app/oracle
7、設定oracle使用者的環境
設定oracle的使用者的主目錄home為/u01/app/oracle
#usermod -d /u01/app/oracle oracle
修改oracle使用者的shell為/bin/bash
#usermod -s /bin/bash oracle
從其他使用者主目錄下拷貝.profile,.bashrc,.bash_logout檔案到oracle使用者的主目錄,在.bashrc檔案增加下面的行
umask 022
然後
$source .bashrc
最後設定oracle使用者遠端ssh登入時啟用X11 Forward
也可以不使用X遠端靜默安裝oracle
8、安裝oracle 10g x86_64資料庫
登入到遠端系統
$ssh -XY oracle@remotehost
執行oracle安裝程式
$/path/to/client/runInstaller -ignoreSysPrereqs
因為oracle 10g認證的linux系統只有redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 和 asianux-2這幾個,所以在其他linux發行版上安裝時需要指定命令列引數-ignoreSysPrereqs,否則會提示:
Checking operating system version: must be redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 or asianux-2
Failed <<<<
然後退出安裝
之後在本地機器可以看到OUI(Oracle Universal Installer)介面,後面的安裝根據提示來就可以了。安裝目錄修改為/u01/app/oracle/product/10.2.0/db_1
安裝進度大約到65%時會有錯誤提示:
Error in invoking target 'collector' of makefile '/u01/app/oracle/product/10.2.0/db_1/sysman/lib/ins_emdb.mk'.
這是oracle安裝程式的一個bug,可以忽略此錯誤繼續安裝,對系統沒什麼影響。同時oraInventory/logs/目錄下的安裝日誌檔案裡面會有如下類似錯誤提示:
INFO: /usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib/snmccolm.o' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib/libnmccol.a(nmccole.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib/libnmcbuf.a(nmcbuft.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/ap
INFO: p/oracle/product/10.2.0/db_1/sysman/lib/libnmcbuf.a(nmcbufw.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib/libnmcbuf.a(nmcbufu.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib/libnmcbuf.a(snmcbufm.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib/
INFO: libnmcbuf.a(nmcbuff.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib//libnmadbg.a(nmadbg.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `/u01/app/oracle/product/10.2.0/db_1/sysman/lib//libnmadbg.a(snmadbg.o)' is incompatible with i386:x86-64 output
collect2: ld returned 1 exit status
INFO: make[1]: Leaving directory `/u01/app/oracle/product/10.2.0/db_1/sysman/lib'
INFO: make[1]: *** [/u01/app/oracle/product/10.2.0/db_1/sysman/lib/nmccollector] Error 1
make: *** [nmccollector] Error 2
這是因為oracle 10.2.0.1安裝包為這幾個i386目標檔案提供了錯誤版本的x86_64連結庫,之後安裝patchser 10.2.0.4時relink nmccollector會成功。
關於此錯誤更詳細的資訊請參考Metalink NOTE 957982.1和Bug 8993720。
9、安裝後配置
安裝完成後,在oracle使用者的.bashrc檔案中新增以下ORACLE環境變數
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/client_1
export PATH=$ORACLE_HOME/bin:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
#export SQLPATH=$ORACLE_HOME/scripts
二、升級到patchset 10.2.0.4
1、升級軟體
首先停止所有oracle服務,實際上如果安裝完成10.2.0.1後立即進行升級的話,oracle的所有服務並沒有執行,也就不必去停止它們
#/etc/init.d/oracle stop
oracle資料庫的啟動和關閉控制見Debian配置Oracle 10g自啟動
然後執行升級包升級軟體
$/path/to/patchset_directory/Disk1/runInstaller -ignoreSysPrereqs
按提示升級即可
2、升級資料庫
如果此前並沒有建立資料庫,那麼升級到10.2.0.4到此就結束了,然後可以去建立新的資料庫。
如果此前已經建立了資料庫,那麼按以下步驟升級資料庫到10.2.0.4版本
啟動監聽器
$lsnrctl start
以sysdba身份登陸資料庫並執行升級指令碼
$sqlplus / as sysdba;
SQL> STARTUP UPGRADE
SQL> SPOOL patch.log
SQL> @?/rdbms/admin/catupgrd.sql
SQL> SPOOL OFF
關閉並重啟資料庫
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
編譯無效PL/SQL包
SQL> @?/rdbms/admin/utlrp.sql
檢查升級是否成功
SQL> SELECT COMP_NAME, VERSION, STATUS FROM SYS.DBA_REGISTRY;
如果所有元件的status都是valid表示升級成功
檢查是否有升級錯誤
SQL>select * from utl_recomp_errors;
如果使用Oracle Recovery Manager catalog, 需要對catalog進行升級,如下:
$rman catalog username/password@alias
RMAN> UPGRADE CATALOG;
修改系統相容性引數
SQL> alter system set compatible=’10.2.0.4.0′ scope=spfile;
SQL> SHUTDOWN
SQL> STARTUP
安裝完成
UPDATE:
在Debian 當前的tesing分支Wheezy上安裝oracle 10g時,需要增加以下兩個符號連結:
#ln -sf /usr/lib/x86_64-linux-gnu/ /usr/lib64
#ln -sf /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64/libgcc_s.so.1
這是因為Wheezy開始支援multiarch,庫路徑做了比較大的調整。