CentOS7.6靜默(無圖形化界面)安裝Oracle 11g


一、准備工作

1.准備CentOS 7 系統環境

由於是使用靜默模式(silent)安裝的,無需使用圖形化界面,我選擇了最小安裝的服務器版的CentOS 7。安裝完成后,只有命令行界面。

2.下載 Oracle 11g

(1)Oracle官方網站:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 我的機器安裝的是CentOS7 64位系統,因此下載的Oracle版本也是64位的

特別注意:11.2.0.2.0  zlinux64版本的Oracle是安裝在IBM服務器的,CentOS 7是無法安裝的。

(2)下載完成后,有兩個壓縮文件

linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip

3.通過Xftp將壓縮文件上傳到 /db/

4.安裝依賴包,安裝依賴包之前,個人建議將yum源修改為aliyun源,下載速度快些,執行如下命令即可:cd /etc

mv yum.repos.d yum.repos.d.bak mkdir yum.repos.d wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all yum makecache

若提示:
正在解析主機 mirrors.aliyun.com (mirrors.aliyun.com)... 失敗:未知的名稱或服務。
則執行:echo 'nameserver 8.8.8.8'>>/etc/resolv.conf

5.修改成功后,安裝如下依賴包:

yum -y install binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel

6.安裝完成后顯示如下界面

 

7.使用如下命令檢查依賴是否安裝完整

rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel | grep "not installed"

8.發現 pdksh 沒有安裝

9.執行 yum -y install pdksh,發現CentOS 7 沒有相關安裝包可用

10.通過wget命令直接下載pdksh的rpm包,我下載到了/tmp/

wget -O /tmp/pdksh-5.2.14-37.el5_8.1.x86_64.rpm http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm

下載完成后,進入 /tmp/

cd /tmp/
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

11.再次檢查依賴包是否安裝完整

rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel | grep "not installed"

 到此依賴包安裝完整

12.添加oracle用戶組和用戶

groupadd oinstall
groupadd dba
groupadd asmadmin
groupadd asmdba
useradd -g oinstall -G dba,asmdba oracle -d /home/oracle

13.添加完成后,查看oracle用戶

id oracle

14.初始化oracle用戶的密碼

passwd oracle

 說明:密碼需輸入兩次,提示密碼強度若不用管,兩次一致后會提示設置成功

15.配置hostname(本機IP映射)

vim /etc/hosts
192.168.154.154 centos-oracle

16.測試hostname

ping -c 3 centos-oracle

 17.優化OS內核參數,kernel.shmmax 參數設置為物理內存的一半

vim /etc/sysctl.conf
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmall=2097152
kernel.shmmni=4096
kernel.shmmax = 1073741824
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

18.使參數生效

sysctl -p

 19.限制oracle用戶的shell權限

vim /etc/security/limits.conf
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
vim /etc/pam.d/login
session  required   /lib64/security/pam_limits.so
session  required   pam_limits.so
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

20.創建oracle安裝目錄

mkdir -p /db/app/oracle/product/11.2.0
mkdir /db/app/oracle/oradata
mkdir /db/app/oracle/inventory
mkdir /db/app/oracle/fast_recovery_area
chown -R oracle:oinstall /db/app/oracle
chmod -R 775 /db/app/oracle

21.配置oracle用戶環境變量

su - oracle
vim .bash_profile
umask 022
export ORACLE_HOSTNAME=centos-oracle
export ORACLE_BASE=/db/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
export ORACLE_SID=ORCL
export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
export LC_ALL="en_US"
export LANG="en_US"
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

22.以上配置完成后,個人建議重啟下系統

reboot

23.解壓oracle壓縮文件到 /db

cd /db/
unzip linux.x64_11gR2_database_1of2.zip -d /db
unzip linux.x64_11gR2_database_2of2.zip -d /db

24.解壓完成后

