鏡像
https://docker.aityp.com/image/docker.io/truevoly/oracle-12c:latest
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/truevoly/oracle-12c:latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/truevoly/oracle-12c:latest docker.io/truevoly/oracle-12c:latest
docker images
創建并啟動容器
# 容器內端口默認1521,且通過 -p 參數修改不成功,所以只能修改外部的端口
docker run -itd --name oracle12c --restart=always -p 1522:1521 -e ORACLE_PWD=oracle -v /home/oracle/app/oracle12c/oradata:/home/oracle/app/oracle12c/oradata docker.io/truevoly/oracle-12c:latest
查看日志
docker logs -f --tail 100 oracle12c
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management consolePL/SQL procedure successfully completed.Starting import from '/docker-entrypoint-initdb.d':
ls: cannot access /docker-entrypoint-initdb.d/*: No such file or directory
Import finishedDatabase ready to use. Enjoy! ;)
登錄到容器內
docker exec -it oracle12c bash
配置環境變量
vi /etc/profile
export ORACLE_HOME=/u01/app/oracle-product/12.1.0/xe
export PATH=$ORACLE_HOME/bin:$PATH
source /etc/profilevi /home/oracle/.bashrc
export ORACLE_HOME=/u01/app/oracle-product/12.1.0/xe
export PATH=$ORACLE_HOME/bin:$PATH
source /home/oracle/.bashrc
登錄
# 必須要切到 oracle 用戶
su oracle
sqlplus / as sysdba
命令解釋:
- sqlplus / as sysdba : 使用操作系統認證以 SYSDBA 特權用戶身份連接到 Oracle 數據庫的命令
- sqlplus:Oracle 提供的命令行工具,用于與數據庫交互(SQL*Plus 的縮寫)。
- /:表示使用操作系統認證(OS Authentication),無需顯式輸入用戶名和密碼。
- as sysdba:以 SYSDBA 特權角色連接,擁有最高權限(如啟動 / 關閉數據庫、創建用戶等)。
- sqlplus sys/oracle as sysdba : 使用用戶名密碼以 SYSDBA 特權身份連接到 Oracle 數據庫 (不過這里用戶名密碼不管寫什么都能連接)
- sys/oracle:用戶名和密碼
- sys:Oracle 數據庫的超級管理員用戶(擁有最高權限)
- oracle:默認密碼
- sqlplus /nolog : 啟動 SQL*Plus 工具但不立即連接到數據庫的命令
- CONNECT sys/oracle AS SYSDBA :SQL*Plus 中使用用戶名密碼以 SYSDBA 特權身份連接到 Oracle 數據庫的命令。(同樣的這里用戶名密碼不管寫什么都能連接)
- CONNECT:SQL*Plus 內置命令,用于建立或切換數據庫連接(可簡寫為 CONN 或 LOGON)。
- conn / as sysdba 是 Oracle SQL*Plus 中使用操作系統認證以 SYSDBA 特權身份連接數據庫的命令
登錄異常
sqlplus / as sysdbaSQL*Plus: Release 12.1.0.2.0 Production on Tue Jun 10 11:32:04 2025Copyright (c) 1982, 2014, Oracle. All rights reserved.ERROR:
ORA-01017: invalid username/password; logon denied
解決:以oracle用戶登錄。
啟動數據庫
SQL> startup
ORACLE instance started.Total System Global Area 1610612736 bytes
Fixed Size 2924928 bytes
Variable Size 1006636672 bytes
Database Buffers 587202560 bytes
Redo Buffers 13848576 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
解決 cannot mount database in EXCLUSIVE mode
首先關閉數據庫
SHUTDOWN IMMEDIATE;
方法1
su oracle
# 查找共享內存和信號量:
ipcs -m
ipcs -s
# 清理共享內存和信號量:
ipcrm -m <shmid>
ipcrm -s <semid>
參考:https://blog.csdn.net/qq_47502724/article/details/144828940
方法2
和我在之前寫的Centos7 安裝oracle11 中用的方法一樣: 通過 fuser -k 釋放占用 lk<SID>
的進程。一般系統自帶 fuser 命令,但是我們裝的oracle 容器內沒有自帶,所以需要先安裝對應的命令。
sudo apt update
sudo apt install psmisc
需要先聯網 update ,再安裝 psmisc,聯網需要修改 /etc/resolv.conf ,添加 DNS(前提是宿主機也能聯網):
nameserver 223.5.5.5
nameserver 10.100.1.12
nameserver 114.114.114.114
在 Docker 容器中使用 vi 編輯文件時, 可能遇到一些體驗問題(如方向鍵亂碼、退格鍵失效等),可通過安裝最小化的 vim-tiny
apt-get install -y vim-tiny
ln -s /usr/bin/vim.tiny /usr/bin/vim # 替換vim為vim-tiny
lk<SID>
在 $ORACLE_HOME/dbs
su oracle
cd $ORACLE_HOME/dbs
fuser -u lkXE
fuser -k lkXE
fuser -u lkXE
查詢數據庫狀態
SELECT status FROM v$instance;STATUS
------------
OPEN
返回值說明:
- STARTED:實例已啟動,但未裝載數據庫。
- MOUNTED:實例已裝載數據庫(ALTER DATABASE MOUNT)。
- OPEN:數據庫正常打開,可讀寫。
- OPEN READ ONLY:數據庫只讀模式。
連接驗證
- SID 和 Service Name 均為 XE
- 用密碼密碼: sys/oracle 和 system/oracle
- sys 用戶:具有 “SYSDBA” 或者 “SYSOPER” 系統權限,登錄EM(企業管理器)也只能用這兩個身份,不能用normal(普通用戶)身份。SYSDBA是管理 Oracle 實例的,擁有最高的系統權限,可完成數據庫的所有管理任務,如創建數據庫、刪除數據庫、數據庫日志歸檔、執行不完全恢復,以及創建其它的SYSOPER和SYSDBA用戶等
- system 用戶:SYSTEM用戶:默認擁有普通DBA角色權限,能完成除備份恢復、升級之外的大部分數據庫管理任務。但只能用normal身份登錄EM,除非對它授予了SYSDBA或SYSOPER系統權限。如果SYSTEM用戶以AS SYSDBA登錄,其結果實際上是作為SYS用戶登錄的。
修改密碼
alter user system identified by test123;
alter user sys identified by test123;
刪除 Docker 容器
docker stop oracle12c
docker rm oracle12c