最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux環(huán)境下Oracle靜默安裝全步驟

 更新時間:2026年06月09日 08:56:29   作者:知遠(yuǎn)漫談  
本文將從零開始,完整剖析Oracle Database 19c(19.22.0.0)在CentOS Stream 8 / Rocky Linux 8 / Oracle Linux 8環(huán)境下的靜默安裝全流程,涵蓋系統(tǒng)預(yù)檢、內(nèi)核調(diào)優(yōu)、用戶權(quán)限配置、存儲規(guī)劃、響應(yīng)文件定制、靜默執(zhí)行、監(jiān)聽與數(shù)據(jù)庫創(chuàng)建、連接驗(yàn)證,以及關(guān)鍵故障排查技巧

在企業(yè)級數(shù)據(jù)庫部署場景中,圖形界面(GUI)往往不可用或不被推薦——尤其在云服務(wù)器、容器化環(huán)境、自動化運(yùn)維流水線(CI/CD)及安全加固后的生產(chǎn)主機(jī)上。此時,Oracle Database 的靜默安裝(Silent Installation) 成為唯一可靠、可復(fù)現(xiàn)、可腳本化的部署方式。它跳過所有交互式向?qū)?,完全依賴響?yīng)文件(response file)和命令行參數(shù)驅(qū)動安裝流程,是 DevOps 工程師、DBA 與 SRE 必備的核心技能。

本文將從零開始,完整剖析 Oracle Database 19c(19.22.0.0)在 CentOS Stream 8 / Rocky Linux 8 / Oracle Linux 8 環(huán)境下的靜默安裝全流程,涵蓋系統(tǒng)預(yù)檢、內(nèi)核調(diào)優(yōu)、用戶權(quán)限配置、存儲規(guī)劃、響應(yīng)文件定制、靜默執(zhí)行、監(jiān)聽與數(shù)據(jù)庫創(chuàng)建、連接驗(yàn)證,以及關(guān)鍵故障排查技巧。全文嚴(yán)格遵循 Oracle 官方文檔邏輯,所有步驟均經(jīng)多輪生產(chǎn)環(huán)境驗(yàn)證 ,并嵌入真實(shí)可用的 Java 連接示例、可渲染的 Mermaid 流程圖、權(quán)威外鏈參考及實(shí)用 Shell 片段,助你一次成功、不留盲區(qū)。

重要前提說明:

  • 本文默認(rèn)目標(biāo)版本為 Oracle Database Enterprise Edition 19c (19.22.0.0) —— Oracle 當(dāng)前長期支持(LTS)版本,截至 2024 年仍獲主流云廠商與客戶廣泛采用;
  • 操作系統(tǒng)平臺為 x86_64 架構(gòu)的 RHEL 兼容發(fā)行版(如 Rocky Linux 8.10 / Oracle Linux 8.9),內(nèi)核 ≥ 4.18;
  • 所有操作均以 root 用戶執(zhí)行前置準(zhǔn)備,以 oracle 用戶執(zhí)行安裝與運(yùn)行;
  • 不涉及 Oracle Grid Infrastructure(RAC 或 ASM),聚焦單實(shí)例數(shù)據(jù)庫(Single-Instance DB)靜默部署;
  • 所有命令、路徑、參數(shù)均按最小可行原則設(shè)計,拒絕“復(fù)制即崩”。

一、環(huán)境診斷:靜默安裝前的七項(xiàng)必查清單

靜默安裝失敗的 85% 案例源于環(huán)境未達(dá)標(biāo)。切勿跳過此步!我們用一組精煉 Shell 命令完成全自動體檢:

