Oracle數(shù)據(jù)庫(kù)的使用及說(shuō)明介紹Linux
一、Oracle數(shù)據(jù)庫(kù)介紹
Oracle 數(shù)據(jù)庫(kù)是全球最主流的企業(yè)級(jí)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)之一,由美國(guó)甲骨文(Oracle)公司開(kāi)發(fā),以穩(wěn)定性強(qiáng)、功能全面、支持高并發(fā)和復(fù)雜業(yè)務(wù)場(chǎng)景而聞名。
Oracle 數(shù)據(jù)庫(kù)被研發(fā)出來(lái)的初衷是開(kāi)發(fā)一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),以提供高效、可靠的數(shù)據(jù)存儲(chǔ)和檢索能力,同時(shí)確保數(shù)據(jù)的完整性和安全性。
系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS):用 “表格(行和列)” 來(lái)組織數(shù)據(jù),并用 “關(guān)系”(如主鍵、外鍵)關(guān)聯(lián)不同表格的數(shù)據(jù)庫(kù)管理軟件。有關(guān)聯(lián)的表A和表B同時(shí)改變,適用大多數(shù)生活場(chǎng)景,比如扣款和到賬同時(shí)成功或者失敗。
特點(diǎn):
(1)高可用性:支持RAC實(shí)時(shí)應(yīng)用集群(支持分布式數(shù)據(jù)處理)
(2)業(yè)務(wù)與安全能力強(qiáng)大
(3)多場(chǎng)景適配:兼具 OLTP(在線事務(wù)處理)和 OLAP(在線分析處理)能力
(4)跨平臺(tái)兼容性:可運(yùn)行于 Windows、Linux、Unix 等多種操作系統(tǒng),支持 x86、ARM 等不同架構(gòu)服務(wù)器;同時(shí)兼容 SQL 標(biāo)準(zhǔn),能與 Java、Python 等主流開(kāi)發(fā)語(yǔ)言及各類企業(yè)級(jí)應(yīng)用無(wú)縫集成。
二、Oracle的簡(jiǎn)單架構(gòu)
Oracle的特別之處
在Oracle的典型架構(gòu)中,一個(gè)實(shí)例(Instance)通常掛載并管理一個(gè)數(shù)據(jù)庫(kù)(Database)。對(duì)比之下MySQL是一個(gè)實(shí)例管理多個(gè)數(shù)據(jù)庫(kù),更接近數(shù)據(jù)倉(cāng)庫(kù)管理的感覺(jué)。
什么是實(shí)例
可以簡(jiǎn)單的將實(shí)例理解為進(jìn)程加涉及的其他的資源(比如說(shuō)內(nèi)存資源,磁盤(pán)空間),在該運(yùn)行環(huán)境內(nèi)只允許有一個(gè)數(shù)據(jù)庫(kù)。是Oracle數(shù)據(jù)庫(kù)運(yùn)行的載體。數(shù)據(jù)庫(kù)指的就是磁盤(pán)上的物理文件的集合(比如說(shuō)數(shù)據(jù)文件,日志文件,控制文件等組合使用的實(shí)際文件),是數(shù)據(jù)的實(shí)際存儲(chǔ)載體。
前面提到過(guò)的RAC集群有一點(diǎn)不同,這里是多個(gè)實(shí)例共享一個(gè)數(shù)據(jù)庫(kù)。
Oracle只能有一個(gè)數(shù)據(jù)庫(kù)嗎?
實(shí)際上是默認(rèn)1個(gè)數(shù)據(jù)庫(kù),但是可以多實(shí)例對(duì)應(yīng)多個(gè)獨(dú)立的Oracle數(shù)據(jù)庫(kù)。只是它創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)不像MySQL那樣簡(jiǎn)單。
Oracle的端口號(hào):1521
MySQL和Oracle的區(qū)別:
嘗試對(duì)比MySQL和Oracle來(lái)學(xué)習(xí)Oracle的特別之處。
(1)Oracle新建數(shù)據(jù)庫(kù)不同于MySQL新建數(shù)據(jù)庫(kù)
在Oracle中,創(chuàng)建一個(gè)新的、獨(dú)立的數(shù)據(jù)庫(kù)環(huán)境,這個(gè)過(guò)程稱為 “數(shù)據(jù)庫(kù)創(chuàng)建(Database Creation)” 。會(huì)為它創(chuàng)建一個(gè)專屬的 “實(shí)例”(獨(dú)立的進(jìn)程和內(nèi)存空間,比如第二個(gè)實(shí)例叫 ORCL2)。而 MySQL 新建數(shù)據(jù)庫(kù),只是在現(xiàn)有實(shí)例的目錄下新建一個(gè) “文件夾”,不需要額外分配進(jìn)程和內(nèi)存 。
所以感覺(jué)上就像MySQL創(chuàng)建不同數(shù)據(jù)庫(kù)就是在一張A4紙上劃了一根線分出一塊來(lái),就創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)。就是一個(gè)實(shí)例對(duì)應(yīng)N個(gè)邏輯數(shù)據(jù)庫(kù),Oracle是一張紙就是一個(gè)數(shù)據(jù)庫(kù),創(chuàng)建新的數(shù)據(jù)庫(kù)需要新的紙,就是一個(gè)物理數(shù)據(jù)庫(kù)對(duì)應(yīng)1個(gè)實(shí)例。這樣分配獨(dú)立的資源,在安全性和隔離性上來(lái)看,Oracle的會(huì)更強(qiáng)一些。當(dāng)然這個(gè)例子并不能代表MySQL的存儲(chǔ)上限就比Oracle的小。MySQL的單張紙也可以很大,Oracle的多張紙也可以很小,兩者的存儲(chǔ)上限和性能差異主要取決于涉及的目標(biāo)。
三、Oracle如何解決數(shù)據(jù)庫(kù)的安全機(jī)制問(wèn)題?
雖然Oracle一個(gè)實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),但是Oracle會(huì)通過(guò)邏輯隔離和精細(xì)化權(quán)限控制來(lái)保證數(shù)據(jù)的安全。
同樣使用MySQL和Oracle的例子來(lái)舉例。
1、MySQL的權(quán)限控制邏輯
授權(quán)結(jié)構(gòu):數(shù)據(jù)庫(kù)用戶--->數(shù)據(jù)庫(kù)--->數(shù)據(jù)庫(kù)下的表
數(shù)據(jù)庫(kù)用戶只可以使用被授權(quán)過(guò)的數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)下的表。例如:fruit數(shù)據(jù)庫(kù)下的apple表對(duì)A用戶授權(quán),那么A用戶就可以使用fruit數(shù)據(jù)庫(kù)下的apple表,其他的表它便不可使用。如果fruit數(shù)據(jù)庫(kù)授權(quán)A用戶使用庫(kù)下的所有表,那么A用戶就可以全部使用。(grant all on fruit.* to A@'loaclhost' indentified by '123')。
MySQL中不同數(shù)據(jù)庫(kù)之間的權(quán)限隔離,不同數(shù)據(jù)庫(kù)的權(quán)限設(shè)置不相互影響。
2、Oracle的權(quán)限控制邏輯:?jiǎn)螖?shù)據(jù)庫(kù)多租戶
(1)授權(quán)結(jié)構(gòu)
通過(guò)表空間(Tablespace) 和用戶 Schema 實(shí)現(xiàn)邏輯隔離,效果類似 MySQL 的 “多數(shù)據(jù)庫(kù)”,但更靈活。Oracle的權(quán)限體系極其精細(xì),避免單個(gè)用戶刪除庫(kù)的風(fēng)險(xiǎn)。
- 表空間(物理隔離):數(shù)據(jù)庫(kù)的物理文件被劃分為多個(gè)表空間,不同用戶的數(shù)據(jù)可存儲(chǔ)在不同表空間中(如財(cái)務(wù)數(shù)據(jù)在
FIN_TBS,人事數(shù)據(jù)在HR_TBS)。即使某個(gè)表空間損壞,其他表空間的數(shù)據(jù)不受影響。 - 用戶 Schema(邏輯隔離):每個(gè)用戶默認(rèn)擁有一個(gè)同名的 “Schema(模式)”,用戶創(chuàng)建的表、視圖等對(duì)象默認(rèn)屬于自己的 Schema。
例如:用戶USER_A創(chuàng)建的表實(shí)際是USER_A.TABLE1。用戶USER_B創(chuàng)建的表實(shí)際是USER_B.TABLE1兩者名稱相同但完全獨(dú)立,互不干擾(類似同一文件夾下不同用戶的文件)。
(2)Oracle的權(quán)限設(shè)置
權(quán)限分級(jí)
普通用戶默認(rèn)只有自己 Schema 的操作權(quán)限(CREATE TABLE、INSERT等),無(wú)法訪問(wèn)其他用戶的對(duì)象,更不能刪除整個(gè)數(shù)據(jù)庫(kù)。只有SYSDBA等超級(jí)權(quán)限角色,才能執(zhí)行DROP DATABASE等危險(xiǎn)操作,而這類權(quán)限會(huì)嚴(yán)格限制給極少數(shù)管理員。
| 用戶/角色 | 用戶等級(jí) | 用戶權(quán)限 |
| sysdba | 最高級(jí)別的管理員賬戶 | 對(duì)數(shù)據(jù)庫(kù)的完全控制權(quán) |
| sysoper | 管理員賬戶 | 權(quán)限比sysdba低一些,可啟動(dòng)、關(guān)閉數(shù)據(jù)庫(kù),但不能創(chuàng)建數(shù)據(jù)庫(kù)。 |
| SYS | 數(shù)據(jù)庫(kù)初始就存在的管理員用戶 | 天生擁有 sysdba 權(quán)限 |
| 普通用戶 | 普通用戶 | 需要通過(guò)被授權(quán)之后才可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作 |
注釋1:sysdba和sysper是Oracle數(shù)據(jù)庫(kù)內(nèi)置的兩種最高級(jí)別的系統(tǒng)權(quán)限集合,也被稱為 “特權(quán)身份”。就像Linux的超級(jí)管理員root一樣。普通用戶無(wú)法自動(dòng)獲得這兩種身份,必須由已擁有 sysdba 權(quán)限的用戶(如 SYS)手動(dòng)授予。
使用特權(quán)登錄:獲得身份后,登錄時(shí)需明確指定身份,否則默認(rèn)以普通用戶權(quán)限登錄。
注釋2:雖然表格中寫(xiě)的sysdba sysoper是用戶/角色。但是實(shí)際上這兩個(gè)是”特權(quán)身份令牌“。它們是 Oracle 底層權(quán)限機(jī)制的一部分,屬于 “特權(quán)集合” 而非 “用戶賬號(hào)”。數(shù)據(jù)庫(kù)安裝完成后,這兩種特權(quán)身份就已存在,但默認(rèn)僅賦予 SYS 用戶。
sysdba和sysoper已經(jīng)作為系統(tǒng)基礎(chǔ)組件存在,等待被分配給合適的用戶(通常是 SYS,也可分配給其他用戶)。
數(shù)據(jù)庫(kù)安裝完成 → 自動(dòng)創(chuàng)建SYS用戶 → SYS默認(rèn)擁有sysdba特權(quán) ↓ sysdba和sysoper作為內(nèi)置特權(quán)機(jī)制,從安裝完成就存在于系統(tǒng)中
操作審計(jì)與日志
所有關(guān)鍵操作(如刪除表、修改權(quán)限)會(huì)被記錄到審計(jì)日志中,可追溯操作人。同時(shí),Oracle 的閃回技術(shù)(Flashback)能快速恢復(fù)誤刪除的數(shù)據(jù)。
數(shù)據(jù)備份與恢復(fù)機(jī)制
支持在線熱備份、增量備份等,即使發(fā)生極端情況(如誤刪庫(kù)),也能通過(guò)備份文件恢復(fù)數(shù)據(jù),配合歸檔日志可實(shí)現(xiàn) “任意時(shí)間點(diǎn)恢復(fù)”。
(3)MySQL和Oracle的對(duì)比
這里使用MySQL來(lái)做對(duì)比,方便理解。
安全性能上
MySQL 的 “一個(gè)實(shí)例多個(gè)數(shù)據(jù)庫(kù)” 看似更隔離,但本質(zhì)是邏輯文件夾的隔離,權(quán)限控制相對(duì)簡(jiǎn)單。
普通用戶可能被賦予DROP DATABASE權(quán)限,風(fēng)險(xiǎn)更高。缺乏表空間級(jí)別的物理隔離,某數(shù)據(jù)庫(kù)文件損壞可能影響整個(gè)實(shí)例。而 Oracle 的設(shè)計(jì)思路是通過(guò)精細(xì)化權(quán)限 + 邏輯隔離,在單數(shù)據(jù)庫(kù)內(nèi)實(shí)現(xiàn)比多數(shù)據(jù)庫(kù)更強(qiáng)的安全性,同時(shí)避免多數(shù)據(jù)庫(kù)帶來(lái)的資源浪費(fèi)和管理復(fù)雜度。
適用場(chǎng)景上
Oracle面向企業(yè)級(jí)市場(chǎng)(如銀行、電信),解決 “大規(guī)模數(shù)據(jù) + 高可靠性” 需求。
MySQL面向個(gè)人和中小型項(xiàng)目,主打 “輕量、開(kāi)源、免費(fèi)”。
四、Oracle的安裝配置
1、Oracle版本
Oracle21版本,下載其他版本差別不大
2、安裝環(huán)境
Centos7操作系統(tǒng)(Linux)
內(nèi)存4G,磁盤(pán)空間20G
這里的內(nèi)存給大一點(diǎn),后面初始化的時(shí)候內(nèi)存大一些可能時(shí)間會(huì)短一點(diǎn)。
[root@localhost ~]# hostnamectl set-hostname oracle [root@localhost ~]# bash
錯(cuò)點(diǎn)注意:這里最好關(guān)閉一下防火墻和SELinux,否則后面初始化Oracle數(shù)據(jù)庫(kù)的時(shí)候可能會(huì)卡住。會(huì)出現(xiàn)權(quán)限攔截的問(wèn)題。
[root@oracle ~]# systemctl stop firewalld.service [root@oracle ~]# getenforce Enforcing [root@oracle ~]# setenforce 0 [root@oracle ~]#
3、Oracle安裝
安裝預(yù)安裝包
從 Oracle 官方 YUM 倉(cāng)庫(kù)下載并安裝 Oracle Database 21c 的預(yù)安裝包(oracle-database-preinstall-21c)。
注意:如果是使用虛擬機(jī),需要虛擬機(jī)可以聯(lián)網(wǎng)
yum install -y https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm
補(bǔ)充:預(yù)安裝包的作用:
具體來(lái)說(shuō),oracle-database-preinstall-21c 是 Oracle 為簡(jiǎn)化數(shù)據(jù)庫(kù)安裝而提供的專用預(yù)配置包,它的主要功能包括:
- 自動(dòng)創(chuàng)建
oracle用戶和相關(guān)用戶組(如dba、oinstall等) - 配置系統(tǒng)內(nèi)核參數(shù)(如共享內(nèi)存、文件描述符限制等)以滿足 Oracle 數(shù)據(jù)庫(kù)運(yùn)行要求
- 安裝數(shù)據(jù)庫(kù)依賴的基礎(chǔ)庫(kù)(如
libaio、glibc等) - 設(shè)置系統(tǒng)安全策略和資源限制,確保 Oracle 服務(wù)正常運(yùn)行
安裝Oracle數(shù)據(jù)庫(kù)主程序
官方網(wǎng)址:https://www.oracle.com/cn/database/technologies/xe-downloads.html
下載之后傳輸?shù)絃inux中,要先安裝預(yù)安裝包否則可能報(bào)錯(cuò)
方式一:自定義源倉(cāng)庫(kù)
[root@oracle ~]yum -y install createrepo-0.9.9-28.el7.noarch [root@oracle ~]createrepo /oracle/ [root@oracle ~]vim /etc/yum.repos.d/oracle.repo [name] name=oracle baseurl=file:///oracle/ enabled=1 gpgcheck=0 [root@oracle ~]yum repolist [root@oracle ~]yum -y install /oracle/oracle-database-xe-21c-1.0-1.ol7
簡(jiǎn)單的yum倉(cāng)庫(kù)安裝注意事項(xiàng):
自定義源倉(cāng)庫(kù)之后:yum 會(huì)先查詢本地緩存的 “倉(cāng)庫(kù)包索引”,通過(guò)你輸入的 “包名”(如 percona-xtrabackup-24-2.4.7-1.el7.x86_64)匹配索引中對(duì)應(yīng)的包信息(包括包的完整名稱、版本、依賴等)。匹配成功后,yum 會(huì)自動(dòng)從倉(cāng)庫(kù)下載該包,并解決依賴關(guān)系(比如自動(dòng)安裝 perl(DBD::mysql)、 rsync 等),因此無(wú)需手動(dòng)指定 .rpm 后綴。
如果不是自定義源倉(cāng)庫(kù):就需要輸入完整的rpm包名字帶后綴,比如這個(gè)【 yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm 】 本地已下載的.rpm 文件(非倉(cāng)庫(kù)中的包),yum 無(wú)法通過(guò) “包名” 查詢倉(cāng)庫(kù)索引(因?yàn)榘辉趥}(cāng)庫(kù)里),必須通過(guò)你提供的 “完整文件名 + 路徑”(如 /root/percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm)定位到本地的.rpm 文件。 .rpm 后綴是 yum 識(shí)別 “本地 rpm 文件” 的關(guān)鍵標(biāo)志 —— 如果不帶后綴,yum 會(huì)默認(rèn)去倉(cāng)庫(kù)中查找該 “包名”,但倉(cāng)庫(kù)中可能沒(méi)有(或版本不匹配),最終導(dǎo)致安裝失敗
方式二:rpm本地安裝
rpm -ivh oracle-database-xe-21c-1.0-1.ol7.x86_64.rpm
初始化Oracle數(shù)據(jù)庫(kù)
在這一步的時(shí)候有些步驟會(huì)看起來(lái)像是卡住,請(qǐng)耐心等待,這是正常現(xiàn)象。
- 若服務(wù)器是普通虛擬機(jī)(2 核 4G 內(nèi)存),通常需要 5-15 分鐘。
- 若服務(wù)器配置較低(1 核 2G 內(nèi)存),可能需要 20-30 分鐘,期間終端無(wú)輸出屬于正?,F(xiàn)象。
[root@oracle ~]# ls /etc/init.d/ | grep oracle
[root@oracle ~]# ls /etc/init.d/oracle-xe-21c
[root@oracle ~]# /etc/init.d/oracle-xe-21c configure
下面是詳細(xì)的初始化流程每一步的解析:
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts: #設(shè)置密碼(這里設(shè)置的是123321Dyq)
Confirm the password: ##確認(rèn)密碼
Configuring Oracle Listener. ##自動(dòng)配置 Oracle Listener(默認(rèn)監(jiān)聽(tīng)端口 1521)
Listener configuration succeeded. ##表示監(jiān)聽(tīng)設(shè)置成功
Configuring Oracle Database XE.
Enter SYS user password:
*********
Enter SYSTEM user password:
**********
Enter PDBADMIN User Password:
***********
Prepare for db operation ###數(shù)據(jù)庫(kù)實(shí)例與結(jié)構(gòu)創(chuàng)建階段
7% complete
Copying database files ###復(fù)制數(shù)據(jù)庫(kù)文件:將 Oracle 的基礎(chǔ)模板文件(如數(shù)據(jù)文件、控制文件、日志文件)復(fù)制到指定目錄默認(rèn)/opt/oracle/oradata/XE。是數(shù)據(jù)存儲(chǔ)的基礎(chǔ)
29% complete
Creating and starting Oracle instance ###創(chuàng)建并啟動(dòng) Oracle 實(shí)例,為后續(xù)的數(shù)據(jù)存儲(chǔ)做準(zhǔn)備
30% complete
33% complete
37% complete
40% complete
43% complete
Completing Database Creation ###完成數(shù)據(jù)庫(kù)創(chuàng)建
47% complete
50% complete
Creating Pluggable Databases ###創(chuàng)建可插拔數(shù)據(jù)庫(kù)
54% complete
71% complete
Executing Post Configuration Actions ##執(zhí)行后續(xù)配置操作
93% complete
Running Custom Scripts
100% complete
Database creation complete. For details check the logfiles at:
/opt/oracle/cfgtoollogs/dbca/XE.
Database Information:
Global Database Name:XE ### 全局?jǐn)?shù)據(jù)庫(kù)名
System Identifier(SID):XE ##系統(tǒng)標(biāo)識(shí)符(SID),實(shí)例的唯一標(biāo)識(shí)
Look at the log file "/opt/oracle/cfgtoollogs/dbca/XE/XE.log" for further details.
Connect to Oracle Database using one of the connect strings:
Pluggable database: oracle/XEPDB1
Multitenant container database: oracle
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE注釋:密碼的作用范圍(初始化日志中也可以看出來(lái))
作用:該密碼會(huì)同時(shí)應(yīng)用于三個(gè)核心賬戶,這三個(gè)賬戶是后續(xù)管理和使用數(shù)據(jù)庫(kù)的關(guān)鍵:
SYS:數(shù)據(jù)庫(kù)最高權(quán)限賬戶,負(fù)責(zé)管理數(shù)據(jù)庫(kù)結(jié)構(gòu)(如創(chuàng)建表空間、用戶)和系統(tǒng)級(jí)配置。SYSTEM:數(shù)據(jù)庫(kù)管理員賬戶,用于日常管理(如創(chuàng)建用戶、授權(quán)),權(quán)限略低于SYS。PDBADMIN:可插拔數(shù)據(jù)庫(kù)(PDB)的管理員賬戶,負(fù)責(zé)管理后續(xù)創(chuàng)建的XEPDB1插件數(shù)據(jù)庫(kù)。
配置環(huán)境變量
在文件末尾添加以下內(nèi)容(根據(jù)實(shí)際安裝路徑調(diào)整,默認(rèn)路徑如下)
[root@oracle ~]# vim /home/oracle/.bash_profile ##單個(gè)用戶的配置文件 核心配置: export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE #指定 Oracle 數(shù)據(jù)庫(kù)軟件的安裝目錄(主目錄)。Oracle 的所有工具和服務(wù)都需要通過(guò)這個(gè)路徑找到對(duì)應(yīng)的程序才能運(yùn)行。 主目錄的位置:其實(shí)在前面的初始化最后提示你日志路徑,便知道了主目錄的位置在哪里了 export ORACLE_SID=XE ##指定當(dāng)前要連接的數(shù)據(jù)庫(kù)實(shí)例名,SID = System Identifier,初始化日志最后表明是XE。 export PATH=$ORACLE_HOME/bin:$PATH #將 Oracle 的命令目錄添加到系統(tǒng)的可執(zhí)行路徑中。 額外配置(可選) export ORACLE_BASE=path #定義 Oracle 的「基礎(chǔ)目錄」(根目錄) export ROACLE_PID=oral12 #定義數(shù)據(jù)庫(kù)進(jìn)程的標(biāo)識(shí),這個(gè)變量不是必須的,默認(rèn)情況下 Oracle 會(huì)自動(dòng)生成進(jìn)程標(biāo)識(shí),只有多實(shí)例場(chǎng)景下才需要手動(dòng)配置。 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib #指定程序運(yùn)行時(shí)依賴的「動(dòng)態(tài)鏈接庫(kù)(.so 文件)」路徑。 export LANG="zh_CN.UTF-8" #設(shè)置 Linux 系統(tǒng)的默認(rèn)語(yǔ)言和字符集。LANG 是系統(tǒng)級(jí)變量,控制終端、日志等系統(tǒng)輸出的語(yǔ)言編碼。設(shè)置為 zh_CN.UTF-8 表示系統(tǒng)默認(rèn)使用中文顯示,且支持 UTF-8 編碼(避免中文亂碼)。 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" #設(shè)置 Oracle 客戶端與數(shù)據(jù)庫(kù)交互的「語(yǔ)言和字符集」。 export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss' #統(tǒng)一日期數(shù)據(jù)的「顯示格式」。
使配置生效
##注意:使用root用戶編輯注意查看文件所有者是否是Oracle [root@oracle ~]# ll -d /home/oracle/.bash_profile [root@oracle ~]#source ~/.bash_profile
手動(dòng)創(chuàng)建 systemd 服務(wù)文件
[root@oracle ~]# ls /usr/lib/systemd/system | grep oracle #如果有就可以省略這個(gè)步驟 [root@oracle ~]# vim /usr/lib/systemd/system/oracle-xe-21c.service [Unit] Description=Oracle Database 21c Express Edition After=network.target [Service] Type=forking User=root Group=root ExecStart=/etc/init.d/oracle-xe-21c start ExecStop=/etc/init.d/oracle-xe-21c stop ExecReload=/etc/init.d/oracle-xe-21c restart RemainAfterExit=yes [Install] WantedBy=multi-user.target
開(kāi)啟數(shù)據(jù)庫(kù)服務(wù)
[root@oracle ~]#systemctl daemon-reload [root@oracle ~]# systemctl enable oracle-xe-21c.service --now [root@oracle ~]# systemctl status oracle-xe-21c.service #狀態(tài)是 active (exited)表示成功
驗(yàn)證是否初始化成功
[root@oracle ~]# su - oracle [root@oracle ~]# sqlplus / as sysdba #這里可能需要卡一下,等待一會(huì)即可 SQL*Plus: Release 21.0.0.0.0 - Production on Thu Oct 16 02:57:17 2025 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 SQL> ##結(jié)果是這樣表示成功 命令解析: Oracle 自帶的命令行客戶端工具,用于連接數(shù)據(jù)庫(kù)并執(zhí)行 SQL 語(yǔ)句或管理命令。 /:表示 “使用操作系統(tǒng)認(rèn)證”(而非密碼認(rèn)證) as sysdba:表示以 SYSDBA 身份登錄(Oracle 中最高權(quán)限角色)。
錯(cuò)點(diǎn)注意:必須使用oracle用戶
sqlplus / as sysdba 依賴「操作系統(tǒng)認(rèn)證」,而這種認(rèn)證必須以 oracle 用戶身份執(zhí)行,root 用戶無(wú)法通過(guò)這種方式登錄(即使知道密碼也不行)。(或者在前面修改配置文件的時(shí)候切換用戶同樣可以)
如果是不oracle用戶則會(huì)出現(xiàn)以下錯(cuò)誤提示:
[root@oracle ~]# sqlplus / as sysdba SQL*Plus: Release 21.0.0.0.0 - Production on Thu Oct 16 02:55:23 2025 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied Enter user-name:
管理Oracle服務(wù)
# 啟動(dòng)服務(wù) systemctl start oracle-xe-21c # 停止服務(wù) systemctl stop oracle-xe-21c # 查看服務(wù)狀態(tài) systemctl status oracle-xe-21c
安裝完成
操作注意事項(xiàng):SYSDBA 權(quán)限極高,操作需謹(jǐn)慎(如誤執(zhí)行 drop database 會(huì)直接刪除數(shù)據(jù)庫(kù))。
僅能在數(shù)據(jù)庫(kù)服務(wù)器本地執(zhí)行(遠(yuǎn)程連接通常需要密碼認(rèn)證,除非特殊配置)。
五、Oracle的常用語(yǔ)法
Oracle數(shù)據(jù)庫(kù)不能直接按刪除鍵刪除命令,按住ctrl+刪除鍵即可。
Oracle的操作技巧(命令行)
【1】Oracle清屏命令
SQL> host clear; #滾輪上劃可以看見(jiàn)歷史命令
【2】自定義方向鍵
在Linux中,Oracle不像MySQL一樣支持上行歷史命令鍵。
解決方法:使用 rlwrap 工具增強(qiáng) SQL*Plus 功能
(1)安裝rlwrap工具
方式一:源安裝(root用戶)
rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 yum install rlwrap
方式二:如果一不成功就是用官方Git倉(cāng)庫(kù)拉取rpm包源碼編譯安裝
[root@oracle ~]# cd /tmp [root@oracle tmp]# curl -O https://github.com/hanslub42/rlwrap/releases/download/v0.46.1/rlwrap-0.46.1.tar.gz [root@oracle tmp]# ls /tmp/ CVU_21.0.0.0.0_oracle hsperfdata_oracle rlwrap-0.46.1.tar.gz vmware-root
方法三:二不行就使用這個(gè)
[root@oracle ~]# cd /tmp [root@oracle tmp]# wget https://github.com/hanslub42/rlwrap/releases/download/v0.47/rlwrap-0.47.tar.gz [root@oracle tmp]# ll -dh rlwrap-0.47.tar.gz
(2)源碼編譯安裝
[root@oracle tmp]# yum -y install gcc make [root@oracle tmp]yum -y install readline-devel ##這個(gè)包不安裝可能會(huì)報(bào)錯(cuò) [root@oracle tmp]# tar -xf rlwrap-0.47.tar.gz [root@oracle tmp]# cd rlwrap-0.47/ [root@oracle rlwrap-0.47]#./configure --without-libptytty [root@oracle rlwrap-0.47]# make && make install [root@oracle rlwrap-0.47]# rlwrap --version rlwrap 0.47 ##如果顯示版本信息就表示安裝成功
(3)編輯配置文件和加載配置
最后一行插入別名: [root@oracle rlwrap-0.47]# vim /home/oracle/.bash_profile alias sqlplus='rlwrap sqlplus' [root@oracle rlwrap-0.47]# source /home/oracle/.bash_profile #使配置生效
(4)重新進(jìn)入Oracle
此時(shí)按 ↑ 鍵就可以正常調(diào)取歷史命令了,↓ 鍵可以向前切換,解決了亂碼問(wèn)題。而且使用刪除鍵也可以正常使用了,不會(huì)出現(xiàn)亂碼問(wèn)題了。
sqlplus / as sysdba
注意:如果你是再其他終端執(zhí)行的source命令,就再執(zhí)行source命令的終端測(cè)試才可以成功。只對(duì)執(zhí)行 source 命令的當(dāng)前終端生效,對(duì)之前早就開(kāi)啟的其他終端完全不生效。source不會(huì)開(kāi)啟自子進(jìn)程。
【3】Oracle自帶的歷史命令
如果不想那么麻煩,就是查看歷史命令也是相同的。
SQL> set history on #開(kāi)啟歷史命令 SQL> hist #查看歷史命令
Oracle常用查詢連接命令
dual是 Oracle 自帶的一個(gè)特殊 “單行單列” 表(系統(tǒng)表),通常用于簡(jiǎn)單的查詢測(cè)試或計(jì)算。- 執(zhí)行后會(huì)返回一行結(jié)果
DUMMY(值為X),表示數(shù)據(jù)庫(kù)可以正常響應(yīng) SQL 命令。
SQL> select * from dual; D - X
查看 Oracle 數(shù)據(jù)庫(kù)的參數(shù)配置
SQL> show parameter name; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cdb_cluster_name string cell_offloadgroup_name string db_file_name_convert string db_name string XE db_unique_name string XE global_names boolean FALSE instance_name string XE lock_name_space string log_file_name_convert string pdb_file_name_convert string processor_group_name string NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string XE
查看當(dāng)前登錄用戶
SELECT user FROM dual;
創(chuàng)建用戶
CREATE USER 用戶名 IDENTIFIED BY 密碼 ?。V付ㄓ脩裘艽a(需符合 Oracle 密碼規(guī)則) DEFAULT TABLESPACE 表空間名 #指定用戶默認(rèn)存儲(chǔ)數(shù)據(jù)的表空間(如 USERS) TEMPORARY TABLESPACE 臨時(shí)表空間名 ?。V付ㄓ脩舻呐R時(shí)表空間(通常為 TEMP) QUOTA 空間大小 ON 表空間名; #限制用戶在表空間上使用的空間(UNLIMITED 表示無(wú)限制)
切換用戶
切換前需知道目標(biāo)用戶的 正確密碼,若密碼包含特殊字符(如 @、#),需用雙引號(hào)包裹,例如:CONNECT myuser/"My@Pass123";。
CONNECT 目標(biāo)用戶名/密碼; -- 或帶數(shù)據(jù)庫(kù)實(shí)例(若需指定) CONNECT 目標(biāo)用戶名/密碼@數(shù)據(jù)庫(kù)實(shí)例名;
案例:創(chuàng)建一個(gè)名為 myuser 的用戶,密碼為 MyPass123,默認(rèn)表空間為 USERS
CREATE USER myuser IDENTIFIED BY MyPass123 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users;
注意:創(chuàng)建用戶后,需授予基本權(quán)限才能操作(如登錄權(quán)限)
GRANT CREATE SESSION TO myuser; -- 允許登錄 GRANT CREATE TABLE TO myuser; -- 允許創(chuàng)建表
刪除用戶
僅刪除用戶(若用戶有對(duì)象則會(huì)失?。? DROP USER 用戶名; 刪除用戶及其所有對(duì)象(級(jí)聯(lián)刪除) DROP USER 用戶名 CASCADE; 刪除用戶及其所有的對(duì)象 DROP USER testuser CASCADE;
創(chuàng)建表,默認(rèn)屬于當(dāng)前用戶
-- 語(yǔ)法:CREATE TABLE 表名 (字段名 類型 [約束])
CREATE TABLE student (
id NUMBER(10) PRIMARY KEY, -- 數(shù)字類型,長(zhǎng)度10,主鍵
name VARCHAR2(50) NOT NULL, -- 字符串類型(Oracle 常用VARCHAR2)
age NUMBER(3),
birthday DATE
);
注釋:字符串類型常用 VARCHAR2 而非 VARCHAR(Oracle 中 VARCHAR 是兼容型,建議用 VARCHAR2)。
表的字段類型:和MySQL相差無(wú)幾
表中插入值
INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);
案例:假設(shè)存在表 employees(包含 id、name、salary、hire_date 列),插入一條記錄
INSERT INTO employees (id, name, salary, hire_date)
VALUES (1001, '張三', 5000, TO_DATE('2023-01-15', 'YYYY-MM-DD'));
刪除表
GRANT CREATE SESSION TO myuser; -- 允許登錄 GRANT CREATE TABLE TO myuser; -- 允許創(chuàng)建表 普通 DROP TABLE:表會(huì)被放入 Oracle 回收站(RECYCLEBIN),必要時(shí)可通過(guò) FLASHBACK TABLE 表名 TO BEFORE DROP 恢復(fù)。 加 PURGE 選項(xiàng):表會(huì)被直接刪除,不進(jìn)入回收站,適合確認(rèn)無(wú)需恢復(fù)的場(chǎng)景。
查看表
-- 查看當(dāng)前用戶所有表(僅表名) SELECT table_name FROM user_tables;
查看表結(jié)構(gòu)
-- 查看表結(jié)構(gòu)(類似 MySQL 的 DESC) DESCRIBE student; -- 或簡(jiǎn)寫(xiě) DESC student;
查看其他用戶的表
-- 查看所有用戶的表(需管理員權(quán)限) SELECT owner, table_name FROM all_tables;
-- 查看指定用戶(如 SCOTT)的表 SELECT table_name FROM all_tables WHERE owner = 'SCOTT'; -- 注意用戶名大寫(xiě)
查看數(shù)據(jù)庫(kù)已有用戶
#查看所有用戶(包括系統(tǒng)用戶和普通用戶) SELECT username FROM dba_users; #查看當(dāng)前用戶可訪問(wèn)的用戶 SELECT username FROM all_users; #查看用戶的詳細(xì)信息(如創(chuàng)建時(shí)間、狀態(tài)等) SELECT username, created, account_status FROM dba_users ORDER BY created DESC;
查看表的完整信息
-- 查看表的創(chuàng)建語(yǔ)句(需有對(duì)應(yīng)權(quán)限)
SELECT dbms_metadata.get_ddl('TABLE', 'STUDENT') FROM dual; -- 表名大寫(xiě)
查看當(dāng)前的Oracle數(shù)據(jù)庫(kù)
方法1:查詢系統(tǒng)視圖(推薦)
SELECT sys_context('userenv', 'db_name') AS current_database FROM dual;
方法2:查詢實(shí)例名(SID)
SELECT instance_name FROM v$instance; -- 需有對(duì)應(yīng)權(quán)限
Oracle的表內(nèi)容查詢語(yǔ)句總覽
1、基本查詢 SELECT * FROM 表名; ?。樵儽碇兴行泻退辛? SELECT 列1, 列2, 列3 FROM 表名; -- 只查詢需要的列,多個(gè)列用逗號(hào)分隔 2、條件查詢 SELECT 列名 FROM 表名 WHERE 條件; -- 按條件篩選行 常用條件運(yùn)算符:=(等于)、>(大于)、<(小于)、>=、<=、!=/<>(不等于)、BETWEEN...AND(范圍)、IN(包含)、LIKE(模糊匹配)、IS NULL(空值) 3、排序查詢(ORDER BY) SELECT 列名 FROM 表名 ORDER BY 列1 [ASC/DESC], 列2 [ASC/DESC]; -- 按指定列排序,默認(rèn)升序(ASC),降序需加 DESC 4、去重查詢 SELECT DISTINCT 列名 FROM 表名; -- 去除結(jié)SELECT 分組列, 聚合函數(shù) FROM 表名 GROUP BY 分組列 [HAVING 聚合條件];果中重復(fù)的行(所有列都相同才視為重復(fù)) 5、限制查詢 SELECT * FROM 表名 WHERE ROWNUM <= N; -- 查詢前N行數(shù)據(jù) 6、聚合查詢(GROUP BY + 聚合函數(shù)) SELECT 分組列, 聚合函數(shù) FROM 表名 GROUP BY 分組列 [HAVING 聚合條件]; 7、多表連接查詢 -- 內(nèi)連接(只顯示匹配的記錄) SELECT a.列, b.列 FROM 表A a INNER JOIN 表B b ON a.關(guān)聯(lián)字段 = b.關(guān)聯(lián)字段; -- 左連接(顯示表A所有記錄,表B無(wú)匹配則為NULL) SELECT a.列, b.列 FROM 表A a LEFT JOIN 表B b ON a.關(guān)聯(lián)字段 = b.關(guān)聯(lián)字段;
補(bǔ)充內(nèi)容:國(guó)內(nèi)外的數(shù)據(jù)庫(kù)版本
| 國(guó)外版本 | 介紹 |
| MySQL | 開(kāi)源免費(fèi),生態(tài)完善,是國(guó)內(nèi)互聯(lián)網(wǎng)公司最廣泛使用的數(shù)據(jù)庫(kù)之一 |
PostgreSQL | 功能強(qiáng)大,支持復(fù)雜查詢,在金融、政府場(chǎng)景中常用 |
MongoDB | 文檔型數(shù)據(jù)庫(kù),適合JSON數(shù)據(jù)存儲(chǔ) |
| Oracle | 甲骨文公司的一款關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),在數(shù)據(jù)庫(kù)市場(chǎng)上占有重要份額。它具有強(qiáng)大的功能、出色的性能和高可用性,支持大規(guī)模數(shù)據(jù)存儲(chǔ)和復(fù)雜的業(yè)務(wù)邏輯,廣泛應(yīng)用于大型企業(yè)、金融機(jī)構(gòu)等對(duì)數(shù)據(jù)處理要求較高的場(chǎng)景。 |
| SQL server | 由微軟公司開(kāi)發(fā)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),與 Windows 操作系統(tǒng)緊密集成,具有良好的兼容性和易用性,在 Windows 環(huán)境下的企業(yè)級(jí)應(yīng)用中較為常見(jiàn),適用于中小型企業(yè)的業(yè)務(wù)系統(tǒng)。 |
| IBM Db2 | IBM 公司推出的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),高性能,高可靠性和強(qiáng)大的數(shù)據(jù)分析能力。 |
| Informix | IBM 公司的一款數(shù)據(jù)庫(kù)產(chǎn)品,結(jié)合了關(guān)系型和面向?qū)ο蟮墓δ?,可?shí)現(xiàn)靈活的數(shù)據(jù)建模,支持 SQL、NoSQL/JSON 和時(shí)間序列數(shù)據(jù),具有無(wú)縫整合特性,可進(jìn)行高性能事務(wù)處理,適合嵌入式應(yīng)用程序中的全天候事務(wù)和實(shí)時(shí)分析。 |
| Sybase | 最初由 Sybase 公司開(kāi)發(fā),后來(lái)被 SAP 公司收購(gòu)。 |
| Redis | 內(nèi)存數(shù)據(jù)庫(kù),常用于緩存,會(huì)話存儲(chǔ)等場(chǎng)景 |
| 國(guó)產(chǎn)版本 | 介紹 |
OceanBase | 螞蟻集團(tuán)開(kāi)發(fā),常用于金融、電信、互聯(lián)網(wǎng)等場(chǎng)景 |
| TiDB | 由 PingCAP 公司開(kāi)發(fā),是一款分布式 NewSQL 數(shù)據(jù)庫(kù),,適合分布式在線事務(wù)處理 |
| 達(dá)夢(mèng)數(shù)據(jù)庫(kù)(DM) | 由武漢達(dá)夢(mèng)數(shù)據(jù)庫(kù)有限公司研發(fā),是一款完全自主研發(fā)的關(guān)系型數(shù)據(jù)庫(kù),高度兼容 Oracle,廣泛應(yīng)用于政府、金融、電信、能源等對(duì)數(shù)據(jù)安全要求高的行業(yè)。 |
| 人大金倉(cāng)(Kingbase) | 由北京人大金倉(cāng)信息技術(shù)股份有限公司開(kāi)發(fā),是入選國(guó)家自主創(chuàng)新產(chǎn)品目錄的唯一數(shù)據(jù)庫(kù)產(chǎn)品 |
| 南大通用(GBase) | 天津南大通用數(shù)據(jù)技術(shù)有限公司的產(chǎn)品。適用于金融、電信、政府等大數(shù)據(jù)處理需求高的行業(yè)。 |
TDSQL-C | 騰訊云自研的分布式數(shù)據(jù)庫(kù),兼容 MySQL 和 PostgreSQL,分布式架構(gòu)適用于高并發(fā)業(yè)務(wù)。 |
PolarDB | 由阿里云開(kāi)發(fā),廣泛應(yīng)用于阿里云生態(tài)。 |
SequoiaDB(巨杉數(shù)據(jù)庫(kù)) | 由巨杉數(shù)據(jù)庫(kù)公司開(kāi)發(fā),主要應(yīng)用于金融、電信、政府等大數(shù)據(jù)處理需求高的行業(yè)。 |
| GoldenDB | 由中興通訊開(kāi)發(fā),成熟度較高,主要應(yīng)用于金融行業(yè)的核心交易系統(tǒng)。 |
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle中常見(jiàn)的33個(gè)等待事件小結(jié)
在Oracle 10g中的等待事件有872個(gè),11g中等待事件1116個(gè)。 我們可以通過(guò)v$event_name 視圖來(lái)查看等待事件的相關(guān)信息2013-07-07
Linux系統(tǒng)下Oracle數(shù)據(jù)庫(kù)的安裝和啟動(dòng)關(guān)閉操作教程
這篇文章主要介紹了Linux系統(tǒng)下Oracle數(shù)據(jù)庫(kù)的安裝和啟動(dòng)關(guān)閉操作教程,并針對(duì)在sqlplus下所需執(zhí)行的命令進(jìn)行講解,需要的朋友可以參考下2015-12-12
講解Oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù)字典及相關(guān)SQL查詢用法
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù)字典及相關(guān)SQL查詢用法,是Oracle入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-03-03
EBS xml publisher中文亂碼問(wèn)題及解決辦法
這篇文章主要介紹了EBS xml publisher中文亂碼問(wèn)題及解決辦法的相關(guān)資料,需要的朋友可以參考下2015-09-09
Oracle PL/SQL中“表或視圖不存在“錯(cuò)誤的解決方案
在Oracle PL/SQL開(kāi)發(fā)中,許多開(kāi)發(fā)者都遇到過(guò)這個(gè)令人困惑的錯(cuò)誤表或視圖不存在,這個(gè)錯(cuò)誤看似簡(jiǎn)單,但背后可能有多種原因,特別是當(dāng)表確實(shí)存在時(shí),這個(gè)錯(cuò)誤更讓人摸不著頭腦,所以本文介紹了詳細(xì)的解決方案,需要的朋友可以參考下2025-04-04
oracle創(chuàng)建數(shù)據(jù)庫(kù)和用戶的方法
這篇文章主要介紹了oracle創(chuàng)建數(shù)據(jù)庫(kù)和用戶的方法,mysql和sqlserver創(chuàng)建數(shù)據(jù)庫(kù)可以直接通過(guò)create database “數(shù)據(jù)庫(kù)名”,而oracle創(chuàng)建數(shù)據(jù)庫(kù)要對(duì)應(yīng)一個(gè)用戶,數(shù)據(jù)庫(kù)和用戶一般是一一對(duì)應(yīng)的,下面把oracle創(chuàng)建數(shù)據(jù)庫(kù)和用戶的步驟分享給大家。2015-07-07

