Skip to content

Oracle数据库搭建

第一步:关闭防火墙和 SELinux

(防止各种意外)root用户执行

bash
systemctl stop firewalld && systemctl disable firewalld

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

第二步:上传并安装本地包/依赖包

oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm 上传到服务器(如 /tmp 目录),执行安装:

bash
dnf localinstall -y /tmp/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
  • 该包会自动完成:创建 oracle 用户 / 组、配置系统参数(sysctl.conf)、安装依赖包等,无需手动配置。

如果缺少依赖:

  • compat-libcap1-1.10-1.x86_64.rpm
  • compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

去网络上下载,并提前安装好:链接:https://pan.baidu.com/s/1sBM-8DCor9pViQvcgEY2QA 提取码:nvs9

bash
dnf localinstall compat-libcap1-1.10-1.x86_64.rpm

dnf localinstall compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

oracle-database-ee-19c-1.0-1.x86_64.rpm 上传到服务器,执行安装:

bash
dnf localinstall -y /opt/oracle-database-ee-19c-1.0-1.x86_64.rpm

第三步:配置数据库实例(关键步骤)

bash
/etc/init.d/oracledb_ORCLCDB-19c configure
  • 脚本会自动:

    • 创建数据库文件(默认路径 /opt/oracle/oradata
    • 初始化 CDB 和 PDB(默认 PDB 名为 ORCLPDB1
    • 配置监听(默认端口 1521)
    • 设置开机自启动
  • 执行时间约 5-10 分钟,最后输出 Database configuration completed successfully 表示成功。

第四步:环境变量配置(oracle 用户执行)

切换到 oracle 用户并配置环境变量

bash
su - oracle # 切换用户(自动进入 /home/oracle 目录)

vi .bash_profile # 编辑环境变量

添加以下内容(适配默认安装路径)

bash
export ORACLE_BASE=/opt/oracle

export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1

export ORACLE_SID=ORCLCDB # 默认 CDB 实例名

export PATH=$PATH:$ORACLE_HOME/bin

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

使环境变量生效

bash
source .bash_profile

启动Oracle

bash
/etc/init.d/oracledb_ORCLCDB-19c start

连接与测试

sql
sqlplus / as sysdba

-- 查看当前的所有数据库

select name from v$database;

修改 sys 用户密码

sql
ALTER USER sys IDENTIFIED BY "Admin@ddh123";

ALTER USER system IDENTIFIED BY "Admin@ddh123";

第五步:配置oracle自启动

配置 /etc/oratab(root 执行)

bash
vi /etc/oratab
bash
# 找到并修改此行
ORCLCDB:/opt/oracle/product/19c/dbhome_1:Y

chkconfig 管理服务,全程 root 操作:

bash
# 添加脚本为系统服务
chkconfig --add oracledb_ORCLCDB-19c

# 设置 3/4/5 运行级自启动
chkconfig --level 345 oracledb_ORCLCDB-19c on

# 验证自启动配置(3/4/5 列显示 "on" 即成功)
chkconfig --list oracledb_ORCLCDB-19c

测试服务(root 执行) 启动 / 查看服务状态,确认配置生效:

bash
# 启动服务
service oracledb_ORCLCDB-19c start

# 查看状态(显示 "active/running" 或 "Database is running" 即正常)
systemctl status oracledb_ORCLCDB-19c

第六步:启用归档模式

检查当前数据库模式并关闭数据库(oracle用户执行)

sql
-- 登录数据库
sqlplus / as sysdba

-- 查看当前是否是否为归档模式
archive log list;

-- 若数据库处于打开状态,先关闭
shutdown immediate;

启动数据库到mount状态并启用归档模式

sql
-- 启动到mount状态(不打开数据库)
startup mount;

-- 启用归档模式
alter database archivelog;

-- 确认归档模式已启用(显示"Database log mode: Archive Mode")
archive log list;

启用的状态,默认为200mb的三组归档日志,如果需要改为其他大小,先查看使用情况:

sql
select v.group#, member,v.bytes/1024/1024 as size_mb, v.status from v$logfile l join v$log v on l.group#=v.group#;

-- 逐个删除状态为INACTIVE的日志组
alter database drop logfile group 1;

alter database drop logfile group 2;

alter database drop logfile group 3;

可以通过 ALTER SYSTEM SWITCH LOGFILE; 切换日志,通过 ALTER SYSTEM CHECKPOINT; 检查状态

删除了一个组别就新建一个组别:

sql
alter database add logfile group 1 ('/opt/oracle/oradata/ORCLCDB/redoA1.log') size 2048M;

alter database add logfile group 2 ('/opt/oracle/oradata/ORCLCDB/redoA2.log') size 2048M;

alter database add logfile group 3 ('/opt/oracle/oradata/ORCLCDB/redoA3.log') size 2048M;

依次操作建立三组替换掉原来的三组;

然后开启数据库 alter database open;

设置归档日志路径(使用快速恢复区 FRA 管理)

sql
-- 创建FRA目录(若未存在,需在OS层先创建并授权oracle用户)
-- 示例:mkdir -p /opt/oracle/fast_recovery_area; chown -R oracle:oinstall /opt/oracle/fast_recovery_area

-- 设置FRA路径和大小(按30天归档量估算,建议至少100GB)
alter system set db_recovery_file_dest='/opt/oracle/fast_recovery_area' scope=spfile;

alter system set db_recovery_file_dest_size=150G scope= BOTH; -- 根据实际需求调整

-- 设置归档日志写入FRA
alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=spfile;

-- 重启数据库使配置生效
shutdown immediate;

startup;

配置归档日志保留 10 天(通过 RMAN 设置保留策略)

bash
# 退出sqlplus,启动RMAN
exit

rman target /
sql
# 设置控制文件和SPFILE自动备份
configure controlfile autobackup on;

# 设置归档日志保留7天
configure retention policy to recovery window of 7 days;

# 验证配置
show retention policy;

# 退出RMAN
exit

创建 RMAN 清理脚本

确保 /opt/oracle/scripts/rman_clean_arch.rman 脚本存在且内容正确:

bash
# 编辑脚本(若未创建)
vi /opt/oracle/scripts/rman_clean_arch.rman

# 写入以下内容(保留10天归档,根据需求调整天数)
sql
RUN {

-- 验证归档日志状态
CROSSCHECK ARCHIVELOG ALL;

-- 删除已过期归档(标记为EXPIRED的)
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

-- 删除10天前且已备份的归档(关键安全措施)
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-10'
BACKED UP 1 TIMES TO DEVICE TYPE DISK;

-- 根据保留策略删除过期备份
DELETE NOPROMPT OBSOLETE;

}

-- 显示清理结果摘要
LIST ARCHIVELOG ALL;

EXIT;

设置脚本权限:

bash
chmod 644 /opt/oracle/scripts/rman_clean_arch.rman

添加执行脚本 rman_clean_arch.sh

bash
#!/bin/bash

# ============================================================
# RMAN 自动归档清理脚本
# 执行用户:oracle
# 位置:/opt/oracle/scripts/rman_clean_arch.sh
# ============================================================

# 1. 加载 oracle 用户环境
. /home/oracle/.bash_profile

# 2. 定义日志目录与文件名
LOG_DIR=/opt/oracle/scripts/logs
mkdir -p "$LOG_DIR"
LOG_FILE=$LOG_DIR/RCLN_$(date +%Y%m%d_%H%M%S).log

# 3. 执行 RMAN 清理归档脚本
/opt/oracle/product/19c/dbhome_1/bin/rman target / \
cmdfile=/opt/oracle/scripts/rman_clean_arch.rman \
log=$LOG_FILE

# 4. 可选:删除30天前的旧日志,防止磁盘堆积
find "$LOG_DIR" -type f -name "RCLN_*.log" -mtime +30 -exec rm -f {} \;

赋予执行权限与正确属主

bash
chmod +x /opt/oracle/scripts/rman_clean_arch.sh

chown oracle:oinstall /opt/oracle/scripts/rman_clean_arch.sh

添加定时任务内容 (每天16点执行):oracle 用户操作

bash
crontab -e
bash
# 每天16点执行归档清理,输出日志到指定文件(推荐保留日志用于排查)
0 16 * * * /bin/bash /opt/oracle/scripts/rman_clean_arch.sh >/opt/oracle/scripts/logs/cron_rman.log 2>&1

每天定时观察使用情况:

sql
SELECT
    name,
    ROUND(space_limit/1024/1024/1024,2) as limit_gb,
    ROUND(space_used/1024/1024/1024,2) as used_gb,
    ROUND(space_reclaimable/1024/1024/1024,2) as reclaimable_gb,
    ROUND((space_used - space_reclaimable)/1024/1024/1024,2) as actual_used_gb,
    ROUND((space_used/space_limit)*100,2) as pct_used
FROM v$recovery_file_dest;

第七步:创建表空间和用户

生产环境更推荐的"无限 + 可控"写法

sql
create tablespace data_tqmes datafile

'/opt/oracle/oradata/ORCLCDB/data_tqmes/data_tqmes01.dbf' size 10G autoextend on next 2G maxsize unlimited,
'/opt/oracle/oradata/ORCLCDB/data_tqmes/data_tqmes02.dbf' size 10G autoextend on next 2G maxsize unlimited,
'/opt/oracle/oradata/ORCLCDB/data_tqmes/data_tqmes03.dbf' size 10G autoextend on next 2G maxsize unlimited
extent management local autoallocate segment space management auto;

create user c##rmes identified by "rmes,-123" default tablespace data_rmes;

grant connect,dba,resource to c##rmes;

grant unlimited tablespace to c##rmes;

HiMind 工业互联网平台 技术文档