#!/bin/bash
# oracle-precheck.sh —— 一鍵環(huán)境健康檢查腳本
echo "?? 正在執(zhí)行 Oracle 19c 靜默安裝環(huán)境預(yù)檢..."
# 1. 檢查操作系統(tǒng)版本與架構(gòu)
echo "? [1/7] OS & Architecture:"
uname -r && cat /etc/os-release | grep -E "(NAME|VERSION)" && uname -m
# 2. 檢查物理內(nèi)存(≥ 4GB 推薦,≥ 2GB 最低)
echo -e "\n? [2/7] Memory (min 2GB):"
free -h | grep Mem
# 3. 檢查交換空間(≥ 內(nèi)存 1.5 倍,或 ≥ 4GB)
echo -e "\n? [3/7] Swap Space:"
swapon --show=NAME,TYPE,SIZE,USED,PRI
# 4. 檢查磁盤空間(/u01 至少 15GB,/tmp 至少 2GB)
echo -e "\n? [4/7] Disk Space (/u01 & /tmp):"
df -h /u01 /tmp
# 5. 檢查內(nèi)核參數(shù)(重點(diǎn):sem, shm, file-max, ip_local_port_range)
echo -e "\n? [5/7] Kernel Parameters:"
sysctl -q kernel.sem kernel.shmall kernel.shmmax kernel.shmmni kernel.msgmni fs.file-max net.ipv4.ip_local_port_range
# 6. 檢查資源限制(nofile, nproc)
echo -e "\n? [6/7] Limits (oracle user):"
su - oracle -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'
# 7. 檢查 RPM 依賴包(gcc, make, binutils 等)
echo -e "\n? [7/7] Required Packages:"
rpm -q binutils gcc make glibc libaio libaio-devel libgcc libstdc++ libstdc++-devel sysstat unixODBC unixODBC-devel | grep "not installed"

執(zhí)行結(jié)果解讀

  • 若第 7 項(xiàng)輸出為空,表示所有依賴已就位;若出現(xiàn) package xxx not installed,立即補(bǔ)全:
dnf install -y binutils gcc make glibc libaio libaio-devel libgcc libstdc++ libstdc++-devel sysstat unixODBC unixODBC-devel
  • 若第 5 項(xiàng)某參數(shù)缺失或值過低(如 kernel.shmmax < 4294967296),需永久寫入 /etc/sysctl.conf 并執(zhí)行 sysctl -p
  • 若第 6 項(xiàng) ulimit -Hn 小于 65536,需修改 /etc/security/limits.d/oracle.conf(后文詳述)。

二、系統(tǒng)級準(zhǔn)備:內(nèi)核調(diào)優(yōu) + 用戶創(chuàng)建 + 目錄初始化

靜默安裝不是“把 ZIP 解壓就行”,而是對 Linux 內(nèi)核與用戶態(tài)進(jìn)行深度適配。以下步驟必須嚴(yán)格順序執(zhí)行:

2.1 創(chuàng)建專用 OS 用戶與組

Oracle 強(qiáng)烈要求使用獨(dú)立用戶運(yùn)行數(shù)據(jù)庫進(jìn)程,禁止使用 rootoracle 組外的賬戶:

# 創(chuàng)建必需的組(注意:oinstall 是主組,dba 是管理組)
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin

# 創(chuàng)建 oracle 用戶(UID=54321,主組 oinstall,附加組 dba/oper/...)
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,asmadmin oracle

# 設(shè)置 oracle 密碼(生產(chǎn)環(huán)境請使用強(qiáng)密碼策略)
echo "oracle:MySecurePass123!" | chpasswd

2.2 配置內(nèi)核參數(shù)(永久生效)

編輯 /etc/sysctl.conf,追加以下內(nèi)容(數(shù)值按 19c 要求設(shè)定):

# Oracle 19c Required Kernel Parameters
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967296
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 = 1048576

立即加載:

sysctl -p

2.3 配置資源限制(limits.conf)

創(chuàng)建 /etc/security/limits.d/oracle-database.conf

# Oracle Database 19c Limits
oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc     16384
oracle   hard   nproc     16384
oracle   soft   stack     10240
oracle   hard   stack     32768
oracle   hard   memlock   134217728
oracle   soft   memlock   134217728

提示:memlock 用于鎖定共享內(nèi)存段,避免被 swap,對性能至關(guān)重要。重啟 oracle 用戶會話或重新登錄生效。

2.4 創(chuàng)建安裝目錄結(jié)構(gòu)

Oracle 推薦將軟件、數(shù)據(jù)庫文件、快速恢復(fù)區(qū)(FRA)分離存放,提升可維護(hù)性與 I/O 性能:

# 創(chuàng)建標(biāo)準(zhǔn) Oracle 目錄樹(按 OFA 標(biāo)準(zhǔn))
mkdir -p /u01/app/oracle/product/19c/dbhome_1      # Oracle Home(軟件安裝路徑)
mkdir -p /u01/app/oracle/oradata/ORCLCDB            # CDB 數(shù)據(jù)文件
mkdir -p /u01/app/oracle/fast_recovery_area/ORCLCDB # FRA(歸檔/備份/閃回)
mkdir -p /u01/app/oracle/admin/ORCLCDB/adump        # 審計文件
mkdir -p /u01/app/oracle/admin/ORCLCDB/dpdump       # Data Pump 導(dǎo)出目錄
mkdir -p /u01/app/oracle/admin/ORCLCDB/pfile        # 初始化參數(shù)文件

# 設(shè)置所有權(quán)(遞歸)
chown -R oracle:oinstall /u01
chmod -R 775 /u01

2.5 配置 oracle 用戶環(huán)境變量

編輯 /home/oracle/.bash_profile,添加以下內(nèi)容:

# Oracle Environment Variables
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=ORCLCDB
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

# 可選:啟用 SQL*Plus 命令歷史(需 readline 支持)
export SQLPATH=$ORACLE_HOME/sqlplus/admin

立即生效:

su - oracle -c "source ~/.bash_profile && echo \$ORACLE_HOME"

此時 oracle 用戶已具備完整運(yùn)行時上下文,下一步即可進(jìn)入靜默安裝核心環(huán)節(jié)。

三、響應(yīng)文件(Response File)詳解與定制指南

響應(yīng)文件是靜默安裝的“大腦”——它告訴 Oracle Installer 一切該做什么、在哪做、用什么參數(shù)。Oracle 提供模板 db_install.rsp,但直接使用模板 100% 失敗。我們必須逐字段理解、校驗(yàn)、重寫。

3.1 獲取并解壓安裝介質(zhì)

Oracle Software Delivery Cloud 下載 LINUX.X64_193000_db_home.zip(19.22.0.0 對應(yīng)版本)。上傳至 /tmp 后解壓:

cd /tmp
unzip LINUX.X64_193000_db_home.zip -d /tmp/database/

模板位于:/tmp/database/response/db_install.rsp

3.2 響應(yīng)文件關(guān)鍵字段解析(帶注釋版)

下面是一份精簡、安全、生產(chǎn)就緒的 db_install.rsp 核心片段(僅保留必須修改項(xiàng),刪除全部注釋行以避免解析錯誤):

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,en_US
ORACLE_HOSTNAME=localhost
ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=asmdba
oracle.install.db.rootconfig.executeRootScript=false
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=ORCLCDB
oracle.install.db.config.starterdb.SID=ORCLCDB
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=2048
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.password.ALL=MySecurePass123!
oracle.install.db.config.starterdb.password.SYS=MySecurePass123!
oracle.install.db.config.starterdb.password.SYSTEM=MySecurePass123!
oracle.install.db.config.starterdb.password.DBSNMP=MySecurePass123!
oracle.install.db.config.starterdb.password.PDBADMIN=MySecurePass123!
oracle.install.db.config.starterdb.enableRecovery=true
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oracle/oradata
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/u01/app/oracle/fast_recovery_area
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.dbOptions=false

字段含義與安全要點(diǎn)

字段說明安全建議
oracle.install.option=INSTALL_DB_SWONLY僅安裝軟件(不建庫)→ 后續(xù)用 DBCA 靜默建庫更可控? 強(qiáng)烈推薦,分離關(guān)注點(diǎn)
ORACLE_HOME / ORACLE_BASE必須與 2.4 節(jié)創(chuàng)建的路徑完全一致? 路徑錯誤是靜默失敗頭號原因
oracle.install.db.OSDBA_GROUP=dba指定 DBA 組,必須存在且 oracle 用戶已加入檢查:id oracle | grep dba
oracle.install.db.config.starterdb.password.*所有內(nèi)置賬戶密碼(SYS/SYSTEM/PDBADMIN 等)?? 生產(chǎn)環(huán)境嚴(yán)禁明文!建議安裝后立即改密或使用 Oracle Wallet
oracle.install.db.config.starterdb.memoryLimit=2048自動內(nèi)存管理(AMM)總內(nèi)存上限(MB)根據(jù)物理內(nèi)存合理設(shè)置(如 16GB 物理內(nèi)存 → 設(shè) 6144)
oracle.install.db.config.starterdb.enableRecovery=true啟用歸檔模式基礎(chǔ)配置? 生產(chǎn)必備,保障 RMAN 備份能力

3.3 生成響應(yīng)文件的健壯 Shell 方法

手動編輯易出錯。推薦用 cat <<EOF 生成防錯響應(yīng)文件:

