Oracle数据库搭建
第一步:关闭防火墙和 SELinux
(防止各种意外)root用户执行
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 目录),执行安装:
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.rpmcompat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
去网络上下载,并提前安装好:链接:https://pan.baidu.com/s/1sBM-8DCor9pViQvcgEY2QA 提取码:nvs9
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 上传到服务器,执行安装:
dnf localinstall -y /opt/oracle-database-ee-19c-1.0-1.x86_64.rpm
第三步:配置数据库实例(关键步骤)
/etc/init.d/oracledb_ORCLCDB-19c configure脚本会自动:
- 创建数据库文件(默认路径
/opt/oracle/oradata) - 初始化 CDB 和 PDB(默认 PDB 名为
ORCLPDB1) - 配置监听(默认端口 1521)
- 设置开机自启动
- 创建数据库文件(默认路径
执行时间约 5-10 分钟,最后输出
Database configuration completed successfully表示成功。
第四步:环境变量配置(oracle 用户执行)
切换到 oracle 用户并配置环境变量
su - oracle # 切换用户(自动进入 /home/oracle 目录)
vi .bash_profile # 编辑环境变量添加以下内容(适配默认安装路径)
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使环境变量生效
source .bash_profile启动Oracle
/etc/init.d/oracledb_ORCLCDB-19c start连接与测试
sqlplus / as sysdba
-- 查看当前的所有数据库
select name from v$database;修改 sys 用户密码
ALTER USER sys IDENTIFIED BY "Admin@ddh123";
ALTER USER system IDENTIFIED BY "Admin@ddh123";第五步:配置oracle自启动
配置 /etc/oratab(root 执行)
vi /etc/oratab# 找到并修改此行
ORCLCDB:/opt/oracle/product/19c/dbhome_1:Y用 chkconfig 管理服务,全程 root 操作:
# 添加脚本为系统服务
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 执行) 启动 / 查看服务状态,确认配置生效:
# 启动服务
service oracledb_ORCLCDB-19c start
# 查看状态(显示 "active/running" 或 "Database is running" 即正常)
systemctl status oracledb_ORCLCDB-19c第六步:启用归档模式
检查当前数据库模式并关闭数据库(oracle用户执行)
-- 登录数据库
sqlplus / as sysdba
-- 查看当前是否是否为归档模式
archive log list;
-- 若数据库处于打开状态,先关闭
shutdown immediate;启动数据库到mount状态并启用归档模式
-- 启动到mount状态(不打开数据库)
startup mount;
-- 启用归档模式
alter database archivelog;
-- 确认归档模式已启用(显示"Database log mode: Archive Mode")
archive log list;启用的状态,默认为200mb的三组归档日志,如果需要改为其他大小,先查看使用情况:
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; 检查状态
删除了一个组别就新建一个组别:
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 管理)
-- 创建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 设置保留策略)
# 退出sqlplus,启动RMAN
exit
rman target /# 设置控制文件和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 脚本存在且内容正确:
# 编辑脚本(若未创建)
vi /opt/oracle/scripts/rman_clean_arch.rman
# 写入以下内容(保留10天归档,根据需求调整天数)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;设置脚本权限:
chmod 644 /opt/oracle/scripts/rman_clean_arch.rman添加执行脚本 rman_clean_arch.sh
#!/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 {} \;赋予执行权限与正确属主
chmod +x /opt/oracle/scripts/rman_clean_arch.sh
chown oracle:oinstall /opt/oracle/scripts/rman_clean_arch.sh添加定时任务内容 (每天16点执行):oracle 用户操作
crontab -e# 每天16点执行归档清理,输出日志到指定文件(推荐保留日志用于排查)
0 16 * * * /bin/bash /opt/oracle/scripts/rman_clean_arch.sh >/opt/oracle/scripts/logs/cron_rman.log 2>&1每天定时观察使用情况:
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;第七步:创建表空间和用户
生产环境更推荐的"无限 + 可控"写法
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;