Oracle 21c Enterprise Edition 部署文档(CentOS 7.9)
Oracle 21c Enterprise Edition 部署文档(CentOS 7.9)
一、部署前必读
| 要求项 | 最低配置 | 推荐配置 | 本次使用 |
|---|---|---|---|
| 操作系统 | CentOS 7.6+ | CentOS 7.9 | CentOS 7.9 |
| 内存 | 4 GB | 8 GB+ | 7.6 GB |
| 硬盘剩余空间 | 50 GB | 100 GB+ | 437 GB |
| Oracle 安装包 | - | - | LINUX.X64_213000_db_home.zip (2.9 GB) |
| root 密码 | - | - | admin |
⚠️ 重要提醒
- 只能 CentOS 7.x,CentOS 8 / Rocky Linux / Ubuntu 都不行
- 安装前确保服务器能连外网(yum 需要下载依赖包)
- 本教程不用任何图形界面,全程命令行,复制粘贴即可
- 命令前标了
[root@localhost ~]#的用 root 执行,标了[oracle@localhost ~]$的用 oracle 执行
二、部署后数据库信息
| 项目 | 值 |
|---|---|
| 主机 IP | 你服务器的 IP(本文以 192.168.9.62 为例) |
| 监听端口 | 1521 |
| 数据库服务名 | orcl |
| 数据库 SID | orcl |
| ORACLE_HOME | /opt/oracle/product/21c/dbhome_1 |
| ORACLE_BASE | /opt/oracle |
| 字符集 | ZHS16GBK |
| 归档目录 | /oracle/archive_log/ |
账户密码表
| 用途 | 用户名 | 密码 |
|---|---|---|
| 操作系统登录 | oracle | Oracle123! |
| 数据库超级管理员 | SYS | Admin123! |
| 数据库管理员 | SYSTEM | Admin123! |
我用夸克网盘给你分享了「LINUX.X64_213000_db_home.zip」
链接:https://pan.quark.cn/s/eeefd54762a7
三、开始部署
步骤1:确认系统环境
用 root 用户登录服务器,依次执行:
# 1.1 确认是 CentOS 7
[root@localhost ~]# cat /etc/os-release | grep "CentOS Linux 7"
# 应该看到: CentOS Linux 7 (Core)
# 1.2 确认内存(至少 4 GB)
[root@localhost ~]# free -h | grep Mem
# total used free shared buff/cache available
# Mem: xxxG ← 看这个 total 列
# 1.3 确认磁盘空间(至少 50 GB)
[root@localhost ~]# df -h /
# 看 "可用" 列
步骤2:确认安装包
[root@localhost ~]# ls -lh /root/LINUX.X64_213000_db_home.zip
# 应该看到文件,大小约 2.9G
# 如果没有,请先上传安装包到 /root/
步骤3:安装依赖包
[root@localhost ~]# yum install -y gcc gcc-c++ libaio-devel unzip ksh sysstat libnsl
看到 "完毕!" 表示成功。过程约 2-5 分钟。
步骤4:创建用户和目录
Oracle 需要专用的操作系统用户和组来运行,不能直接用 root。
# 4.1 创建 oracle 用户组
[root@localhost ~]# groupadd -f oinstall
[root@localhost ~]# groupadd -f dba
[root@localhost ~]# groupadd -f oper
# 4.2 创建 oracle 用户
[root@localhost ~]# useradd -g oinstall -G dba,oper -s /bin/bash -m oracle
# 4.3 设置 oracle 用户密码
[root@localhost ~]# echo 'oracle:Oracle123!' | passwd --stdin oracle
# 4.4 创建数据库相关目录
[root@localhost ~]# mkdir -p /opt/oracle/product/21c/dbhome_1
[root@localhost ~]# mkdir -p /opt/oracle/oraInventory
[root@localhost ~]# mkdir -p /oracle/archive_log
# 4.5 设置目录权限(oracle 用户需要读写这些目录)
[root@localhost ~]# chown -R oracle:oinstall /opt/oracle /oracle/archive_log
参数说明:
| 命令 | 说明 |
|---|---|
groupadd oinstall |
Oracle 软件安装组,拥有此组才能安装和升级 Oracle 软件 |
groupadd dba |
数据库管理员组,拥有此组的用户可以以 OS 认证登录数据库(sqlplus / as sysdba) |
groupadd oper |
数据库操作员组,权限低于 dba,可以启停数据库但不能访问数据 |
useradd -g oinstall -G dba,oper |
创建 oracle 用户,主组 oinstall,附加组 dba、oper |
-s /bin/bash |
指定 shell 为 bash |
-m |
自动创建家目录 /home/oracle |
chown -R oracle:oinstall |
把 /opt/oracle 和 /oracle/archive_log 的所有权改为 oracle 用户 + oinstall 组,这样才能在里面写文件 |
步骤5:配置内核参数
Oracle 数据库对操作系统的内核参数有要求(主要是内存和文件句柄),需要用 sysctl 调整。
[root@localhost ~]# cat >> /etc/sysctl.conf << 'EOF'
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
EOF
# 使参数立即生效(不用重启)
[root@localhost ~]# sysctl -p
参数说明:
| 参数 | 值 | 分类 | 说明 |
|---|---|---|---|
fs.file-max |
6815744 | 文件句柄 | 系统级最大打开文件数。Oracle 需要打开大量数据文件、日志文件、网络 socket,这个值要够大 |
kernel.sem |
250 32000 100 128 | 信号量 | 四个值:①每个 set 最大信号量数 ②系统最大信号量数 ③每次调用最大操作数 ④系统最大信号量集数。Oracle 启动需要大量信号量来协调进程 |
kernel.shmmni |
4096 | 共享内存 | 系统最多允许创建的共享内存段数。Oracle SGA 使用共享内存,需要多段 |
kernel.shmall |
1073741824 | 共享内存 | 系统能使用的共享内存总大小(单位:页,即 4KB)。这个值约等于 4TB,足够大 |
kernel.shmmax |
4398046511104 | 共享内存 | 单个共享内存段最大允许大小(约 4TB)。Oracle SGA 不能超过这个值 |
net.core.rmem_default |
262144 | 网络缓冲 | 默认 TCP 接收缓冲区大小(256KB)。Oracle 网络传输的数据块较大,加大缓冲区减少网络等待 |
net.core.rmem_max |
4194304 | 网络缓冲 | TCP 接收缓冲区最大允许值(4MB) |
net.core.wmem_default |
262144 | 网络缓冲 | 默认 TCP 发送缓冲区大小(256KB) |
net.core.wmem_max |
1048576 | 网络缓冲 | TCP 发送缓冲区最大允许值(1MB) |
fs.aio-max-nr |
1048576 | 异步 IO | 系统允许的最大并发异步 I/O 请求数。Oracle 大量使用异步 IO,默认值太小会导致性能下降 |
net.ipv4.ip_local_port_range |
9000 65500 | 网络端口 | 本地可用端口范围。Oracle 数据库和客户端之间需要大量 TCP 连接,扩大端口范围防止端口耗尽 |
步骤6:配置资源限制
[root@localhost ~]# cat >> /etc/security/limits.conf << 'EOF'
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
EOF
参数说明:
| 参数 | soft | hard | 说明 |
|---|---|---|---|
nproc |
2047 | 16384 | oracle 用户能启动的最大进程数。Oracle 启动后会创建几十个后台进程(DBWr、LGWR、CKPT 等),连接数多时进程更多 |
nofile |
1024 | 65536 | 最大打开文件数。Oracle 同时打开数据文件、控制文件、redo 日志、归档日志、监听 socket,值太小会报 "too many open files" |
stack |
10240 | 32768 | 栈大小(KB),oracle 的每个进程都需要 |
soft= 软限制(警告阈值),hard= 硬限制(绝对上限,不可超越)
步骤7:配置 oracle 用户环境变量
[root@localhost ~]# cat >> /home/oracle/.bashrc << 'EOF'
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/21c/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
EOF
参数说明:
| 变量 | 值 | 说明 |
|---|---|---|
ORACLE_BASE |
/opt/oracle | Oracle 基础目录,是所有 Oracle 文件(软件、数据、诊断日志)的根目录 |
ORACLE_HOME |
/opt/oracle/product/21c/dbhome_1 | Oracle 软件安装目录,存放 sqlplus、lsnrctl、dbca 等可执行文件 |
ORACLE_SID |
orcl | Oracle 实例标识符。同一台机器可能有多个数据库实例,靠这个区分要操作哪个 |
PATH |
加上了 $ORACLE_HOME/bin |
让 oracle 用户在任意目录都能直接敲 sqlplus、lsnrctl 等命令,不用写完整路径 |
LD_LIBRARY_PATH |
加上了 $ORACLE_HOME/lib |
动态库搜索路径,让 oracle 程序能找到自己的 .so 库文件 |
配置完成后,切换到 oracle 用户才会生效。后面步骤中
su - oracle会自动加载。
步骤8:复制并解压安装包
# 8.1 把 ZIP 包复制到 oracle 用户目录
[root@localhost ~]# cp /root/LINUX.X64_213000_db_home.zip /home/oracle/
# 8.2 设所有权为 oracle
[root@localhost ~]# chown oracle:oinstall /home/oracle/LINUX.X64_213000_db_home.zip
# 8.3 切换到 oracle 用户
[root@localhost ~]# su - oracle
切换用户后,命令提示符会从
[root@localhost ~]#变成[oracle@localhost ~]$,说明当前是 oracle 用户。
接着以 oracle 用户执行:
# 进入安装目录
[oracle@localhost ~]$ cd /opt/oracle/product/21c/dbhome_1
# 解压(大约 10 分钟,耐心等)
[oracle@localhost dbhome_1]$ unzip -q /home/oracle/LINUX.X64_213000_db_home.zip
# 解压后退出 oracle 用户,回到 root
[oracle@localhost dbhome_1]$ exit
看到提示符变回
[root@localhost ~]#说明已经回到 root。
步骤9:创建安装响应文件
# 先切换到 oracle 用户
[root@localhost ~]# su - oracle
# 创建响应文件
[oracle@localhost ~]$ cat > /home/oracle/db_install.rsp << 'EOF'
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v21.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/opt/oracle/oraInventory
ORACLE_HOME=/opt/oracle/product/21c/dbhome_1
ORACLE_BASE=/opt/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.rootconfig.executeRootScript=false
EOF
# 验证文件已创建
[oracle@localhost ~]$ ls -la /home/oracle/db_install.rsp
关键参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
oracle.install.option |
INSTALL_DB_SWONLY | 只安装数据库软件(Software Only),不创建数据库。创建数据库放在后面单独用 dbca 命令做 |
INVENTORY_LOCATION |
/opt/oracle/oraInventory | 清单目录,记录已安装的 Oracle 产品信息,类似"程序列表" |
ORACLE_HOME |
/opt/oracle/product/21c/dbhome_1 | Oracle 软件安装目录,存放可执行文件、库文件等 |
ORACLE_BASE |
/opt/oracle | Oracle 基础目录,通常放 Oracle 软件和数据文件的上级目录 |
oracle.install.db.InstallEdition |
EE | 安装版本。EE = Enterprise Edition(企业版),功能最全 |
oracle.install.db.OSDBA_GROUP |
dba | 操作系统 DBA 组,拥有该组的用户可以以 OS 认证连接数据库 |
oracle.install.db.rootconfig.executeRootScript |
false | 不自动执行 root 配置脚本,稍后手动执行(防止权限问题) |
步骤10:静默安装数据库软件(⏱️ 约 20-30 分钟)
# 确保当前是 oracle 用户(提示符是 [oracle@localhost ~]$)
# 如果不是,执行 su - oracle
[oracle@localhost ~]$ cd /opt/oracle/product/21c/dbhome_1
[oracle@localhost dbhome_1]$ ./runInstaller -silent -ignorePrereqFailure \
-responseFile /home/oracle/db_install.rsp \
-waitforcompletion
参数说明:
| 参数 | 说明 |
|---|---|
-silent |
静默模式,不弹图形界面,全自动执行 |
-ignorePrereqFailure |
忽略所有前置检查失败(因为 CentOS 7 不在 Oracle 官方认证列表中,会报 INS-13001,不影响安装) |
-responseFile /home/oracle/db_install.rsp |
指定响应文件路径,响应文件里写好了所有安装参数(ORACLE_HOME、字符集等) |
-waitforcompletion |
等待安装完全结束再返回,不加这个命令会立即返回后台运行 |
⏱️ 这一步需要 20-30 分钟,期间不要关终端。
看到
Successfully Setup Software with warning(s).就说明安装成功。过程中可能有一些 WARNING,是正常的,不用管。
步骤11:执行 root 配置脚本
# 回到 root 用户执行
[oracle@localhost dbhome_1]$ exit
[root@localhost ~]# /opt/oracle/oraInventory/orainstRoot.sh
[root@localhost ~]# /opt/oracle/product/21c/dbhome_1/root.sh
第二行
/opt/oracle/product/21c/dbhome_1/root.sh执行后会提示/usr/local/bin目录,直接按回车就行。
步骤12:创建监听
# 切换到 oracle 用户
[root@localhost ~]# su - oracle
# 创建默认监听
[oracle@localhost ~]$ netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp
# 看到 "成功完成 Oracle Net Services 配置" 即可
说明:
netca= Oracle Net Configuration Assistant,负责创建监听器和网络配置- 默认监听配置完成后会监听 TCP 1521 端口,服务名默认就是
orcl - 如果不用静默模式,会弹出图形界面让你一步步点,用
-silent参数全程无需交互
步骤13:修改监听绑定地址(⚠️ 重要!不做这一步远程连不上)
# 依然是 oracle 用户
# 设置监听配置文件路径
[oracle@localhost ~]$ LSO=/opt/oracle/homes/OraDB21Home1/network/admin/listener.ora
# 查看当前配置(确认是否存在)
[oracle@localhost ~]$ cat $LSO
# 修改:把 localhost 改成 0.0.0.0,这样外部 IP 才能连接
[oracle@localhost ~]$ sed -i 's/HOST = localhost/HOST = 0.0.0.0/' $LSO
# 停掉旧监听
[oracle@localhost ~]$ lsnrctl stop
# 启动新监听
[oracle@localhost ~]$ lsnrctl start
# 应该看到 Listening on: (ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))
说明:
HOST = localhost:监听只绑定本地回环地址,只有本机(127.0.0.1)能连接,外部无法访问HOST = 0.0.0.0:监听绑定所有网络接口,允许来自任意 IP 的连接请求
步骤14:关闭防火墙
# 先回到 root 用户
[oracle@localhost ~]$ exit
# 关闭并禁用防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
# 确认已关闭
[root@localhost ~]# firewall-cmd --state
# 应该输出: not running
步骤15:创建数据库(⏱️ 约 10-15 分钟)
# 切换到 oracle 用户
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname orcl \
-sid orcl \
-characterSet ZHS16GBK \
-sysPassword Admin123! \
-systemPassword Admin123! \
-storageType FS \
-datafileDestination /opt/oracle/oradata \
-redoLogFileSize 500 \
-enableArchive true \
-archiveLogDest /oracle/archive_log
参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
-silent |
- | 静默模式,不弹图形界面,全程命令行 |
-createDatabase |
- | 执行创建数据库操作 |
-templateName General_Purpose.dbc |
模板名 | 使用 Oracle 自带的"通用"模板,参数都已优化,直接可用 |
-gdbname orcl |
orcl | 全局数据库名(Global Database Name),对外提供服务的名字,客户端连接时用 |
-sid orcl |
orcl | 系统标识符(System Identifier),Oracle 实例名,操作系统层面区分不同实例用 |
-characterSet ZHS16GBK |
ZHS16GBK | 数据库字符集。ZHS16GBK = GBK 编码,支持中文 |
-sysPassword Admin123! |
Admin123! | SYS 用户的密码。SYS 是数据库最高权限用户,相当于 MySQL 的 root |
-systemPassword Admin123! |
Admin123! | SYSTEM 用户的密码。SYSTEM 是数据库管理员,权限仅次于 SYS |
-storageType FS |
FS | 存储类型。FS = File System,文件系统存储(另一选项是 ASM,需要额外配置) |
-datafileDestination /opt/oracle/oradata |
路径 | 数据文件存放目录。数据库的所有数据文件、控制文件、redo 日志都会放在这里 |
-redoLogFileSize 500 |
500 MB | 每个 redo 日志组的大小(单位 MB)。redo 日志记录数据修改,用于数据库恢复 |
-enableArchive true |
true | 创建数据库时直接开启归档模式(ARCHIVELOG),否则默认不开启 |
-archiveLogDest /oracle/archive_log |
路径 | 归档日志存放目录。开启归档后,redo 日志文件被归档备份到这里 |
⏱️ 约 10-15 分钟。进度从 10% → 100%,看到
数据库创建完成即可。参数说明:
-gdbname orcl:全局数据库名-sid orcl:实例标识-characterSet ZHS16GBK:GBK 字符集-enableArchive true:开启归档模式-archiveLogDest /oracle/archive_log:归档日志存放位置-redoLogFileSize 500:每组 redo log 大小 500MB
步骤16:配置强制日志和附加日志
# 依然是 oracle 用户
[oracle@localhost ~]$ export ORACLE_SID=orcl
这里使用 sqlplus 连接数据库,逐条执行以下 SQL:
[oracle@localhost ~]$ sqlplus / as sysdba
进入 sqlplus 后(提示符变成 SQL>),逐条执行:
SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
SQL> ALTER SYSTEM SET archive_lag_target=1800 SCOPE=BOTH;
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> EXIT
SQL 命令说明:
| SQL 命令 | 说明 |
|---|---|
ALTER DATABASE FORCE LOGGING; |
强制日志记录。开启后,所有操作都会记录到 redo 日志,即使表空间设置了 NOLOGGING,保障数据完整性和 CDC 同步 |
ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS |
附加日志 - 主键。开启后,CDC 同步时若数据被删除,能通过主键定位到被删行,支持 PK 变更捕获 |
ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS |
附加日志 - 唯一索引。开启后,CDC 同步时能通过唯一索引(UK/bitmap index)定位行,支持 UI 变更捕获 |
ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS |
附加日志 - 外键。开启后,CDC 同步时外键关联的父子表变更可以正确追踪,支持 FK 依赖链 |
ALTER SYSTEM SET archive_lag_target=1800 SCOPE=BOTH; |
设置归档日志切换间隔为 1800 秒(30 分钟)。每 30 分钟强制切换一次 redo 日志,生成新的归档日志文件,防止日志堆积 |
ALTER SYSTEM SWITCH LOGFILE; |
手动触发一次 redo 日志切换,立即生成一个归档日志,验证归档是否正常工作 |
每条执行成功后会显示 "数据库已更改" 或 "系统已更改"。
注意:如果 sqlplus 中显示的是乱码(如"????"),这是因为 CentOS 7 缺少中文语言包。执行以下命令修复:
[oracle@localhost ~]$ echo 'export NLS_LANG=AMERICAN_AMERICA.AL32UTF8' >> ~/.bashrc [oracle@localhost ~]$ source ~/.bashrc解释:
NLS_LANG=AMERICAN_AMERICA.AL32UTF8把 sqlplus 的输出语言设为英文 + UTF-8 编码,这样就不会出现中文乱码了。
补充:开启全部字段的附加日志
如果 CDC 工具要求开启全部字段的变更记录(ALL mode),在前面步骤16执行完后再多跑一条:
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
解释:
(ALL) COLUMNS:除了 PK/UI/FK 外,还对 每张表的每个字段 都记录变更信息- ⚠️ 这会大幅增加日志量(可能几十倍),生产环境慎用
- 大多数 CDC 场景 PK+UI+FK 已经够用,除非明确需要才开这个
EXIT命令退出 sqlplus,回到 oracle 用户命令行。
EXIT命令退出 sqlplus,回到 oracle 用户命令行。
四、验证安装
# 确保是 oracle 用户
[oracle@localhost ~]$ export ORACLE_SID=orcl
# 1. 检查监听状态
[oracle@localhost ~]$ lsnrctl status
# 应该看到 orcl 服务状态为 READY,端口 1521(HOST=0.0.0.0)
# 2. 进入数据库检查
[oracle@localhost ~]$ sqlplus / as sysdma
SQL> COLUMN log_mode FORMAT A20
SQL> SELECT log_mode, force_logging,
supplemental_log_data_pk AS pk,
supplemental_log_data_ui AS ui,
supplemental_log_data_fk AS fk
FROM v$database;
SQL> SELECT instance_name, status, version FROM v$instance;
SQL> SELECT name, open_mode FROM v$database;
SQL> EXIT
正常结果应该如下:
| 检查项 | 期望值 |
|---|---|
| LOG_MODE | ARCHIVELOG |
| FORCE_LOGGING | YES |
| pk | YES |
| ui | YES |
| fk | YES |
| INSTANCE_NAME | orcl |
| STATUS | OPEN |
| VERSION | 21.0.0.0.0 |
| OPEN_MODE | READ WRITE |
五、客户端连接
打开数据库客户端工具(如 PL/SQL Developer、Navicat、DBeaver),填写以下信息:
| 字段 | 值 |
|---|---|
| 主机名/IP | 你服务器的 IP 地址(如 192.168.9.62) |
| 端口 | 1521 |
| 服务名 | orcl |
| 用户名 | system |
| 密码 | Admin123! |
如果连不上,按顺序排查
在服务器上排查(oracle 用户):
# 1. 确认监听绑定了 0.0.0.0
[oracle@localhost ~]$ grep HOST /opt/oracle/homes/OraDB21Home1/network/admin/listener.ora
# 应该是 HOST = 0.0.0.0,如果是 localhost 说明步骤13没做
# 2. 确认防火墙已关闭
[root@localhost ~]# firewall-cmd --state
# 应该输出: not running
# 3. 确认服务已注册到监听
[oracle@localhost ~]$ lsnrctl status | grep orcl
# 应该看到 "orcl" 和 "READY"
在客户端电脑上排查(Windows 命令行 cmd):
C:\> ping 192.168.9.62
# 能 ping 通说明网络没问题
C:\> telnet 192.168.9.62 1521
# 如果通会变成黑屏/空光标,说明端口没问题
# 如果提示 "telnet 不是内部或外部命令",需要先去 Windows 功能里开启 Telnet 客户端
六、常见问题
安装失败需要重装
# 以 root 执行以下清理命令
[root@localhost ~]# rm -rf /opt/oracle/oraInventory
[root@localhost ~]# rm -rf /tmp/InstallActions*
[root@localhost ~]# mkdir -p /opt/oracle/oraInventory
[root@localhost ~]# chown -R oracle:oinstall /opt/oracle/oraInventory
# 然后从步骤10重新开始
报错 ORA-01034: Oracle not available
[oracle@localhost ~]$ export ORACLE_SID=orcl
[oracle@localhost ~]$ sqlplus / as sysdba
SQL> STARTUP
监听启动后服务列表为空(没有 orcl)
[oracle@localhost ~]$ export ORACLE_SID=orcl
[oracle@localhost ~]$ sqlplus / as sysdba
SQL> ALTER SYSTEM REGISTER;
# 等 10 秒后检查
SQL> EXIT
[oracle@localhost ~]$ lsnrctl status
数据库开机不会自动启动
# 以 root 执行,配置数据库自动启动
[root@localhost ~]# sed -i 's/ORACLE_HOME_LISTNER=$1/ORACLE_HOME_LISTNER=\/opt\/oracle\/product\/21c\/dbhome_1/' /opt/oracle/product/21c/dbhome_1/bin/dbstart
[root@localhost ~]# cat >> /etc/oratab << 'EOF'
orcl:/opt/oracle/product/21c/dbhome_1:Y
EOF
# 设置开机自启
[root@localhost ~]# cat > /etc/systemd/system/oracle.service << 'EOF'
[Unit]
Description=Oracle Database Service
After=network.target
[Service]
Type=forking
User=oracle
Group=oinstall
ExecStart=/opt/oracle/product/21c/dbhome_1/bin/dbstart /opt/oracle/product/21c/dbhome_1
ExecStop=/opt/oracle/product/21c/dbhome_1/bin/dbshut /opt/oracle/product/21c/dbhome_1
Restart=no
[Install]
WantedBy=multi-user.target
EOF
[root@localhost ~]# systemctl enable oracle

浙公网安备 33010602011771号