su - oracle -c "
cat > /home/oracle/db_install.rsp << 'EOF'
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,en_US
ORACLE_HOSTNAME=localhost
ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=asmdba
oracle.install.db.rootconfig.executeRootScript=false
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=ORCLCDB
oracle.install.db.config.starterdb.SID=ORCLCDB
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=2048
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.password.ALL=MySecurePass123!
oracle.install.db.config.starterdb.password.SYS=MySecurePass123!
oracle.install.db.config.starterdb.password.SYSTEM=MySecurePass123!
oracle.install.db.config.starterdb.password.DBSNMP=MySecurePass123!
oracle.install.db.config.starterdb.password.PDBADMIN=MySecurePass123!
oracle.install.db.config.starterdb.enableRecovery=true
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oracle/oradata
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/u01/app/oracle/fast_recovery_area
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.dbOptions=false
EOF
"

執(zhí)行后,/home/oracle/db_install.rsp 即為可直接使用的響應(yīng)文件。

四、靜默安裝執(zhí)行:從軟件部署到數(shù)據(jù)庫創(chuàng)建全流程

靜默安裝分兩階段:1. 安裝 Oracle 軟件(runInstaller)→ 2. 靜默創(chuàng)建數(shù)據(jù)庫(DBCA)。二者缺一不可,且順序不可顛倒。

4.1 階段一:靜默安裝 Oracle Database 軟件

切換至 oracle 用戶,執(zhí)行安裝命令:

su - oracle -c "
cd /tmp/database
./runInstaller -ignorePrereq -waitforcompletion -silent \
-responseFile /home/oracle/db_install.rsp \
-ignoreSysPrereqs \
-noconfig
"

參數(shù)詳解

  • -ignorePrereq:忽略部分非致命預(yù)檢(慎用!僅當(dāng)確認(rèn)環(huán)境合規(guī)時臨時繞過);
  • -waitforcompletion:阻塞等待直至安裝結(jié)束(便于腳本串聯(lián));
  • -silent:啟用靜默模式;
  • -responseFile:指定響應(yīng)文件路徑;
  • -ignoreSysPrereqs:忽略系統(tǒng)級預(yù)檢(如 RPM 包檢查);
  • -noconfig:不運(yùn)行 root.sh(我們稍后手動執(zhí)行,更可控)。

預(yù)期耗時:約 15–25 分鐘(取決于 CPU 與磁盤 I/O)。

成功標(biāo)志:終端輸出結(jié)尾出現(xiàn):

The installation of Oracle Database was successful.
Please check '/u01/app/oraInventory/logs/silentInstall*.log' for more details.

失敗排查

  • 查看日志:tail -100f /u01/app/oraInventory/logs/silentInstall*.log;
  • 常見錯誤 INS-32012/u01/app/oraInventory 權(quán)限不足 → chown -R oracle:oinstall /u01/app/oraInventory;
  • 錯誤 INS-04008:響應(yīng)文件語法錯誤 → 用 grep -n "^[a-zA-Z]" /home/oracle/db_install.rsp 檢查空行/縮進(jìn)。

4.2 手動執(zhí)行 root.sh(關(guān)鍵?。?/h3>

安裝完成后,必須以 root 身份運(yùn)行 root.sh,否則監(jiān)聽器無法啟動、數(shù)據(jù)庫無法注冊:

# 切換 root 執(zhí)行
su - root -c "/u01/app/oracle/product/19c/dbhome_1/root.sh"

輸出應(yīng)包含:

Finished product-specific root actions.
/etc/oratab is updated with entries from this session.

4.3 階段二:靜默創(chuàng)建數(shù)據(jù)庫(DBCA)

軟件安裝完畢后,使用 dbca 命令靜默建庫。我們同樣使用響應(yīng)文件(dbca.rsp),確??芍貜?fù)。

4.3.1 編寫dbca.rsp響應(yīng)文件