mkdir /db/etc/
cp /db/database/response/* /db/etc/
vim /db/etc/db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
DECLINE_SECURITY_UPDATES=true
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/db/app/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOSTNAME=centos-oracle
ORACLE_HOME=/db/app/oracle/product/11.2.0
ORACLE_BASE=/db/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=true
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba

 二、開始安裝

1.切換到oracle用戶

su - oracle
# 先cd到/db/database/目錄然后執行
./runInstaller -silent -ignorePrereq -responseFile /db/etc/db_install.rsp

報錯:centos 安裝oracle 報Checking swap space: 0 MB available, 150 MB required. Failed <<<<【備注:若無此錯誤請忽略,我在華為雲服務器掛載磁盤且安裝位置設置為/mnt目錄,此情景下安裝oracle 11g時發送這樣的錯誤,一般情況不會出現此錯誤】

  解決辦法:

(1)檢查 Swap 空間在設置 Swap 文件之前,有必要先檢查一下系統里有沒有既存的 Swap 文件。運行以下命令:

swapon -s

如果返回的信息概要是空的,則表示 Swap 文件不存在。

(2)檢查文件系統在設置 Swap 文件之前,同樣有必要檢查一下文件系統,看看是否有足夠的硬盤空間來設置 Swap 。運行以下命令:

df -hal

(3)創建並允許 Swap 文件下面使用 dd 命令來創建 Swap 文件。檢查返回的信息,還剩余足夠的硬盤空間即可。

dd if=/dev/zero of=/swapfile bs=1024 count=512k

參數解讀:if=文件名:輸入文件名,缺省為標准輸入。即指定源文件。< if=input file >of=文件名:輸出文件名,缺省為標准輸出。即指定目的文件。< of=output file >bs=bytes:同時設置讀入/輸出的塊大小為bytes個字節count=blocks:僅拷貝blocks個塊,塊大小等於bs指定的字節數。

(4)格式化並激活 Swap 文件上面已經創建好 Swap 文件,還需要格式化后才能使用。運行命令:

mkswap /swapfile

激活 Swap ,運行命令:

swapon /swapfile

(5)以上步驟做完,再次運行命令:

swapon -s

(6)你會發現返回的信息概要:

Filename Type Size Used Priority
/swapfile file 524284 0 -1
(7)如果要機器重啟的時候自動掛載 Swap ,那么還需要修改 fstab 配置。用 vim 打開 /etc/fstab 文件,在其最后添加如下一行:

vim /etc/fstab
/swapfile swap swap defaults 0 0

(8)最后,賦予 Swap 文件適當的權限:

chown root:root /swapfile
chmod 0600 /swapfile

若無錯誤繼續往下,若解決完以上錯誤繼續執行一下命令:

./runInstaller -silent -ignorePrereq -responseFile /db/etc/db_install.rsp

2.安裝期間可以使用tail命令監看oracle的安裝日志

tail -f /db/app/oracle/inventory/logs/installActions2019-09-03_19-48-29PM.log

 安裝完成,提示Successfully Setup Software.

3.根據提示完成配置

su root
sh
/db/app/oracle/inventory/orainstRoot.sh sh /db/app/oracle/product/11.2.0/root.sh

 

 4.配置靜默監聽

su - oracle
netca /silent /responsefile /db/etc/netca.rsp

注意:若失敗可能是由於系統setlinux未設置為disable,設置好后需要重啟系統

5.查看監聽端口

netstat -tnulp | grep 1521

6.靜默創建數據庫   TOTALMEMORY 設置為總內存的80%

切換為root用戶

su root
vi
/db/etc/dbca.rsp //打開文件后可通過搜索將“=”右邊參數值補齊
GDBNAME = "orcl"
SID = "orcl"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
SYSMANPASSWORD = "oracle"
DBSNMPPASSWORD = "oracle"
DATAFILEDESTINATION =/db/app/oracle/oradata
RECOVERYAREADESTINATION=/db/app/oracle/fast_recovery_area
CHARACTERSET = "AL32UTF8"
TOTALMEMORY = "1638"

7.執行靜默建庫(切換為oracle用戶)

su - oracle

dbca -silent -responseFile /db/etc/dbca.rsp

8.查看oracle實例進程

ps -ef | grep ora_ | grep -v grep

9.查看監聽狀態

lsnrctl status

10.切換為oracle用戶,登錄sqlplus,查看實例狀態

su - oracle
sqlplus / as sysdba select status from v$instance;

注意:此處會報錯

  解決辦法:輸入命令startup

startup

若依舊有問題,則ls命令查看  /db/app/oracle/admin/orcl/pfile/下有沒有init.ora.*****類似的文件,拷貝覆蓋報錯的文件

cp /db/app/oracle/admin/orcl/pfile/init.ora.8420191849 /db/app/oracle/product/11.2.0/dbs/initORCL.ora

再次startup即可成功

再次查詢即可正常顯示

 (1)查看數據庫編碼

select userenv('language') from dual;

(2)查看數據庫版本信息

select * from v$version;

(3)激活scott用戶

alter user scott account unlock; //若遇到su - oracle用戶下無法解鎖該用戶,請用遠程連接工具通過system用戶進行解鎖,這里不影響
alter user scott identified by tiger; //若遇到su - oracle用戶下無法修改密碼,請用遠程連接工具通過system用戶進行修改,這里不影響
select username from all_users;

11.Navicat遠程連接Oracle

(1)開放1521端口

firewall-cmd --zone=public --add-port=1521/tcp --permanent
firewall-cmd --reload

(2)官方網站http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

下載 instantclient-basic,解壓壓縮文件

 (3)下載Navicat:http://pan.baidu.com/s/1c2GP9U4

① 打開Navicat,工具→選項

② 打開OCI界面,在右側OCI library一欄中選擇instantclient-basic解壓目錄下的oci.dll,然后點擊確定。

該文件可以不用本地安裝oracle即可遠程連接,若本地安裝過oracle也可使用本地dll文件,如我本地的為:D:\software\workSoft\databaseSoft\OracleSoft\product\11.2.0\dbhome_1\bin\oci.dll

③ 重啟Navicat,點擊連接,選中Oracle

 

④ IP為Oracle服務器的IP地址,服務名為Oracle的實例名,可忽略大小寫

select instance_name from v$instance;

⑤ 用戶名使用剛激活的scott,密碼為tiger,填完以上信息后點擊連接測試

到此Navicat遠程連接Oracle數據庫成功

12.設置Oracle開機啟動

#可能出現的問題oracle ORA-12547: TNS:lost contact,故此處提前設置好權限
cd /db/app/oracle/product/11.2.0/bin/
chmod 6751 oracle
vi /db/app/oracle/product/11.2.0/bin/dbstart
# 查找並設置值 ORACLE_HOME_LISTNER=$ORACLE_HOME vi /db/app/oracle/product/11.2.0/bin/dbshut
# 查找並設置值 ORACLE_HOME_LISTNER=$ORACLE_HOME vi /etc/oratab
# 默認為N,將N改為Y orcl:/db/app/oracle/product/11.2.0:Y
vi /etc/rc.d/init.d/oracle //默認沒有該文件

(1)注意:默認沒有該文件,復制以下內容到打開的白板界面

#! /bin/bash
# oracle: Start/Stop Oracle Database 11g R2
#
# chkconfig: 345 90 10
# description: The Oracle Database is an Object-Relational Database Management System.
#
# processname: oracle
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/db/app/oracle/product/11.2.0
ORACLE_USER=oracle
case "$1" in
'start')
if [ -f $LOCKFILE ]; then
echo $0 already running.
exit 1
fi
echo -n $"Starting Oracle Database:"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"
touch $LOCKFILE
;;
'stop')
if [ ! -f $LOCKFILE ]; then
echo $0 already stopping.
exit 1
fi
echo -n $"Stopping Oracle Database:"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
rm -f $LOCKFILE
;;
'restart')
$0 stop
$0 start
;;
'status')
if [ -f $LOCKFILE ]; then
echo $0 started.
else
echo $0 stopped.
fi
;;
*)
echo "Usage: $0 [start|stop|status]"
exit 1
esac
exit 0

(2)授權

chmod 750 /etc/rc.d/init.d/oracle 

(3)檢查一下腳本能否正確執行 

cd /etc/rc.d/init.d 
./oracle start 
./oracle stop 

(4)加入自動啟動行列,執行如下命令: 

ln -s /etc/rc.d/init.d/oracle /etc/rc2.d/S61oracle 
ln -s /etc/rc.d/init.d/oracle /etc/rc3.d/S61oracle 
ln -s /etc/rc.d/init.d/oracle /etc/rc4.d/S61oracle 
ln -s /etc/rc.d/init.d/oracle /etc/rc0.d/K61oracle 
ln -s /etc/rc.d/init.d/oracle /etc/rc6.d/K61oracle 
chkconfig --level 234 oracle on 
chkconfig --add oracle

注意:最后一行命令需要oracle服務狀態停止時執行有效(./oracle stop)

重啟后即可正常連接 

 

三、重啟若出現 no listener情況,且startup無效

Solution:

1. Check if you have correct ORACLE_HOME, ORACLE_SID and PATH environments.

2. Check if /tmp/.oracle and /var/tmp/.oracle directories exists.

3. Check permissions for those directories for current user who is trying to start listener.

mkdir /var/tmp/.oracle
mkdir /tmp/.oracle
chown -R oracle:oinstall /var/tmp/.oracle /tmp/.oracle
chmod -R 01777 /var/tmp/.oracle /tmp/.oracle

4. Run the listener, problem solved:

lsnrctl start

5. If you still cant start listener grant 777 permissions to oracle on /tmp directory.

chmod -R 777 /tmp /var/tmp

6. ***重要:***若提示root用戶都無權限在/var/tmp 和 /tmp下創建.oracle,則使用chattr命令移除/var/tmp 和 /tmp 目錄的i屬性,重新創建即可

chattr -i /var/tmp //去除i屬性

 四、執行lsnrctl start后若出現以下情況

解決方法:

在/db/app/oracle/product/11.2.0/network/admin/listener.ora里面添加一行

SID_LIST_LISTENER = 
  (SID_LIST = 
    (SID_DESC = 
    (GLOBAL_DBNAME = orcl)
    (SID_NAME = orcl)
  )
)

注:里面的orcl根據你安裝的數據庫實例名確定,我用此法解決了這個報錯。

五、后續問題解決

1.意外斷電或意外中斷服務器導致oracle不能正常連接問題及解決:

問題1:ORA-01081: cannot start already-running ORACLE - shut it down first
解決1:

shutdown immediate
startup mount

問題2:ORA-01102: cannot mount database in EXCLUSIVE mode(重點解決)

 

2.分析原因:

2.1在HA系統中,已經有其他節點啟動了實例,將雙機共享的資源(如磁盤陣列上的裸設備)占用了;

2.2說明Oracle被異常關閉時,有資源沒有被釋放,一般有以下幾種可能,

2.2.1Oracle的共享內存段或信號量沒有被釋放;

2.2.2Oracle的后台進程(如SMON、PMON、DBWn等)沒有被關閉;

2.2.3用於鎖內存的文件lk<sid>和sgadef<sid>.dbf文件沒有被刪除。

3.具體解決辦法:

(1)查$ORACLE_HOME/dbs目錄:

cd $ORACLE_HOME/dbs
ls lk*
lkORCL

果然,lk<sid>文件沒有被刪除。將它刪除掉

rm lk*

(2)再次啟動startup mount時又遇到下面的錯誤,不過別擔心,繼續后面的操作就搞定

 

(3)查看共享內存段

ipcs -map

根據ID號清除共享內存段

ipcrm –m 1409040

我這里操作是沒有成功的,不過執行了下面的操作就ok了!

(4)查看信號量

ipcs -s

清除oracle的信號量

ipcrm -s 360448

再次查詢確認

ipcs -s

------ Semaphore Arrays --------

key  semid  owner  perms   nsems

再查詢共享內存段也ok了!

ipcs -m

(5)如果是Oracle進程沒有關閉,

kill -9 <PID>

(6)執行上面5個步驟即可成功解決該錯誤!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM