在Linux系統(tǒng)上安裝部署Oracle?Database保姆級(jí)教程
一、前言
在開(kāi)發(fā)或測(cè)試環(huán)境中,我們經(jīng)常需要搭建一套獨(dú)立的 Oracle 數(shù)據(jù)庫(kù)環(huán)境。
雖然現(xiàn)在很多人使用 Docker 鏡像或云數(shù)據(jù)庫(kù),但有時(shí)候(例如在企業(yè)服務(wù)器上),
仍然需要 手動(dòng)在 Linux 上安裝原生 Oracle 數(shù)據(jù)庫(kù)。
本教程將手把手帶你完成從系統(tǒng)準(zhǔn)備到數(shù)據(jù)庫(kù)創(chuàng)建的全過(guò)程,完全原生安裝。
演示環(huán)境如下:
| 項(xiàng)目 | 配置 |
|---|---|
| 操作系統(tǒng) | Oracle Linux 8 / CentOS 7 |
| 數(shù)據(jù)庫(kù)版本 | Oracle Database 19c |
| 內(nèi)存要求 | ≥ 2GB |
| 磁盤空間 | ≥ 20GB |
| 安裝模式 | 靜默安裝(無(wú)圖形界面) |
二、系統(tǒng)準(zhǔn)備
安裝依賴包
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat elfutils-libelf-devel unixODBC unixODBC-devel smartmontools net-tools unzip
原因解釋:
libaio、glibc、libstdc++是 Oracle 數(shù)據(jù)文件 I/O 所需的基礎(chǔ)庫(kù);ksh(Korn shell)是 Oracle 安裝程序默認(rèn)使用的 shell;elfutils-libelf-devel是內(nèi)核符號(hào)和調(diào)試信息處理庫(kù);sysstat用于性能監(jiān)控;net-tools提供ifconfig等命令;unzip用于解壓 Oracle 安裝包。
設(shè)置內(nèi)核參數(shù)
編輯 /etc/sysctl.conf:
fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500

使配置生效:
sysctl -p

創(chuàng)建 oracle 用戶和目錄
groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle echo oracle | passwd --stdin oracle mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oracle/oradata mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01 chmod -R 775 /u01

配置資源限制
編輯 /etc/security/limits.d/oracle-database.conf:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768

三、設(shè)置環(huán)境變量
切換到 oracle 用戶:
su - oracle
配置環(huán)境變量(編輯 ~/.bash_profile):
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1 export ORACLE_SID=orcl export PATH=$PATH:$ORACLE_HOME/bin

使其生效執(zhí)行:
source ~/.bash_profile
四、上傳并解壓 Oracle 安裝包
從官網(wǎng)下載zip安裝包
https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html
這個(gè)網(wǎng)址打開(kāi)可以直接下載zip文件,只不過(guò)需要注冊(cè)oracle賬號(hào),然后就可以下載;
將下載的zip文件上傳至服務(wù)器:
unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/dbhome_1 chown -R oracle:oinstall /u01
五、以靜默模式安裝
切換到 oracle 用戶:
su - oracle cd $ORACLE_HOME
執(zhí)行安裝:
./runInstaller -silent \ -responseFile $ORACLE_HOME/install/response/db_install.rsp \ oracle.install.option=INSTALL_DB_SWONLY \ UNIX_GROUP_NAME=oinstall \ INVENTORY_LOCATION=/u01/app/oraInventory \ ORACLE_HOME=$ORACLE_HOME \ ORACLE_BASE=$ORACLE_BASE \ oracle.install.db.InstallEdition=EE \ oracle.install.db.OSDBA_GROUP=dba \ oracle.install.db.OSOPER_GROUP=dba \ oracle.install.db.OSBACKUPDBA_GROUP=dba \ oracle.install.db.OSDGDBA_GROUP=dba \ oracle.install.db.OSKMDBA_GROUP=dba \ oracle.install.db.OSRACDBA_GROUP=dba \ DECLINE_SECURITY_UPDATES=true
驗(yàn)證修改成功
如果配置正確,執(zhí)行安裝命令后應(yīng)看到:
Launching Oracle Database Setup Wizard... [WARNING] [INS-13014] Target environment does not meet some optional requirements. ... The installation of Oracle Database was successful.
接著執(zhí)行安裝結(jié)束提示的兩個(gè)腳本(以 root 運(yùn)行):
/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.3.0/dbhome_1/root.sh



六、創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例(靜默方式)
進(jìn)入oracle用戶模式執(zhí)行:
dbca -silent -createDatabase \ -gdbname orcl \ -sid orcl \ -responseFile NO_VALUE \ -templateName General_Purpose.dbc \ -sysPassword oracle \ -systemPassword oracle \ -createAsContainerDatabase false \ -databaseType MULTIPURPOSE \ -memoryMgmtType auto_sga \ -storageType FS \ -datafileDestination '/u01/app/oracle/oradata' \ -redoLogFileSize 50 \ -emConfiguration NONE

