如何在 Ubuntu Linux 上安裝 Oracle 11g:完整指南
Oracle Database 是由 Oracle 公司開發的一款可靠的多平台資料庫管理軟體。它具備多項優勢,包括高效能、廣泛的功能性、叢集支援以及 PL/SQL 支援等。Oracle Database(本文中將簡稱為 Oracle)可安裝於 Solaris、Windows 及 Linux 系統上。在 Windows 上安裝是最簡單的選項,而要在 Solaris 和 Linux 上安裝 Oracle 則需要進行手動的安裝前設定。 關於 Linux 發行版,Oracle 建議在 Red Hat、Oracle Linux 以及 SUSE Linux Enterprise Server 上安裝 Oracle 資料庫。
不過,您也可以在 Ubuntu Linux 和 OpenSUSE Linux 上安裝 Oracle。 Ubuntu 是一款廣受歡迎且在全球廣泛使用的 Linux 發行版,本篇部落格文章將提供在 Ubuntu 上安裝 Oracle 的逐步教學。在本教學中,我們將在 Ubuntu 上安裝 Oracle 資料庫 Enterprise 版本 (EE) 11g R2。
準備 Ubuntu Linux
在本教學中,一個剛安裝好的 Ubuntu 16.04.6 已啟用。該作業系統是在未啟用"在安裝 Ubuntu 時下載更新” 選項,且不使用 “安裝第三方軟體在作業系統部署過程中選擇""選項。
如果您從未在 Linux 上安裝過 Oracle,您應該先了解如何 在 Ubuntu 上安裝 Oracle 在實體電腦或伺服器上安裝 Oracle 之前,請先在虛擬機器上進行測試。
如果您使用 VMware 虛擬機器,請別忘了安裝 VMware Tools. 您也可以使用 VirtualBox 和 Hyper-V 虛擬機器。
請確保您在安裝過程中已選擇正確的時區。時區是 格林威治標準時間 0 (倫敦)在此範例中。
您可以使用以下指令檢查時區:
timedatectl
檢查 Ubuntu 版本:
lsb_release -a
在我們的範例中,輸出結果如下:
在本篇關於如何在 Ubuntu 上安裝 Oracle 11g 的教學中,使用了以下虛擬機器硬體參數:
- CPU:1 顆 CPU
- 記憶體:4 GB
- 硬碟:40 GB
user1 在此範例中,是位一般使用者(user1 (此帳戶在安裝 Ubuntu 時建立,並用於登入 Ubuntu)。
已安裝以下套件:
- vim, 文字編輯器
- 網路工具, 網路管理工具
- openssh-server,這是一個 SSH 伺服器,可讓您遠端連線至 Linux 主控台(終端機)
如果您在 Ubuntu Linux 系統中尚未安裝這些套件,可以使用以下指令進行安裝:
sudo apt-get install -y vim net-tools openssh-server
SSH 伺服器是為了方便起見而安裝的。在 Ubuntu 上使用 Oracle 安裝程式之前,您應先在控制台執行許多指令。
若要啟用密碼驗證,請編輯 sshd_config 檔案:
vim /etc/ssh/sshd_config
請取消該行的註解(移除行首的"#"):
PasswordAuthentication yes
按下儲存並退出 Esc 輸入 vim 以及輸入 :wq
重新啟動 sshd 服務(守護程式),請以 root 權限執行以下指令:
sudo service ssh restart
設定暫存檔
Ubuntu 16 預設使用交換分區。您可以在安裝 Ubuntu 時自訂交換分區的大小。如果您選擇了預設的分區選項,或選取了不正確的交換分區大小,您仍可建立自訂大小的暫存檔,並使用該暫存檔來取代現有的交換分區。 交換空間的大小應等於記憶體容量的兩倍。若您打算在配備 4 GB 記憶體的 Ubuntu 上安裝 Oracle,則應準備一個 8 GB 的暫存檔或暫存空間。現在我們來建立這個 8 GB 的暫存檔。
暫時停用交換區:
sudo swapoff -a
建立一個 8 GB 的新檔案,並使用 dd 工具:
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
將建立的 8 GB 檔案設定為暫存檔:
sudo mkswap /swapfile
重新啟用交換空間:
sudo swapon /swapfile
建立新的暫存檔後,請檢查交換區的大小:
grep SwapTotal /proc/meminfo
設定網路設定
預設情況下,Ubuntu 16 會為網路介面自動取得 IP 位址(若網路中存在 DHCP 伺服器)。在 Ubuntu 上安裝 Oracle 之前,您需要設定靜態 IP 位址並配置主機名稱。
檢查當前的 IP 設定:
ifconfig
在輸出結果中,您可以看到網路介面的名稱和 IP 位址。在本例中,所需的網路介面名稱是 ens33.
設定靜態 IP 位址
請使用以下指令編輯網路介面設定檔: vim:
sudo vim /etc/network interfaces
在 Ubuntu 上安裝 Oracle 資料庫所需的靜態 IP 位址是 192.168.101.11 在此範例中,請在 Linux 機器的當前介面上進行操作。請依下列方式編輯設定檔:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet static
address 192.168.101.11
netmask 255.255.255.0
gateway 192.168.101.2
dns-nameservers 192.168.101.2 8.8.8.8
儲存變更並退出。
套用變更:
sudo /etc/init.d/networking restart
或者重新啟動電腦:
init 6
請確認新的 IP 設定已套用:
ifconfig
或者:
hostname -I
檢查完 IP 位址設定後,請檢查主機名稱。
檢查主機名稱
在我們的使用情境下,用於在 Ubuntu 上安裝 Oracle 的主機名是 ubuntu-oracle11.
檢查當前主機名稱:
hostnamectl
如果您在安裝 Ubuntu 時忘記設定主機名稱,或是出於其他原因想變更主機名稱,您仍然可以進行設定。
若要重新命名主機並設定新的主機名稱(ubuntu-oracle11),執行以下指令:
sudo hostnamectl set-hostname ubuntu-oracle11
確認新主機名稱是否已套用:
less /etc/hostname
編輯 hosts 檔案:
sudo vim /etc/hosts
/etc/hosts 檔案的內容必須如下所示:
127.0.0.1 localhost
127.0.1.1 ubuntu-oracle11
重新啟動機器:
init 6
請嘗試在您的 Ubuntu 電腦上對該主機名稱執行 ping 指令:
ping ubuntu-oracle11
設定 Oracle 環境
要在 Ubuntu 上安裝 Oracle,您需要設定 Linux 環境:建立系統使用者與群組、設定核心參數、建立系統設定檔、為使用者設定環境變數、定義 shell 限制、建立符號連結,以及安裝所需的套件。
建立使用者與群組
以一般使用者身分開啟本地端控制台,或透過 SSH 連線至 Linux 控制台,然後取得 根 權限:
sudo -i
以下指令必須以 根.
新增 Oracle 的需求。
建立 Oracle 庫存 群組:
groupadd oinstall
建立 Oracle 資料庫管理員 群組:
groupadd dba
建立 Oracle 使用者的家目錄:
mkdir /home/oracle/
建立用於安裝 Oracle 的目錄:
mkdir -p /u01/app/oracle
接著建立一個 Oracle 使用者帳戶,使其成為 dba 該團體,擁有 /home/oracle/ 主目錄及其用途 /bin/bash 作為預設的 shell:
useradd -g oinstall -G dba -d /home/oracle -s /bin/bash oracle
設定 oracle 使用者的密碼(請務必記住此密碼):
passwd oracle
設定 神諭 將使用者設為 Oracle 主目錄及 Oracle 安裝目錄的所有者。該 神諭 使用者是該群組的成員 oinstall 群組。
chown -R oracle:oinstall /home/oracle
chown -R oracle:oinstall /u01/app/oracle
註: 與 Oracle 10 不同,建立 沒有人 Oracle 11 不需要此群組。
建立 Oracle Inventory 的目錄:
mkdir -p /u01/app/oraInventory
設定 神諭 將使用者設為 Oracle Inventory 目錄的所有者:
chown -R oracle:oinstall /u01/app/oraInventory
設定核心參數
要在 Ubuntu 上安裝 Oracle,必須設定自訂的內核參數,而這些內核參數會影響 Oracle 的效能。共享記憶體參數(包括最小與最大大小、共享記憶體區段的數量,以及可視為共享記憶體標誌的信號量)必須依照 Oracle 文件進行自訂。 您還需設定同時最多可開啟的檔案數量、同時最多網路連線數,以及網路傳送與接收緩衝區的大小。上述核心參數可歸類為三組:核心特定參數(核心),網路相關細節(網路),以及檔案處理程序 (fs). 編輯 /etc/sysctl.conf 檔案,用以覆寫 Linux 核心的參數:
vim /etc/sysctl.conf
請將以下列出的行附加到此設定檔的末尾。
# ============================
# Oracle 11g
# ============================
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmni = 4096
# Replace kernel.shmmax with the half of your memory size in bytes
# if lower than 4 GB minus 1
# 2147483648 is 2 GigaBytes (4 GB of RAM / 2)
kernel.shmmax=2147483648
#
# Max number of network connections. Use sysctl -a | grep ip_local_port_range to check.
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 = 1048576
#
# The maximum allowed value, set to avoid overhead and input/output errors
fs.aio-max-nr = 1048576
# 512 * Processes
fs.file-max = 6815744
fs.suid_dumpable = 1
#
# To allow dba to allocate hugetlbfs pages
# 1001 is your oinstall group, you can check this id with the grep oinstall /etc/group command
vm.hugetlb_shm_group = 1001
套用您所設定的內核參數:
sysctl -p
設定 shell 限制
您必須設定 shell 限制,以提升 Oracle 資料庫軟體的效能。
編輯 /etc/security/limits.conf 檔案:
vim /etc/security/limits.conf
請在設定檔的末尾加入以下幾行:
# Oracle
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
第一欄指定了設定限制的對象。
第二欄有兩種選項——軟限制和硬限制。軟限制是指使用者可設定的最大數值,而硬限制則是該指定使用者(oracle)可重新設定的最大數值。如果 神諭 若使用者達到第一行設定的 2047 這個臨界低值,並需要擴大限制,則可將限制提高至 16384。超過 16384 的數值無法由 神諭 此設定由一般使用者設定,但 root使用者亦可進行調整。
第三欄定義了設定的限制將套用至哪些資源。
第四欄定義了第三欄所指定資源參數的最大數量。
PAM 設定
請確保 /etc/pam.d/login 設定檔中包含以下這行:
session required pam_limits.so
您可以使用以下指令來執行:
cat /etc/pam.d/login | grep pam_limits.so
如果缺少上述那行,請手動加入此行。
設定 shell 設定檔
系統範圍的環境變數是在全域 bash 殼層設定檔中設定的,該設定檔位於 /etc/profile 設定檔。
編輯 /etc/profile 並為 神諭 在全球範圍內且永久地:
vim /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
註: 了解何時該使用哪個 shell 設定檔是很有幫助的,因為稍後您將需要設定一個包含環境變數的設定檔,用以 神諭 使用者。
Bash 登入殼層 會依照以下順序從下列檔案載入其設定:
- /etc/profile
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
/etc/profile 可視為 bash 登入殼層的全球設定檔。
./bash_profile 此設定適用於 Bash 登入殼層,例如:當您透過連接至該 Linux 電腦的鍵盤直接登入 Linux 命令列介面時,或是透過 SSH 終端機登入後開啟新的控制台工作階段時。
.profile – 此檔案是用來讀取的 bash 以及其他類似的殼層,例如 sh.
Bash 非登入互動式殼層 從…載入設定 ~/.bashrc
這表示,如果您已經登入 Linux 系統(例如透過圖形介面登入 Ubuntu),然後開啟一個新的控制台(終端機)視窗,那麼 shell 設定(包括環境變數)將會從 .bashrc 在取得命令提示字元存取權限之前,請先執行該檔案。
Bash 非登入模式與非互動模式 shell 會載入設定於 $BASH_ENV 環境變數。當腳本執行時,會使用非登入且非互動式的 shell。
安裝所需的套件
您需要安裝 Oracle 的需求套件。安裝時請務必謹慎,因為若缺少任何套件,可能會導致在安裝 Oracle 或建立資料庫時發生錯誤。
更新儲存庫目錄:
apt-get update
安裝相關套件,以避免在 Ubuntu 上安裝 Oracle 時可能發生的錯誤。大多數套件均可透過 Ubuntu 的標準套件管理員從線上儲存庫進行安裝。
apt-get install alien
apt-get install autoconf
apt-get install automake
apt-get install autotools-dev
apt-get install binutils
apt-get install bzip2
apt-get install doxygen
apt-get install elfutils
apt-get install expat
apt-get install gawk
apt-get install gcc
apt-get install gcc-multilib
apt-get install g++-multilib
apt-get install libelf-dev
apt-get install libltdl-dev
apt-get install libodbcinstq4-1 libodbcinstq4-1:i386
apt-get install libpth-dev
apt-get install libpthread-stubs0-dev
apt-get install libstdc++5
apt-get install make
apt-get install openssh-server
apt-get install rlwrap
apt-get install rpm
apt-get install sysstat
apt-get install unixodbc
apt-get install unixodbc-dev
apt-get install unzip
apt-get install x11-utils
apt-get install zlibc
apt-get install libaio1
apt-get install libaio-dev
還有幾個套件尚未安裝,但要安裝它們,您需要參考這些技巧與訣竅。
apt-get install ia32-libs
當您執行以下命令來安裝此套件時 apt-get, 您會看到一則訊息,指出此套件無法取得。
另有其他套件可供安裝,以取代 ia32-libs. 安裝 lib32z1 替代套件:
apt-get install lib32z1
現在來安裝下一個套件:
apt-get install libmotif4
此套件目前亦無法取得。您應手動下載並安裝此套件。請下載 libmotif4_2.3.4-8ubuntu1_amd64.deb 來自一個 免費資源. 儲存已下載的 deb 在安裝此套件之前,請先將檔案移至自訂目錄,例如 /home/user1/Downloads。
在 Ubuntu 中安裝 deb 套件的工作流程如下(請以 root 權限執行指令):
sudo dpkg -i 套件名稱.deb
sudo apt-get -f install
在這種情況下,我們會以一般使用者身分執行安裝套件的指令,例如: user1 透過使用 sudo. 按 Ctrl+D 要退出根會話並返回 user1 在控制台(終端機)中開啟一個工作階段。
前往儲存下載檔案的目錄:
cd /home/user1/Downloads
請使用直接連結下載檔案:
wget http://launchpadlibrarian.net/207968936/libmotif4_2.3.4-8ubuntu1_amd64.deb
sudo dpkg -i libmotif4_2.3.4-8ubuntu1_amd64.deb
sudo apt-get -f install
無法自動安裝以下套件:
sudo apt-get install libpthread-stubs0
E:套件 libpthread-stubs0 的位置無法找到
下載 並手動安裝此套件。
wget http://launchpadlibrarian.net/154418307/libpthread-stubs0-dev_0.3-4_amd64.deb
sudo dpkg -i libpthread-stubs0-dev_0.3-4_amd64.deb
sudo apt-get -f install
同樣地,安裝以下套件:
sudo apt-get install lsb-cxx
E: 無法找到套件 lsb-cxx 的位置
您可以下載 lsb-cxx 手動打包。
wget http://packages.linuxmint.com//pool/upstream/l/lsb/lsb-cxx_4.1+Debian11ubuntu6mint1_amd64.deb
sudo dpkg -i lsb-cxx_4.1+Debian11ubuntu6mint1_amd64.deb
sudo apt-get -f install
安裝另一個套件:
sudo apt-get install pdksh
E: 套件 ‘pdksh’ 沒有可安裝的候選項目
安裝該軟體的工作流程 pdksh 套件是相同的。此套件可從此處下載 這裡.
wget http://launchpadlibrarian.net/200019501/pdksh_50e-2ubuntu1_all.deb
sudo dpkg -i pdksh_50e-2ubuntu1_all.deb
sudo apt-get -f install
Oracle 11g 需要安裝 32 位元版本的 libstdc++5 此套件並未預先安裝在 Ubuntu 16 上。以下是手動安裝此套件的方法。
請以以下身分執行以下指令: 根. 建立一個暫時目錄來下載套件:
mkdir /tmp/libstdc++5
cd /tmp/libstdc++5
下載套件(下方提供 32 位元與 64 位元版本的連結):
wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-30_i386.deb
wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-30_amd64.deb
請使用以下指令安裝已下載的套件: dpkg:
dpkg --force-architecture -i libstdc++5_3.3.6-30_i386.deb
註: 如果連結無法正常運作,可以發布較新版本的套件來取代舊版本。在這種情況下,請在瀏覽器中開啟網頁,並將正確的連結複製到所需的 deb 套件:
http://mirrors.edge.kernel.org/ubuntu/pool/universe/g/gcc-3.3/
重新啟動 Linux 電腦以套用變更。
init 6
建立符號連結
您必須建立符號連結(symlinks),才能讓 Ubuntu 中使用的檔案與目錄結構與 Red Hat 的檔案結構相似。建立這些符號連結,使檔案系統結構看起來與 Red Hat 的檔案系統結構完全相同,以避免在安裝 Oracle 時發生錯誤。
以 root 身分執行以下指令:
mkdir /usr/lib64
ln -s /etc /etc/rc.d
ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/basename /bin/basename
ln -s /usr/bin/rpm /bin/rpm
ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /usr/lib64/
ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/
ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib64/
ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
ln -sf /bin/bash /bin/sh
ln -s /etc/rc0.d /etc/rc.d/rc0.d
ln -s /etc/rc2.d /etc/rc.d/rc2.d
ln -s /etc/rc3.d /etc/rc.d/rc3.d
ln -s /etc/rc4.d /etc/rc.d/rc4.d
ln -s /etc/rc5.d /etc/rc.d/rc5.d
ln -s /etc/rc6.d /etc/rc.d/rc6.d
ln -s /etc/init.d /etc/rc.d/init.d
上述指令有助於避免發生以下錯誤:
- genclntsh:在 rdbms/lib/ins_rdbms.mk 的 make 檔案中,因缺少函式庫而無法連結 libclntsh.so.11.1:/usr/bin/ld:無法在 /usr/lib64/libpthread_nonshared.a 內找到
- lib//libagtsh.so:在 make 指令中出現未定義的 `nnfyboot’ 引用:rdbms/lib/dg4odbc] 錯誤 1
現在讓我們再避免一個錯誤: /lib64/libgcc_s.so.1:建立 lib/liborasdkbase.so.11.1 時,檔案或目錄不存在(出現在 ins_rdbms.mk 中). 前往 /lib64 目錄中並執行以下指令:
cd /lib64
ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 .
請注意命令結尾的點號。
將 Linux 版本設定為 Red Hat Linux 發布第 5 版 在 /etc/redhat-release. Red Hat Linux 發行版會將其版本資訊儲存於該檔案中。
echo 'Red Hat Linux release 5' > /etc/redhat-release
設定 Oracle 使用者設定檔
現在您需要為 神諭 使用者。
請以 神諭 如果您是以其他使用者身分開啟控制台:
su oracle
請以以下方式執行指令: 神諭:
cd
vim ~/.bashrc
請將以下幾行加入 .bashrc 檔案:
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
# Enter your hostname
ORACLE_HOSTNAME=ubuntu-oracle11; export ORACLE_HOSTNAME
ORACLE_UNQNAME=ORADB11G; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=ORADB11G; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
umask 022
套用設定:
source ~/.bashrc
您現在應該重新啟動 Ubuntu。請注意,即使未執行 source ~/.bashrc,設定仍會在重新啟動後生效。
init 6
準備 Oracle 安裝程式
Oracle 的安裝準備工作已接近尾聲。只需再進行幾個步驟,您即可啟動安裝程式並在 Ubuntu 上安裝 Oracle。重新啟動 Ubuntu 電腦後,請以 神諭 在 Ubuntu 的圖形使用者介面中。
開啟網頁瀏覽器。
在本範例中,兩個下載的檔案已儲存至 /home/oracle/Downloads 為方便起見:
linux.x64_11gR2_database_1of2.zip
linux.x64_11gR2_database_2of2.zip
在 Ubuntu 中開啟終端機,並以以下身分執行下列指令: 神諭。 前往存放下載檔案的目錄:
cd /home/oracle/Downloads
或 cd ~/Downloads/
請從下載的 ZIP 壓縮檔中解壓縮安裝檔案:
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
解壓縮後的檔案儲存於:
/home/oracle/Downloads/database
現在您可以執行安裝程式,並在 Ubuntu 上安裝 Oracle 了。
安裝 Oracle
前往安裝檔案下載的目錄。以 神諭 在 GUI 工作階段中啟動的控制台中。
cd /home/oracle/Downloads/database
執行 Oracle 安裝程式:
./runInstaller
1. 設定安全性更新
取消勾選"我希望透過 My Oracle Support 接收安全性更新” 核取方塊。
點擊 下一頁 以進入 Oracle 安裝精靈的下一步。
您將會看到以下訊息: 您尚未提供email地址。您是否希望對配置中的關鍵安全問題一無所知? 請忽略此訊息並點擊 是的.
2. 安裝選項
選擇 建立並設定資料庫.
3. 系統類別
選擇 伺服器級這是一種在 Ubuntu 上安裝 Oracle 資料庫的高階選項。
4. 網格選項
選擇 單一執行個體資料庫安裝 作為資料庫安裝的類型。
5. 安裝類型
選擇 進階安裝 作為安裝類型。此選項可讓您設定密碼、字元集、語言、儲存選項等。
6. 產品語言
請選擇所需的語言。在此範例中, 英文 以及 英語(英國) 已選取。
7. 資料庫版本
選擇 Enterprise 版本 用於您即將安裝的資料庫。
8. 選擇 Oracle 安裝位置
通常會使用 Oracle 基礎目錄和 Oracle 主目錄。
Oracle 基礎目錄: /u01/app/oracle
軟體位置: /u01/app/oracle/product/11.2.0/dbhome_1
9. 建立庫存
用於儲存 Oracle 安裝檔案的目錄稱為"Oracle 庫存目錄"。
庫存目錄: /u01/app/oraInventory
oraInventory 群組名稱: oinstall
10. 配置類型
請選擇您要建立的資料庫類型:
通用用途/交易處理
11. 資料庫識別碼
您可以為全域資料庫名稱和 Oracle 服務識別碼設定相同的值。
全域資料庫名稱: ORADB11G
Oracle 服務識別碼 (SID): ORADB11G
12. 設定選項
此步驟共有四個分頁。您可依下列方式設定各分頁的設定:
記憶體: 啟用自動記憶體管理(預設)。
字集: 請使用 Unicode (AL32UTF8)。
安全性: 套用所有新的安全性設定(預設)。
範例模式: 建立包含範例資料結構的資料庫(不過,您也可以保留預設值)。
13. 管理選項
您可以保留預設參數。
14. 資料庫儲存
請閱讀視窗中顯示的建議,然後選擇 檔案系統.
指定資料庫檔案位置: /u01/app/oracle/oradata
15. 備份與還原
此時您可以選擇以下選項: 請勿啟用自動備份 (預設)。
備份固然重要,但在 Ubuntu 上安裝 Oracle 之後,最好再設定 Oracle 資料庫的備份。
16. 資料庫模式密碼
您可以選擇 所有帳戶都使用相同的密碼. 輸入密碼並確認密碼。
17. 作業系統群組
請閱讀視窗中顯示的說明,並選取所需的群組。
資料庫管理員 (OSDBA) 群組: dba
資料庫操作員(OSOPER)組: oinstall
18. 先決條件檢查
現在,Oracle 安裝程式會檢查系統配置是否符合先決條件。此步驟會顯示警告訊息。作業系統核心參數 semmni 雖然已在上方進行了設定,但此參數仍顯示為失敗狀態。
作業系統核心參數: semmni 失敗
您可以檢查此參數的值,以確認一切是否正確。請檢查 semmni 使用該命令的參數(以 root 身分執行):
/sbin/sysctl -a | grep sem
kernel.sem = 250 32000 100 128
或
cat /proc/sys/kernel/sem
250 32000 100 128
如果最後一個值不小於 128,則一切正常,您可以忽略此警告。
不知為何,Oracle 先決條件檢查工具無法判定該 semmni 參數正確且已安裝所需套件。若您的"先決條件檢查"視窗內容與上圖截圖所示的視窗相似,請勾選 忽略全部 勾選方塊並點擊 下一頁 繼續。
19. 總結
請檢查設定摘要,以確認您已依需求完成所有設定。您可以儲存回應檔案(db.rsp) 因為當您需要在多台 Linux 機器上安裝 Oracle,或是打算在 Ubuntu Server 上安裝無圖形介面的 Oracle 時,這可能會派上用場。
現在您可以監控 Oracle 安裝程式複製檔案的過程,直到安裝程式進入 連結二進位檔 舞台。
Oracle 的二進位檔連結——修正連結與編譯錯誤
此步驟是將 Oracle 資料庫安裝於 Ubuntu Linux 系統上最困難的階段之一。在此步驟中發生錯誤的機率相當高。在目前的範例中,當我們在 Ubuntu 16 上安裝 Oracle 11g 時,會遇到以下錯誤:
呼叫 makefile ‘/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk’ 中的 ‘install’ 目標時發生錯誤。詳情請參閱 ‘/u01/app/oraInventory/logs/installActions2020-01-22_12-53-06PM.log’.
請注意,即使您在 Oracle Linux 上安裝 Oracle,也可能發生類似的錯誤。您的日誌檔名稱應有所不同。
註: 檔案名稱包含 .mk 擴充功能是 Makefile 並用於編譯程式。Makefile 會決定要編譯程式的哪些"部分",以及哪些程式檔案必須被編譯並連結在一起。 Oracle 軟體的部分元件是以 Java 編寫的(例如具備圖形使用者介面的 Oracle Universal Installer),而部分元件則是以 C 語言編寫。以 Java 編寫的元件無需編譯即可直接執行(Java 具有跨平台特性),反之,以 C 語言編寫的元件則必須經過編譯,而將二進位檔與函式庫進行連結是此過程的必要步驟。 Oracle 採用此方法以增加靈活性,並允許在不同作業系統(Windows、Linux、Solaris)上安裝 Oracle。另一項好處是安裝程式的大小得以縮小。缺點則是可能在 二進位檔的連結 在 Oracle 的安裝過程中。在大多數情況下,您應透過編輯 .mk 用於解決連結問題的檔案。
讓我們來了解如何解決在 Ubuntu Linux 上安裝 Oracle 資料庫時出現的連結二進位檔錯誤。
登入為 神諭 透過 SSH 連線至 Ubuntu 機器,並檢查日誌檔案:
tail -n 100 /u01/app/oraInventory/logs/installActions2020-01-22_12-53-06PM.log
閱讀日誌輸出時,請留意說明錯誤原因的那一行。
資訊:/u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk:11: 目標 ‘ctxhx’ 的建置失敗
ins_ctx.mk:11 請參閱該行 11 的 ins_ctx.mk 檔案。
讓我們開啟 ins_ctx.mk 開啟該檔案,並檢查第 11 行。
vim /u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk
在 vim 類型 :set number 以查看行號。
我們來找第 11 行。
在 vim, 您可以透過以下指令找到所需的字串:
/LINK_CTXHX
編輯以下段落:
ctxhx: $(CTXHXOBJ)
$(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK)
第 11 行必須按以下方式進行版本更新:
-static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/stdc.a
儲存 ins_ctx.mk 並退出 vim.
現在請返回 Oracle 安裝錯誤視窗,然後點擊 重試.
安裝程序仍在進行中,但幾秒鐘後又出現了另一個錯誤,當 建立代理程式函式庫:
呼叫 Makefile ‘/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk’ 中的目標 ‘agent nmhs’ 時發生錯誤.
請以以下身分執行下列指令 神諭 要解決此問題:
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
sed -i 's/^(s*$(MK_EMAGENT_NMECTL))s*$/1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk
註: sed 是一款流式文字編輯器,用於儲存時間,以節省編輯 .mk 與使用 vim 或其他互動式文字編輯器編輯檔案相比。
執行上述兩條指令後,請點擊 重試 在 Oracle 安裝錯誤視窗中。您可以看到錯誤已修復,且正在 Ubuntu Linux 上安裝 Oracle 資料庫。然而,幾秒鐘後又發生了另一個錯誤,當 連結 RDBMS 可執行檔:
呼叫 makefile ‘/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ins_rdbms.mk’ 中的目標 ‘all_no_orcl’ 時發生錯誤.
請以以下身分執行下列指令 神諭 要解決此錯誤以及其他幾個類似的錯誤:
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
cd $ORACLE_HOME/lib
ln -s libclient11.a libagtsh.a
$ORACLE_HOME/bin/genagtsh $ORACLE_HOME/lib/libagtsh.so 1.0
sed -i 's/^($LD $LD_RUNTIME) ($LD_OPT)/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/bin/genorasdksh
sed -i 's/^(s*)($(OCRLIBS_DEFAULT))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk
sed -i 's/^(TNSLSNR_LINKLINE.*$(TNSLSNR_OFILES)) ($(LINKTTLIBS))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/network/lib/env_network.mk
sed -i 's/^(ORACLE_LINKLINE.*$(ORACLE_LINKER)) ($(PL_FLAGS))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
然後回到錯誤視窗並點擊 重試. 現在安裝程序應能無誤地繼續進行。
通過此步驟後,Oracle 資料庫配置助理 (DBCA) 將會開啟 連結二進位檔 舞台。
執行設定腳本
我們即將完成在 Ubuntu 上安裝 Oracle 資料庫的最後階段。
請以以下方式執行這兩個腳本: 根:
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Oracle 資料庫的安裝已成功完成.
若您看到此通知,即可關閉 Oracle 安裝程式視窗。
確認 Oracle 是否正在 Ubuntu 上執行
在您那台運行 Oracle 的 Ubuntu 電腦上開啟網頁瀏覽器,並透過開啟 Oracle 資料庫控制管理員的網頁介面,確認 Oracle 是否正在運行。您可以使用以下連結進行此操作:
https://localhost:1158/em
https://ubuntu-oracle11:1158/em
https://192.168.101.11:1158/em
您也可以嘗試從網路中的另一台主機連線至執行 Oracle 的 Ubuntu 機器。
請定義連線參數。
使用者名稱: SYS
密碼:您在安裝 Oracle 時所設定的密碼
以…身分登入: SYSDBA
以下是 Oracle 正常運作時 Oracle Enterprise Manager 的螢幕截圖。
Oracle 安裝後設定
Oracle 已安裝完成,接下來我們應設定資料庫,使其在 Ubuntu 開機時自動啟動。您應編輯 /etc/oratab 設定檔,用以設定 Oracle 在系統開機時自動啟動。
請以 root 身分執行此指令。
vim /etc/oratab
替換 N 至 Y 在行尾:
ORADB11G:/u01/app/oracle/product/11.2.0/dbhome_1:Y
實用指令
在將 Oracle 設定為自動啟動之前,您應先了解如何手動啟動 Oracle 元件。這對於故障診斷也有幫助。請以 神諭 使用者:
啟動資料庫:
$ORACLE_HOME/bin/dbstart $ORACLE_HOME
停止資料庫:
$ORACLE_HOME/bin/dbshut $ORACLE_HOME
啟動 Database Control Enterprise Manager,該工具提供用於資料庫管理的網頁介面:
emctl start dbconsole
停止資料庫控制管理員:
emctl stop dbconsole
檢查資料庫控制管理員的狀態:
emctl status dbconsole
啟動監聽器:
$ORACLE_HOME/bin/lsnrctl start
暫停播放:
$ORACLE_HOME/bin/lsnrctl stop
檢查監聽器的狀態:
$ORACLE_HOME/bin/lsnrctl status
啟動資料庫設定精靈(請在圖形化介面中執行,而非透過 SSH 終端機):
dbca
您可以透過編輯以下檔案來設定 Oracle 監聽器:
vim $ORACLE_HOME/network/admin/listener.ora
在主控台中連線至資料庫:
sqlplus / as sysdba;
在 Ubuntu 中為 Oracle 建立啟動腳本
讓我們來探討如何設定 Oracle,使其在 Ubuntu 啟動時自動執行。編輯完後 /etc/oratab, 您應在 /etc/init.d/ 目錄。
在 Ubuntu 中建立新的 Oracle 啟動腳本檔案(以 根):
vim /etc/init.d/oracle
請將以下內容加入該檔案中:
#!/bin/bash
#
# Run-level Startup script for the Oracle Instance and Listener
#
### BEGIN INIT INFO
# Provides: Oracle
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Startup/Shutdown Oracle listener and instance
### END INIT INFO
#ORACLE_UNQNAME="ORADB11G"
#export $ORACLE_UNQNAME
echo "ORACLE_UNQNAME is $ORACLE_UNQNAME"
ORACLE_HOME="/u01/app/oracle/product/11.2.0/dbhome_1"
ORACLE_OWNR="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 -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
echo "dbstart"
source "/home/oracle/.bashrc" && su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
echo "lsnrctl start"
source "/home/oracle/.bashrc" && su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl start"
#Optional : for Enterprise Manager software only
echo "emctl start dbconsole"
source "/home/oracle/.bashrc" && su $ORACLE_OWNR -c "$ORACLE_HOME/bin/emctl start dbconsole"
touch /var/lock/oracle
echo "OK - a script has been executed"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
#Optional : for Enterprise Manager software only
source "/home/oracle/.bashrc" && su $ORACLE_OWNR -c "$ORAClE_HOME/bin/emctl stop dbconsole"
source "/home/oracle/.bashrc" && su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop"
source "/home/oracle/.bashrc" && su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
rm -f /var/lock/oracle
echo "OK - a script has been executed"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart|reload"
exit 1
esac
exit 0
設定正確的權限:
chown oracle:oinstall /etc/init.d/oracle
chmod 0775 /etc/init.d/oracle
讓此腳本在作業系統啟動後立即執行(適用於預設執行層級):
update-rc.d oracle defaults
如有需要,您可以編輯啟動優先順序。
執行此腳本以停止 Oracle(您可以將此腳本作為 根):
/etc/init.d/oracle stop
若要啟動 Oracle,請使用以下指令執行此腳本:
/etc/init.d/oracle start
註: 請注意 Oracle 啟動腳本中的以下行以及類似的行:
source "/home/oracle/.bashrc" && su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
首先,我們將殼層設定為讀取儲存於 .bashrc 系統設定檔的 神諭 使用者,包括以下變數: ORACLE_HOSTNAME, ORACLE_BASE, PATH 等等,這些是 Oracle 元件正常運作所需的設定。在 神諭 當使用者設定套用至當前 shell 工作階段後,將執行以下指令以啟動 Oracle 資料庫:
兩者之間的差異為何 su - 以及 su?
user1@主機名稱:~$ su - username2 – 此指令會以選定的使用者身分執行命令列殼層工作階段(使用者名稱2) 並套用所選使用者的設定 (使用者名稱2) 彷彿您已以 使用者名稱2 當直接建立新的 shell 工作階段(從頭開始)時,環境變數的 使用者名稱2 用於此 shell 工作階段中。
user1@主機名稱:~$ su username2 – 此指令會以選定的使用者身分執行命令列殼層(使用者名稱2) 並套用目前使用者的設定 (user1) 以及該的環境變數 user1 由……繼承 使用者名稱2 在此 shell 工作階段中。
su -c (–command) 表示必須以選定的使用者身分執行指定的指令。
疑難排解
讓我們來檢視一下在 Ubuntu 上安裝 Oracle 時可能遇到的問題,以及是否有解決方法。
ORA-12547:TNS:失去連線
資料庫設定精靈無法建立資料庫,並發生錯誤。
ORA-12547:TNS:失去連線.
當前操作的日誌檔案位置位於:
/u01/app/oracle/cfgtoollogs/dbca/ORADB11G
請檢查日誌檔案:
tail -n 100 /u01/app/oracle/cfgtoollogs/dbca/ORADB11G/cloneDBCreation.log
請注意以下字串:
oracleORADB11G:載入共用函式庫時發生錯誤:libaio.so.1:無法開啟共用物件檔案:沒有此檔案或目錄
ORA-12547:TNS:失去連線
顯示此錯誤訊息的原因之一,是缺少與相關套件相關的函式庫——libaio1, libaio-dev. 請檢查是否已安裝上述套件,若未安裝,請進行安裝:
sudo apt-get install libaio1
sudo apt-get install libaio-dev
Ubuntu 開機時 Oracle 不會自動啟動
您可能會遇到以下情況:當您以 根 並看到以下訊息:
"未定義環境變數 ORACLE_UNQNAME。請將 ORACLE_UNQNAME 設定為資料庫的唯一名稱"。
在此情況下,Oracle 不會在 Ubuntu 開機時自動啟動。若在啟動 Oracle Enterprise Manager 11g Database Control 時出現此錯誤訊息,請檢查環境變數。
How to check the ORACLE_UNQNAME?
您可以檢查 ORACLE_UNQNAME(以 神諭).
sqlplus / as sysdba;
SQL> SELECT name, db_unique_name FROM v$database;
SQL> exit
編輯 /etc/profile (以 root 身分):
vim /etc/profile
在文件末尾加入以下這行: /etc/profile 檔案:
ORACLE_UNQNAME=ORADB11G; export ORACLE_UNQNAME
重新啟動已安裝 Oracle 的 Ubuntu 電腦。
現在執行腳本時不應再出現此錯誤,且執行後 Oracle 應會啟動。 /etc/init.d/oracle start 手動執行該指令。然而,Oracle 在 Ubuntu Linux 啟動時仍無法自動啟動。此問題的原因在於,執行該腳本的 shell 環境變數尚未設定。請參閱上文關於 Oracle 啟動腳本的說明,並仔細檢視您的腳本。
是否可以在 Ubuntu 18 上安裝 Oracle 11g?
Ubuntu 18 採用了更新版本的 Linux 系統函式庫,這些函式庫與 Oracle 11g R2 的相容性極佳。您在 連結二進位檔 Oracle 安裝的階段。例如:
呼叫 Makefile ‘u01/app/oracle/product/11.2.0/dbhome_1/precomp/lib/ins_precomp.mk’ 中的目標 ‘links proc gen_pcscfg’ 時發生錯誤.
這就是為什麼本教學使用 Ubuntu 16 的原因。當然,您也可以嘗試在 Ubuntu 18 上安裝 Oracle 11g,但請做好遇到一些困難的準備。您可能需要安裝舊版本的套件和函式庫,進而導致 Ubuntu 作業系統降級。
在 Ubuntu 18 上安裝 Oracle 資料庫的工作流程,與在 Ubuntu 16 上安裝 Oracle 資料庫(針對 Oracle 11g R2 EE)類似。在 連結二進位檔 當發生錯誤時,您應分析日誌、查閱文件,並修正連結錯誤。
若在編輯檔案後需手動重新連結函式庫,以下指令可能會有所幫助:
$ORACLE_HOME/bin/relink all
結論
這篇部落格文章引導您完成了 Oracle 11g R2 Enterprise 版本的安裝,其安裝流程遠比 Oracle XE(Express Edition)複雜得多。要在 Ubuntu 上安裝 Oracle 資料庫,您必須手動配置檔案和系統參數。
在 Ubuntu Linux 上安裝 Oracle 並非易事,但 Oracle Enterprise 版本提供了許多優勢。 在 Oracle 安裝過程中,您必須特別留意安裝 Ubuntu 套件、連結二進位檔以及建立啟動腳本這三個步驟。若您的 Ubuntu 與 Oracle 版本與本文所述版本相同,請依照本分步教學操作,即可成功安裝 Oracle。部署 Oracle 資料庫後,請務必進行備份。








