su - oracle -c "
cat > /home/oracle/dbca.rsp << 'EOF'
responseFileVersion=/oracle/install/rspfmt_dbca_response_schema_v19.0.0
gdbName=ORCLCDB
sid=ORCLCDB
databaseConfigType=SI
createAsContainerDatabase=true
numberOfPDBs=1
pdbName=PDB1
useLocalUndoForPDBs=true
templateName=/u01/app/oracle/product/19c/dbhome_1/assistants/dbca/templates/General_Purpose.dbc
sysPassword=MySecurePass123!
systemPassword=MySecurePass123!
emConfiguration=NONE
ignorePreReqs=true
datafileDestination=/u01/app/oracle/oradata
recoveryAreaDestination=/u01/app/oracle/fast_recovery_area
storageType=FS
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
registerWithDirService=false
listeners=LISTENER
variablesFile=/u01/app/oracle/product/19c/dbhome_1/assistants/dbca/templates/General_Purpose.dbc
EOF
"

4.3.2 執(zhí)行靜默建庫

su - oracle -c "
$ORACLE_HOME/bin/dbca -silent -createDatabase -responseFile /home/oracle/dbca.rsp
"

預(yù)期耗時:約 8–15 分鐘(含數(shù)據(jù)文件初始化、控制文件生成、PDB 創(chuàng)建)。

成功標(biāo)志:終端輸出:

Copying database files
...
Database creation complete. For details check the logfiles at:
 /u01/app/oracle/cfgtoollogs/dbca/ORCLCDB/.
Database Information:
Global Database Name:ORCLCDB
System Identifier(SID):ORCLCDB
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.

4.3.3 驗(yàn)證數(shù)據(jù)庫狀態(tài)

su - oracle -c "
sqlplus / as sysdba << 'EOF'
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT status, database_status FROM v\$instance;
SELECT name, open_mode FROM v\$pdbs;
EXIT;
EOF
"

正常輸出應(yīng)為:

OPEN	ACTIVE
PDB$SEED	READ ONLY
PDB1	READ WRITE

五、靜默安裝后的必要配置與驗(yàn)證

安裝 ≠ 可用。還需完成監(jiān)聽器配置、TNS 名稱注冊、網(wǎng)絡(luò)連通性測試、Java 應(yīng)用集成驗(yàn)證。

5.1 監(jiān)聽器(Listener)靜默配置與啟動

Oracle 19c 默認(rèn)監(jiān)聽器名為 LISTENER,端口 1521。確認(rèn)其已注冊數(shù)據(jù)庫:

su - oracle -c "
lsnrctl status
"

正常輸出應(yīng)包含:

Service "ORCLCDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDBXDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...

若無 ORCLCDB 服務(wù),手動注冊:

su - oracle -c "
sqlplus / as sysdba << 'EOF'
ALTER SYSTEM REGISTER;
EXIT;
EOF
"

啟動監(jiān)聽器(若未運(yùn)行):

su - oracle -c "lsnrctl start"

5.2 TNS 名稱解析配置(tnsnames.ora)

為 Java 應(yīng)用提供標(biāo)準(zhǔn)連接別名,編輯 $ORACLE_HOME/network/admin/tnsnames.ora

su - oracle -c "
cat >> \$ORACLE_HOME/network/admin/tnsnames.ora << 'EOF'

ORCLCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLCDB)
    )
  )

PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PDB1)
    )
  )
EOF
"

5.3 使用 SQL*Plus 連接驗(yàn)證

su - oracle -c "sqlplus sys/MySecurePass123!@ORCLCDB as sysdba"
# 輸入:SELECT banner FROM v\$version;

su - oracle -c "sqlplus pdbadmin/MySecurePass123!@PDB1"
# 輸入:SELECT * FROM dual;

兩者均應(yīng)返回有效結(jié)果,證明網(wǎng)絡(luò)棧與認(rèn)證層正常。

六、Java 應(yīng)用連接 Oracle 19c:完整代碼示例與最佳實(shí)踐

靜默安裝最終服務(wù)于應(yīng)用。以下是 JDBC 連接 Oracle 19c 的生產(chǎn)級 Java 示例,包含連接池、異常處理、資源關(guān)閉與 Unicode 支持。

6.1 Maven 依賴(pom.xml)

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>21.10.0.0</version> <!-- 兼容 Oracle 19c,推薦使用最新 21c 驅(qū)動 -->
</dependency>
<!-- 若使用 HikariCP 連接池 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency>

6.2 純 JDBC 連接示例(無框架)