七、驗(yàn)證安裝
登錄 SQL*Plus:
sqlplus / as sysdba
檢查數(shù)據(jù)庫(kù)狀態(tài):
SELECT instance_name, status FROM v$instance;

八、開(kāi)機(jī)自啟(可選)
編輯 /etc/oratab,把最后一行改為:
orcl:/u01/app/oracle/product/19.3.0/dbhome_1:Y

Oracle 數(shù)據(jù)庫(kù) Demo
1.登錄數(shù)據(jù)庫(kù)
首先,確保你以 oracle 用戶登錄,并使用 sqlplus 連接到數(shù)據(jù)庫(kù)實(shí)例:
su - oracle sqlplus / as sysdba
2.創(chuàng)建表
創(chuàng)建一個(gè)員工表:
CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50), hire_date DATE, salary NUMBER );
在 SQL*Plus 中,執(zhí)行 DESC 命令查看表的結(jié)構(gòu)時(shí),默認(rèn)情況下輸出結(jié)果并不像在圖形界面中那樣顯示成表格樣式,而是以文本形式呈現(xiàn)。

3.插入數(shù)據(jù)
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (1, 'Alice', 'Johnson', TO_DATE('2023-01-01', 'YYYY-MM-DD'), 8000);
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (2, 'Bob', 'Smith', TO_DATE('2023-03-15', 'YYYY-MM-DD'), 9500);
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (3, 'Charlie', 'Brown', TO_DATE('2023-07-10', 'YYYY-MM-DD'), 7500);
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (4, 'David', 'Wilson', TO_DATE('2023-09-01', 'YYYY-MM-DD'), 10000);4.查詢數(shù)據(jù)
1.查詢所有員工信息:
SELECT * FROM employees;

2.查詢特定員工(例如,員工 ID 為 2 的員工):
SELECT * FROM employees WHERE employee_id = 2;

3.查詢薪水高于 8000 的員工:
SELECT first_name, last_name, salary FROM employees WHERE salary > 8000;

5.更新數(shù)據(jù)
例如,增加員工 Bob 的薪水:
UPDATE employees SET salary = 10500 WHERE employee_id = 2;

6.刪除數(shù)據(jù)
刪除員工 ID 為 3 的員工:
DELETE FROM employees WHERE employee_id = 3;

7.附加 SQL 查詢示例
1.查詢員工的薪資總和
SELECT SUM(salary) FROM employees;

2.查詢薪資的平均值:
SELECT AVG(salary) FROM employees;

3.按照入職日期排序,顯示前 2 個(gè)員工:
SELECT * FROM employees ORDER BY hire_date FETCH FIRST 2 ROWS ONLY;

8.篩選數(shù)據(jù) (WHERE)
使用 WHERE 子句來(lái)篩選符合條件的數(shù)據(jù)。
SELECT * FROM employees WHERE salary > 8000;

使用邏輯運(yùn)算符:
AND:同時(shí)滿足多個(gè)條件。OR:滿足任意一個(gè)條件。NOT:排除某些條件
SELECT * FROM employees WHERE salary > 8000 AND EMPLOYEE_ID=2;

使用 BETWEEN 篩選范圍:
SELECT * FROM employees WHERE salary BETWEEN 8000 AND 10000;

使用 IN 篩選多個(gè)值:
SELECT * FROM employees WHERE EMPLOYEE_ID IN (1, 2, 3);

使用 LIKE 進(jìn)行模糊查詢:
SELECT * FROM employees WHERE first_name LIKE 'A%'; -- 姓名以A開(kāi)頭

9.排序數(shù)據(jù) (ORDER BY)
使用 ORDER BY 子句對(duì)查詢結(jié)果進(jìn)行排序,默認(rèn)是按 升序 (ASC),如果需要降序則使用 DESC。
SELECT * FROM employees ORDER BY salary DESC;

10.限制查詢結(jié)果 (LIMIT / ROWNUM)
Oracle 不支持 LIMIT 語(yǔ)句,但可以使用 ROWNUM 或 FETCH FIRST 來(lái)限制返回的行數(shù)。
SELECT * FROM employees WHERE ROWNUM <= 5;

11.聚合函數(shù) (GROUP BY)
聚合函數(shù) 用于對(duì)結(jié)果集進(jìn)行匯總、統(tǒng)計(jì)或計(jì)算。常見(jiàn)的聚合函數(shù)有:SUM、AVG、COUNT、MAX、MIN。
示例:計(jì)算每個(gè)部門的平均薪資
SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id;
示例:計(jì)算每個(gè)部門的員工人數(shù)
SELECT department_id, COUNT(*) AS num_employees FROM employees GROUP BY department_id;
示例:計(jì)算每個(gè)部門的薪資總和,并篩選薪資總和大于 20,000 的部門
SELECT department_id, SUM(salary) AS total_salary FROM employees GROUP BY department_id HAVING SUM(salary) > 20000;
12.聯(lián)接查詢 (JOIN)
Oracle 支持多種類型的 聯(lián)接,用于在查詢中連接多個(gè)表。常見(jiàn)的聯(lián)接類型有:INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN。
示例:INNER JOIN(內(nèi)聯(lián)接)
返回兩個(gè)表中匹配的行:
SELECT e.first_name, e.last_name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id;
示例:LEFT JOIN(左外聯(lián)接)
返回左表所有行,即使右表沒(méi)有匹配的行:
SELECT e.first_name, e.last_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id;
示例:RIGHT JOIN(右外聯(lián)接)
返回右表所有行,即使左表沒(méi)有匹配的行:
SELECT e.first_name, e.last_name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department_id = d.department_id;
示例:FULL JOIN(全外聯(lián)接)
返回兩個(gè)表的所有行,不管是否有匹配的行:
SELECT e.first_name, e.last_name, d.department_name FROM employees e FULL JOIN departments d ON e.department_id = d.department_id;
13.常用的 Oracle 查詢方法:
| 方法 | 描述 |
|---|---|
SELECT | 用于從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)。 |
WHERE | 用于過(guò)濾查詢結(jié)果。 |
ORDER BY | 用于對(duì)查詢結(jié)果進(jìn)行排序。 |
GROUP BY | 用于將結(jié)果按指定字段分組并進(jìn)行聚合。 |
JOIN | 用于在多個(gè)表之間建立關(guān)系,進(jìn)行聯(lián)接查詢。 |
| 子查詢 | 在查詢中嵌套其他查詢,用于更復(fù)雜的條件判斷。 |
| 視圖 | 用于將復(fù)雜查詢封裝為一個(gè)虛擬表,簡(jiǎn)化查詢。 |
ROWNUM / FETCH | 用于限制查詢結(jié)果的行數(shù),進(jìn)行數(shù)據(jù)分頁(yè)。 |
總結(jié)
到此這篇關(guān)于在Linux系統(tǒng)上安裝部署Oracle Database保姆級(jí)教程的文章就介紹到這了,更多相關(guān)Linux安裝部署Oracle內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于ORACLE通過(guò)file_id與block_id定位數(shù)據(jù)庫(kù)對(duì)象遇到的問(wèn)題引發(fā)的思考
這篇文章主要介紹了關(guān)于ORACLE通過(guò)file_id與block_id定位數(shù)據(jù)庫(kù)對(duì)象遇到的問(wèn)題引發(fā)的思考,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
VMware中l(wèi)inux環(huán)境下oracle安裝圖文教程(二)ORACLE 10.2.05版本的升級(jí)補(bǔ)丁安裝
這篇文章是VMware中l(wèi)inux環(huán)境下oracle安裝圖文教程系列的第二篇,主要介紹了ORACLE 10.2.05版本的升級(jí)補(bǔ)丁安裝,需要的朋友可以參考下2014-08-08
淺談Oracle數(shù)據(jù)庫(kù)的建模與設(shè)計(jì)
淺談Oracle數(shù)據(jù)庫(kù)的建模與設(shè)計(jì)...2007-03-03
Oracle數(shù)據(jù)庫(kù)由dataguard備庫(kù)引起的log file sync等待問(wèn)題
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)由dataguard備庫(kù)引起的log file sync等待,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
在ORACLE移動(dòng)數(shù)據(jù)庫(kù)文件
在ORACLE移動(dòng)數(shù)據(jù)庫(kù)文件...2007-03-03
Oracle數(shù)據(jù)庫(kù)PL/SQL 存儲(chǔ)過(guò)程與函數(shù)完全指南
這篇文章詳細(xì)介紹了Oracle PL/SQL中的存儲(chǔ)過(guò)程和函數(shù),包括它們的核心概念、語(yǔ)法結(jié)構(gòu)、參數(shù)模式、創(chuàng)建與調(diào)用方法、高級(jí)特性、包的使用、性能優(yōu)化技巧、調(diào)試與監(jiān)控、最佳實(shí)踐與規(guī)范,以及存儲(chǔ)過(guò)程和函數(shù)的終極對(duì)比,感興趣的朋友跟隨小編一起看看吧2025-12-12