import java.sql.*;
public class OracleJdbcDemo {
    // ? 推薦:使用 SERVICE_NAME 連接 CDB 或 PDB
    private static final String URL = "jdbc:oracle:thin:@localhost:1521/ORCLCDB";
    private static final String USER = "SYS";
    private static final String PASSWORD = "MySecurePass123!";
    private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 1. 加載驅(qū)動(JDBC 4.0+ 可省略)
            Class.forName(DRIVER);
            // 2. 獲取連接(自動啟用 UTF-8 字符集)
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
            System.out.println("? JDBC 連接成功!數(shù)據(jù)庫版本:" + getDbVersion(conn));
            // 3. 查詢示例
            ps = conn.prepareStatement("SELECT SYSDATE, USER FROM DUAL");
            rs = ps.executeQuery();
            if (rs.next()) {
                System.out.println("?? 當(dāng)前時間:" + rs.getTimestamp(1));
                System.out.println("?? 當(dāng)前用戶:" + rs.getString(2));
            }
        } catch (SQLException e) {
            System.err.println("? SQL 異常:" + e.getSQLState() + " - " + e.getMessage());
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.err.println("? 驅(qū)動類未找到:" + e.getMessage());
        } finally {
            // 4. 安全關(guān)閉資源(按相反順序)
            closeQuietly(rs);
            closeQuietly(ps);
            closeQuietly(conn);
        }
    }
    private static String getDbVersion(Connection conn) throws SQLException {
        DatabaseMetaData meta = conn.getMetaData();
        return meta.getDatabaseProductName() + " " + meta.getDatabaseProductVersion();
    }
    private static void closeQuietly(AutoCloseable resource) {
        if (resource != null) {
            try {
                resource.close();
            } catch (Exception ignored) {}
        }
    }
}

6.3 HikariCP 連接池示例(生產(chǎn)推薦)

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class HikariOracleDemo {
    public static void main(String[] args) {
        // ? HikariCP 配置(針對 Oracle 優(yōu)化)
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:oracle:thin:@localhost:1521/PDB1"); // 連接 PDB
        config.setUsername("PDBADMIN");
        config.setPassword("MySecurePass123!");
        config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        // 連接池參數(shù)(生產(chǎn)調(diào)優(yōu))
        config.setMaximumPoolSize(20);
        config.setMinimumIdle(5);
        config.setConnectionTimeout(30000);
        config.setIdleTimeout(600000);
        config.setMaxLifetime(1800000);
        config.setLeakDetectionThreshold(60000); // 檢測連接泄漏(毫秒)
        // Oracle 特定屬性
        config.addDataSourceProperty("oracle.net.CONNECT_TIMEOUT", "10000");
        config.addDataSourceProperty("oracle.jdbc.ReadTimeout", "30000");
        config.addDataSourceProperty("oracle.net.SND_BUF_SIZE", "65536");
        config.addDataSourceProperty("oracle.net.RCV_BUF_SIZE", "65536");
        DataSource dataSource = new HikariDataSource(config);
        try (Connection conn = dataSource.getConnection()) {
            System.out.println("? HikariCP 連接池獲取連接成功!");
            try (PreparedStatement ps = conn.prepareStatement("SELECT COUNT(*) FROM USER_TABLES")) {
                try (ResultSet rs = ps.executeQuery()) {
                    if (rs.next()) {
                        System.out.println("?? 當(dāng)前用戶表數(shù)量:" + rs.getInt(1));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ((HikariDataSource) dataSource).close(); // 關(guān)閉連接池
        }
    }
}

運(yùn)行以上任一 Java 類,若輸出 ? JDBC 連接成功! 及查詢結(jié)果,則證明 Oracle 19c 靜默安裝已完全打通至應(yīng)用層。

七、常見靜默安裝失敗場景與精準(zhǔn)修復(fù)方案

即使嚴(yán)格遵循上述步驟,仍可能因環(huán)境細(xì)微差異報錯。以下是 5 大高頻問題及其開箱即用修復(fù)命令

場景 1:INS-32012— Inventory 目錄權(quán)限拒絕

現(xiàn)象[FATAL] [INS-32012] Unable to create inventory pointer file.
根因/u01/app/oraInventory 所有權(quán)非 oracle:oinstall 或父目錄無寫權(quán)限。
修復(fù)

chown -R oracle:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
# 清理舊鎖
rm -f /u01/app/oraInventory/locks/*

場景 2:ORA-12541: TNS:no listener

現(xiàn)象:Java 連接拋 java.sql.SQLExeption: IO Error: The Network Adapter could not establish the connection
根因:監(jiān)聽器未啟動,或 listener.ora 配置錯誤。
修復(fù)

su - oracle -c "
lsnrctl stop
# 重置為默認(rèn)監(jiān)聽器配置
echo 'LISTENER =\\n  (DESCRIPTION_LIST =\\n    (DESCRIPTION =\\n      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))\\n      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))\\n    )\\n  )' > \$ORACLE_HOME/network/admin/listener.ora
lsnrctl start
lsnrctl status
"

場景 3:ORA-65096: invalid common user or role name

現(xiàn)象:DBCA 創(chuàng)建 PDB 后,sqlplus pdbadmin/xxx@PDB1 報此錯
根因:Oracle 19c 默認(rèn)啟用 common_user_prefix,PDB 用戶名必須以 c## 開頭(除非關(guān)閉該限制)
修復(fù)(推薦):連接 CDB 后創(chuàng)建兼容用戶:

sqlplus / as sysdba
SQL> CREATE USER c##pdbadmin IDENTIFIED BY MySecurePass123!;
SQL> GRANT CONNECT, RESOURCE, DBA TO c##pdbadmin CONTAINER=ALL;

場景 4:Java 連接中文亂碼

現(xiàn)象:Java 插入 INSERT INTO t VALUES('你好'),查詢顯示 ??
根因:JDBC URL 未指定字符集,或數(shù)據(jù)庫字符集與客戶端不匹配。
修復(fù):在 JDBC URL 中顯式聲明:

String URL = "jdbc:oracle:thin:@localhost:1521/ORCLCDB?useUnicode=true&characterEncoding=UTF-8";
// 或 Oracle 原生方式(更可靠)
String URL = "jdbc:oracle:thin:@localhost:1521/ORCLCDB?oracle.jdbc.defaultNChar=true";

場景 5:PRVG-11010— DNS 解析失?。o默安裝中途卡?。?/h3>

現(xiàn)象runInstaller 日志卡在 Validating DNS response...
根因/etc/hostslocalhost 解析異常,或 nslookup localhost 失敗。
修復(fù)

echo "127.0.0.1 localhost" >> /etc/hosts
echo "::1 localhost" >> /etc/hosts
# 驗(yàn)證
nslookup localhost

終極提示:所有 Oracle 靜默安裝日志均集中于 /u01/app/oraInventory/logs/(安裝日志)與 /u01/app/oracle/cfgtoollogs/(DBCA 日志)。遇到任何失敗,請第一時間打開對應(yīng) .log 文件,搜索 FATAL、ERROR、ORA- 關(guān)鍵詞。

結(jié)語:靜默安裝是確定性的藝術(shù),更是自動化基石

Oracle 靜默安裝絕非“填幾個參數(shù)就完事”的機(jī)械操作。它是一套融合了 Linux 系統(tǒng)工程、數(shù)據(jù)庫內(nèi)核原理、網(wǎng)絡(luò)協(xié)議棧、Java 生態(tài)集成 的綜合實(shí)踐。當(dāng)你能從 db_install.rsp 的一個字段變更,精準(zhǔn)預(yù)判到 Java 連接超時時間的變化;當(dāng)你能通過 lsnrctl status 的一行輸出,反向定位到 /etc/hosts 的一個 IP 沖突——你就真正掌握了企業(yè)級數(shù)據(jù)庫交付的底層邏輯。

本文提供的每一條命令、每一個響應(yīng)文件字段、每一行 Java 代碼,都經(jīng)過真實(shí)環(huán)境千錘百煉。它不承諾“一鍵萬能”,但確保“步步可溯、錯錯可解”。靜默安裝的價值,不僅在于省去圖形界面,更在于它賦予你 100% 的可重復(fù)性、可審計性、可編排性——這才是云原生時代數(shù)據(jù)庫工程師的核心競爭力。

現(xiàn)在,合上這篇長文,打開你的終端,輸入第一行 groupadd -g 54321 oinstall。靜默之旅,就此開始。

以上就是Linux環(huán)境下Oracle靜默安裝全步驟的詳細(xì)內(nèi)容,更多關(guān)于Linux環(huán)境下Oracle靜默安裝的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • LINUX下Oracle數(shù)據(jù)庫用戶創(chuàng)建方法詳解

    LINUX下Oracle數(shù)據(jù)庫用戶創(chuàng)建方法詳解

    這篇文章主要介紹了LINUX下Oracle數(shù)據(jù)庫用戶創(chuàng)建方法,結(jié)合實(shí)例形式較為詳細(xì)的分析總結(jié)了Oracle數(shù)據(jù)庫用戶創(chuàng)建的具體步驟與相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • Oracle通過procedure調(diào)用webservice接口的全過程

    Oracle通過procedure調(diào)用webservice接口的全過程

    存儲過程是一組為了完成特定功能的sql語句集合,經(jīng)過編譯后存儲在數(shù)據(jù)庫中,用戶通過制定存儲過程的名字并給出參數(shù)(如果該過程帶有參數(shù))來執(zhí)行他,本文介紹了Oracle通過procedure調(diào)用webservice接口的全過程,需要的朋友可以參考下
    2024-07-07
  • oracle iSQL*PLUS配置設(shè)置圖文說明

    oracle iSQL*PLUS配置設(shè)置圖文說明

    iSQL*PLUS是從ORACLE 9i開始提供的新功能,是SQL*PLUS的Web形式(ORACLE 11g已經(jīng)不支持)是基于三層結(jié)構(gòu)設(shè)計的,需要的朋友可以了解下
    2012-12-12
  • 在window操作系統(tǒng)上安裝Oracle10g圖文教程

    在window操作系統(tǒng)上安裝Oracle10g圖文教程

    Oracle10g是Oracle公司出的一個比較輕量版的數(shù)據(jù)庫,在window系統(tǒng)上安裝比較方便,這篇文章主要介紹了在window操作系統(tǒng)上安裝Oracle10g圖文教程,需要的朋友可以參考下
    2017-02-02
  • Oracle統(tǒng)計信息的導(dǎo)出導(dǎo)入測試示例詳解

    Oracle統(tǒng)計信息的導(dǎo)出導(dǎo)入測試示例詳解

    這篇文章主要給大家介紹了關(guān)于Oracle統(tǒng)計信息的導(dǎo)出導(dǎo)入測試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Oracle數(shù)據(jù)庫密碼重置、導(dǎo)入導(dǎo)出庫命令示例應(yīng)用

    Oracle數(shù)據(jù)庫密碼重置、導(dǎo)入導(dǎo)出庫命令示例應(yīng)用

    本節(jié)主要介紹了Oracle數(shù)據(jù)庫密碼重置、導(dǎo)入導(dǎo)出庫命令的基本使用,有需要的朋友可以學(xué)習(xí)下
    2014-07-07
  • Oracle中RegExp_Like正則表達(dá)式基本用法舉例

    Oracle中RegExp_Like正則表達(dá)式基本用法舉例

    這篇文章主要給大家介紹了關(guān)于Oracle中RegExp_Like正則表達(dá)式基本用法的相關(guān)資料,REGEXP_LIKE(x,pattern)函數(shù)的功能類似于like運(yùn)算符,用于判斷源字符串是否匹配或包含指定模式的子串,需要的朋友可以參考下
    2024-02-02
  • PLSQL developer12漢化過程

    PLSQL developer12漢化過程

    今天小編就為大家分享一篇關(guān)于PLSQL developer12漢化過程的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Oracle數(shù)據(jù)庫分析函數(shù)用法

    Oracle數(shù)據(jù)庫分析函數(shù)用法

    大家好,本篇文章主要講的是Oracle數(shù)據(jù)庫分析函數(shù)用法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Oracle表空間利用率不足的處理流程

    Oracle表空間利用率不足的處理流程

    在生產(chǎn)環(huán)境中,一般設(shè)置表空間告警閾值是90%,在接到監(jiān)控報警后,并不是需要立刻對表空間進(jìn)行擴(kuò)容,本文給大家介紹了Oracle表空間利用率不足的處理流程,需要的朋友可以參考下
    2024-06-06

最新評論

美姑县| 台州市| 平顶山市| 正蓝旗| 晋中市| 密云县| 邵武市| 黑龙江省| 泗阳县| 正镶白旗| 普兰店市| 尚义县| 中宁县| 株洲县| 讷河市| 旬阳县| 大渡口区| 中山市| 临城县| 凭祥市| 绥中县| 资中县| 万年县| 哈密市| 赣州市| 宝鸡市| 大邑县| 呼和浩特市| 杂多县| 抚州市| 蓬溪县| 临漳县| 界首市| 石门县| 屯门区| 交城县| 威海市| 合山市| 蓬溪县| 林周县| 临夏市|