📅 整理日期:2026-06-22
🎯 适用版本:Oracle Database 19c (19.3.0.0.0)
📦 架构类型:单机单实例
💾 字符集:AL32UTF8(推荐)


📑 目录(点击跳转)


一、环境准备

1.1 操作系统要求

项目要求
操作系统CentOS 7 / RHEL 7+
CPU至少 4 核(推荐 8 核+)
内存至少 8GB(推荐 16GB+,4GB 可安装但性能受限)
系统盘至少 200GB(Oracle Home + 系统文件)
数据盘至少 500GB(数据文件 + 归档日志)
# 检查当前系统信息
cat /etc/redhat-release
free -h
nproc

1.2 创建用户和组

# ========================================================
# 创建 Oracle 用户和组(直接复制执行)
# ========================================================

# 创建组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmfcdba
groupadd -g 54327 asmdba

# 创建用户并加入组
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmfcdba,asmdba oracle

# 设置密码
passwd oracle
# ⚠️⚠️⚠️ 需替换:Oracle 操作系统用户密码,改为你的操作系统用户密码
# 输入密码:Oracle#2024

1.3 设置内核参数

# ========================================================
# 设置内核参数(直接复制执行)
# ========================================================

cat >> /etc/sysctl.conf << 'EOF'
# Oracle 19c 内核参数
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF

# 使参数生效
sysctl -p

# 设置用户资源限制
cat >> /etc/security/limits.conf << 'EOF'
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
EOF

# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 永久禁用(重启后生效)
cat >> /etc/rc.d/rc.local << 'EOF'
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
chmod +x /etc/rc.d/rc.local

1.4 安装依赖包

# ========================================================
# 安装依赖包(直接复制执行)
# ========================================================

# 配置 yum 源(CentOS 7 EOL)
cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
[base]
name=CentOS-7 - Base
baseurl=https://vault.centos.org/7.9.2009/os/x86_64/
gpgcheck=0
enabled=1

[updates]
name=CentOS-7 - Updates
baseurl=https://vault.centos.org/7.9.2009/updates/x86_64/
gpgcheck=0
enabled=1

[extras]
name=CentOS-7 - Extras
baseurl=https://vault.centos.org/7.9.2009/extras/x86_64/
gpgcheck=0
enabled=1
EOF

# 清理缓存并更新
yum clean all
yum makecache

# 安装依赖包
yum install -y \
    binutils \
    compat-libcap1 \
    compat-libstdc++-33 \
    elfutils-libelf \
    elfutils-libelf-devel \
    fontconfig-devel \
    glibc \
    glibc-devel \
    ksh \
    libaio \
    libaio-devel \
    libX11 \
    libXau \
    libXi \
    libXrender \
    libXrender-devel \
    libstdc++-devel \
    libxcb \
    libibverbs \
    make \
    policycoreutils \
    policycoreutils-python \
    smartmontools \
    sysstat \
    wget

1.5 创建目录结构

# ========================================================
# 创建目录结构(直接复制执行)
# ========================================================

# 创建目录
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
# ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
mkdir -p /u01/app/oracle/admin/SMOM/adump
# ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
mkdir -p /u01/oradata/SMOM
# ⚠️⚠️⚠️ 需替换:快速恢复区(FRA)路径,改为你的实际恢复区目录
mkdir -p /u01/app/oracle/fast_recovery_area
# ⚠️⚠️⚠️ 需替换:备份文件存储路径,改为你的实际备份目录,确保有足够磁盘空间
mkdir -p /u01/backup
# ⚠️⚠️⚠️ 需替换:Oracle 库存目录路径,改为你的实际库存目录
mkdir -p /u01/app/oraInventory

# 设置权限
chown -R oracle:oinstall /u01
chmod -R 775 /u01

# 创建 oratab 文件
touch /etc/oratab
chmod 644 /etc/oratab

二、Oracle 软件安装

2.1 解压安装包

# ========================================================
# 解压 Oracle 19c 安装包(直接复制执行)
# ========================================================

# 切换到 oracle 用户
su - oracle

# 解压安装包(假设安装包已上传到 /tmp)
cd /tmp
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
unzip -q LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.0.0/dbhome_1/

# 验证解压结果
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
ls -la /u01/app/oracle/product/19.0.0/dbhome_1/bin/ | head -10

2.2 创建响应文件

# ========================================================
# 创建响应文件(直接复制执行)
# ========================================================

cat > /tmp/db_sw_install.rsp << 'EOF'
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstallresponse_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
SELECTED_LANGUAGES=en,zh_CN
# ⚠️⚠️⚠️ 需替换:Oracle 主机名,改为你的服务器实际主机名
ORACLE_HOSTNAME=localhost
UNIX_GROUP_NAME=oinstall
# ⚠️⚠️⚠️ 需替换:Oracle 库存目录路径,改为你的实际库存目录
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_BASE=/u01/app/oracle
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
oracle.install.db.InstallEdition=EE
OSDBA_GROUP=dba
OSOPER_GROUP=oper
OSBACKUPDBA_GROUP=backupdba
OSDGDBA_GROUP=dgdba
OSKMDBA_GROUP=kmfcdba
OSRACDBA_GROUP=dba
CLUSTER_NODES=
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=false
oracle.install.db.rac.configurationType=
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
oracle.install.db.BACKUPDBA_GROUP=backupdba
oracle.install.db.DGDBA_GROUP=dgdba
oracle.install.db.KMDBA_GROUP=kmfcdba
oracle.install.db.rootconfig.executeRootScript=false
DECLINE_SECURITY_UPDATES=true
oracle.installer.autoupdates.option=SKIP_UPDATES
EOF

echo "✅ 响应文件创建成功"

响应文件参数说明:

参数值说明
​oracle.install.option​​INSTALL_DB_SWONLY​仅安装软件(不创建数据库)
​SELECTED_LANGUAGES​​en,zh_CN​语言支持(英文+中文)
​ORACLE_HOME​​/u01/app/oracle/product/19.0.0/dbhome_1​Oracle 软件安装目录
​ORACLE_BASE​​/u01/app/oracle​Oracle 基础目录
​oracle.install.db.InstallEdition​​EE​企业版(SE2=标准版)
​OSRACDBA_GROUP​​dba​RAC 组(单机用 dba 代替)
​DECLINE_SECURITY_UPDATES​​true​不启用安全更新

2.3 执行静默安装

# ========================================================
# 执行静默安装(直接复制执行)
# ========================================================

# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
cd /u01/app/oracle/product/19.0.0/dbhome_1
./runInstaller -silent -responseFile /tmp/db_sw_install.rsp -ignorePrereq

# ⚠️ 等待约 10-20 分钟
# ⚠️ 成功后会显示:Successfully Setup Software.

2.4 执行 root 脚本

# ========================================================
# 执行 root 脚本(切换到 root 用户执行)
# ========================================================

# 切换到 root
su - root

# 执行第一个脚本
# ⚠️⚠️⚠️ 需替换:Oracle 库存目录路径,改为你的实际库存目录
/u01/app/oraInventory/orainstRoot.sh

# 执行第二个脚本
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh

# 切换回 oracle
exit

三、数据库创建

3.1 使用 DBCA 创建数据库

# ========================================================
# 创建数据库(直接复制执行)
# ========================================================

# 设置环境变量
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

# 创建数据库
dbca -silent -createDatabase \
  -templateName General_Purpose.dbc \        # 使用通用模板
  # ⚠️⚠️⚠️ 需替换:全局数据库名(GDB Name),改为你的数据库名,如 PRODDB
  -gdbName SMOM \                            # 全局数据库名
  # ⚠️⚠️⚠️ 需替换:数据库实例名(SID),改为你的实例名,通常与数据库名相同
  -sid SMOM \                                # 实例名
  -characterSet AL32UTF8 \                   # 字符集
  # ⚠️⚠️⚠️ 需替换:数据库总内存(MB),根据服务器内存调整:4GB服务器设1536,8GB设4096,16GB设8192
  -totalMemory 2048 \                        # 分配内存(MB),4GB服务器设为2048,8GB设为4096
  -databaseConfigType SINGLE \               # 单实例
  -databaseType MULTIPURPOSE \               # 通用数据库类型
  -emConfiguration NONE \                    # 不配置 EM
  # ⚠️⚠️⚠️ 需替换:SYS/SYSTEM 管理员密码,改为你的强密码(建议包含大小写字母、数字、特殊字符)
  -sysPassword SysPassword1 \                # SYS 用户密码
  # ⚠️⚠️⚠️ 需替换:SYS/SYSTEM 管理员密码,改为你的强密码(建议包含大小写字母、数字、特殊字符)
  -systemPassword SysPassword1 \             # SYSTEM 用户密码
  -storageType FS \                          # 文件系统存储
  # ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
  -datafileDestination /u01/oradata/SMOM \   # 数据文件路径
  # ⚠️⚠️⚠️ 需替换:重做日志文件大小(MB),根据业务量调整,生产环境建议设为 500M-2G
  -redoLogFileSize 100                       # 重做日志大小(MB)

# ⚠️ 等待约 10-15 分钟
# ⚠️ 成功后会显示:Database creation complete.

DBCA 参数说明:

参数值说明
​-templateName​​General_Purpose.dbc​数据库模板
​-gdbName​​SMOM​全局数据库名
​-sid​​SMOM​实例名(通常与 gdbName 相同)
​-characterSet​​AL32UTF8​字符集(推荐使用)
​-totalMemory​​2048​分配给数据库的内存(MB)
​-databaseConfigType​​SINGLE​单实例(非 RAC)
​-databaseType​​MULTIPURPOSE​通用类型(OLTP/DW/MULTIPURPOSE)
​-emConfiguration​​NONE​不配置企业管理器
​-storageType​​FS​文件系统存储(ASM 需特殊配置)
​-datafileDestination​​/u01/oradata/SMOM​数据文件存放目录
​-redoLogFileSize​​100​重做日志文件大小(MB)

3.2 验证数据库

# ========================================================
# 验证数据库(直接复制执行)
# ========================================================

# 设置环境变量
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
# ⚠️⚠️⚠️ 需替换:数据库实例名(SID),改为你的实例名,通常与数据库名相同
export ORACLE_SID=SMOM

# 连接数据库
sqlplus / as sysdba << EOF
-- 验证数据库状态
SELECT name, open_mode, version FROM v\$database;
SELECT instance_name, status FROM v\$instance;
SELECT log_mode FROM v\$database;
EXIT;
EOF

# 启动监听
lsnrctl start

# 查看监听状态
lsnrctl status

3.3 多租户架构(CDB/PDB)

📌 作用:Oracle 多租户架构允许在一个容器数据库(CDB)中创建多个可插拔数据库(PDB),实现资源共享和数据隔离。

3.3.1 架构对比

特性单实例 (Non-CDB)多租户 (CDB/PDB)
架构一个数据库 = 一个实例一个CDB包含多个PDB
隔离性无隔离,所有用户共享PDB之间完全隔离
资源共享不共享共享内存、CPU、存储
管理复杂度简单相对复杂
备份恢复整个数据库可单独备份恢复PDB
适用场景中小型应用、开发测试大型企业、云环境、SaaS

3.3.2 创建多租户数据库

# ========================================================
# 创建 CDB 数据库(直接复制执行)
# ========================================================

dbca -silent -createDatabase \
  -templateName General_Purpose.dbc \
  # ⚠️⚠️⚠️ 需替换:全局数据库名(GDB Name),改为你的数据库名,如 PRODDB
  -gdbName SMOMCDB \                            # 容器数据库名
  # ⚠️⚠️⚠️ 需替换:数据库实例名(SID),改为你的实例名,通常与数据库名相同
  -sid SMOMCDB \                                # 实例名
  -createAsContainerDatabase true \             # ✅ 关键参数:创建为CDB
  -numberOfPDBs 1 \                             # 创建1个PDB
  # ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
  -pdbName SMOMPROD \                           # PDB名称
  # ⚠️⚠️⚠️ 需替换:PDB 管理员密码,改为你的 PDB 管理员强密码
  -pdbAdminPassword PdbAdmin1 \                  # PDB管理员密码
  -characterSet AL32UTF8 \                      
  # ⚠️⚠️⚠️ 需替换:数据库总内存(MB),多租户建议分配更多内存,根据实际服务器内存调整
  -totalMemory 4096 \                           # 多租户建议分配更多内存
  -emConfiguration NONE \
  # ⚠️⚠️⚠️ 需替换:SYS/SYSTEM 管理员密码,改为你的强密码(建议包含大小写字母、数字、特殊字符)
  -sysPassword SysPassword1 \
  # ⚠️⚠️⚠️ 需替换:SYS/SYSTEM 管理员密码,改为你的强密码(建议包含大小写字母、数字、特殊字符)
  -systemPassword SysPassword1 \
  -storageType FS \
  # ⚠️⚠️⚠️ 需替换:CDB(容器数据库)名称,改为你的实际容器数据库名
  -datafileDestination /u01/oradata/SMOMCDB

3.3.3 管理 PDB

# ========================================================
# PDB 管理命令(直接复制执行)
# ========================================================

sqlplus / as sysdba << EOF

-- 查看所有 PDB
show pdbs;

-- 打开 PDB
-- ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
ALTER PLUGGABLE DATABASE SMOMPROD OPEN;

-- 关闭 PDB
-- ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
ALTER PLUGGABLE DATABASE SMOMPROD CLOSE IMMEDIATE;

-- 启动时自动打开 PDB
-- ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
ALTER PLUGGABLE DATABASE SMOMPROD SAVE STATE;

-- 创建新的 PDB(从 SEED 模板)
-- ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
CREATE PLUGGABLE DATABASE SMOMDEV 
  -- ⚠️⚠️⚠️ 需替换:PDB 管理员密码,改为你的 PDB 管理员强密码
  ADMIN USER pdbadmin IDENTIFIED BY PdbAdmin1
  -- ⚠️⚠️⚠️ 需替换:CDB(容器数据库)名称,改为你的实际容器数据库名
  FILE_NAME_CONVERT = ('/u01/oradata/SMOMCDB/pdbseed/', '/u01/oradata/SMOMCDB/SMOMDEV/');

-- 切换到 PDB
-- ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
ALTER SESSION SET CONTAINER = SMOMPROD;

EXIT;
EOF

3.3.4 连接 PDB

# ========================================================
# 连接 PDB(直接复制执行)
# ========================================================

# 方式1:直接连接
# ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
sqlplus pdbadmin/PdbAdmin1@SMOMPROD

# 方式2:先连接 CDB,再切换
sqlplus / as sysdba
# ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
ALTER SESSION SET CONTAINER = SMOMPROD;

# 方式3:使用 TNS 别名(需配置 tnsnames.ora)
# ⚠️⚠️⚠️ 需替换:PDB(可插拔数据库)名称,改为你的实际 PDB 名称
sqlplus appuser/AppUser123@SMOMPROD

3.3.5 检查数据库类型

# ========================================================
# 检查数据库类型(直接复制执行)
# ========================================================

sqlplus / as sysdba << EOF

-- 检查是否为 CDB
SELECT name, cdb FROM v\$database;

-- 如果 CDB = YES,表示多租户架构
-- 如果 CDB = NO,表示单实例架构

EXIT;
EOF

四、生产环境配置

4.0 配置 SQLPlus 提示符(推荐)

📌 作用:让 SQLPlus 登录后显示 SYS@SMOM>​ 格式,方便区分当前用户和数据库实例,避免多实例运维时误操作。

方法一:临时生效(当前会话)

# 登录 SQLPlus
sqlplus / as sysdba

# 在 SQL> 提示符下执行(立即生效,退出后失效)
set sqlprompt "_user@_connect_identifier> "

# ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
# 现在提示符变成 SYS@SMOM>

方法二:永久全局生效(推荐)

# ========================================================
# 配置 SQLPlus 提示符(永久生效,直接复制执行)
# ========================================================

# 编辑全局配置文件
cat > $ORACLE_HOME/sqlplus/admin/glogin.sql << 'EOF'
-- 设置日期格式
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

-- 设置提示符(包含自定义格式的日期)
COLUMN dbname NEW_VALUE dbname_val
COLUMN today NEW_VALUE today_val
SELECT SYS_CONTEXT('USERENV', 'DB_NAME') AS dbname, TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS today FROM DUAL;
SET SQLPROMPT "_user@&dbname_val &today_val> "

-- 其他配置
SET LINESIZE 200
SET PAGESIZE 100
SET TIMING ON
EOF

# 验证配置
cat $ORACLE_HOME/sqlplus/admin/glogin.sql

# 重新登录测试
sqlplus / as sysdba
# ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
# 提示符应该显示:SYS@SMOM>

提示符格式说明

⚠️ 重要:所有变量名必须用 小写,大写不会被替换!

变量说明示例值
​_user​当前登录用户名SYS、SYSTEM、APPUSER
​_connect_identifier​当前连接的实例名SMOM、ORCL
​_date​当前日期2026-06-22
​_time​当前时间10:30:00

4.1 设置归档模式

# ========================================================
# 设置归档模式(直接复制执行)
# ========================================================

sqlplus / as sysdba << EOF
-- 关闭数据库
SHUTDOWN IMMEDIATE;

-- 启动到 mount 状态
STARTUP MOUNT;

-- 启用归档模式
ALTER DATABASE ARCHIVELOG;

-- 打开数据库
ALTER DATABASE OPEN;

-- 启用自动归档
ALTER SYSTEM ARCHIVE LOG START;

-- 设置归档路径(使用 FRA)
-- ⚠️⚠️⚠️ 需替换:快速恢复区大小,根据磁盘空间和备份策略调整,建议至少为数据库大小的 2 倍
ALTER SYSTEM SET db_recovery_file_dest_size = 50G SCOPE=BOTH;
-- ⚠️⚠️⚠️ 需替换:快速恢复区(FRA)路径,改为你的实际恢复区目录
ALTER SYSTEM SET db_recovery_file_dest = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH;

-- 验证归档模式
ARCHIVE LOG LIST;
EXIT;
EOF

4.2 配置内存参数

# ========================================================
# 配置内存参数(直接复制执行)
# ========================================================

# 根据服务器内存调整参数:
# - 4GB 服务器:sga_target=1536M, pga_aggregate_target=512M
# ⚠️⚠️⚠️ 需替换:SGA 目标内存(MB),建议与 sga_max_size 相同,避免自动调整带来的性能波动
# - 8GB 服务器:sga_target=4096M, pga_aggregate_target=1024M
# - 16GB 服务器:sga_target=8192M, pga_aggregate_target=2048M

sqlplus / as sysdba << EOF
-- 设置 SGA 大小(根据内存调整)
-- ⚠️⚠️⚠️ 需替换:SGA 最大内存(MB),建议设为服务器内存的 50%-60%
ALTER SYSTEM SET sga_max_size=4096M SCOPE=SPFILE;
-- ⚠️⚠️⚠️ 需替换:SGA 目标内存(MB),建议与 sga_max_size 相同,避免自动调整带来的性能波动
ALTER SYSTEM SET sga_target=4096M SCOPE=SPFILE;

-- 设置 PGA 大小
-- ⚠️⚠️⚠️ 需替换:PGA 聚合目标内存(MB),建议设为服务器内存的 20%-30%
ALTER SYSTEM SET pga_aggregate_target=1024M SCOPE=SPFILE;

-- 设置进程数
-- ⚠️⚠️⚠️ 需替换:最大进程数,根据并发连接数调整,建议设为最大连接数的 1.5 倍
ALTER SYSTEM SET processes=1500 SCOPE=SPFILE;

-- 重启数据库使参数生效
SHUTDOWN IMMEDIATE;
STARTUP;

-- 验证参数
SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;
EXIT;
EOF

4.3 配置监听

# ========================================================
# 配置监听(直接复制执行)
# ========================================================

# 创建 listener.ora
cat > $ORACLE_HOME/network/admin/listener.ora << 'EOF'
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      # ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
      (GLOBAL_DBNAME = SMOM)
      # ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      # ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
      (SID_NAME = SMOM)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      # ⚠️⚠️⚠️ 需替换:Oracle 监听端口,默认 1521,如安全要求需修改则改为你的自定义端口
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle
EOF

# 重启监听
lsnrctl stop
lsnrctl start
lsnrctl status

4.4 配置 TNS

# ========================================================
# 配置 TNS(直接复制执行)
# ========================================================

# 创建 tnsnames.ora
cat > $ORACLE_HOME/network/admin/tnsnames.ora << 'EOF'
# ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
SMOM =
  (DESCRIPTION =
    # ⚠️⚠️⚠️ 需替换:Oracle 监听端口,默认 1521,如安全要求需修改则改为你的自定义端口
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      # ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
      (SERVICE_NAME = SMOM)
    )
  )
EOF

# 测试 TNS 连接
# ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
tnsping SMOM

4.5 启动数据库与监听

📌 作用:启动数据库实例和监听服务,允许本地和远程连接。

4.5.1 启动数据库

# ========================================================
# 启动数据库(直接复制执行)
# ========================================================

# 设置环境变量
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
# ⚠️⚠️⚠️ 需替换:数据库实例名(SID),改为你的实例名,通常与数据库名相同
export ORACLE_SID=SMOM
export PATH=$ORACLE_HOME/bin:$PATH

# 启动数据库
sqlplus / as sysdba << EOF
STARTUP;
SELECT status FROM v\$instance;
EXIT;
EOF

# 输出示例:
# STATUS
# --------
# OPEN

4.5.2 启动监听

# ========================================================
# 启动监听(直接复制执行)
# ========================================================

# 启动监听
lsnrctl start

# ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
# 检查监听状态(应显示 SMOM 服务)
lsnrctl status

4.5.3 配置监听允许远程访问

# ========================================================
# 配置监听允许远程访问(直接复制执行)
# ========================================================

# 创建 listener.ora 配置文件
cat > $ORACLE_HOME/network/admin/listener.ora << 'EOF'
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      # ⚠️⚠️⚠️ 需替换:Oracle 监听端口,默认 1521,如安全要求需修改则改为你的自定义端口
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      # ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
      (GLOBAL_DBNAME = SMOM)
      # ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      # ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
      (SID_NAME = SMOM)
    )
  )
EOF

# 重启监听
lsnrctl stop
lsnrctl start
lsnrctl status

4.5.4 开放防火墙端口

# ========================================================
# 开放防火墙端口(允许远程连接)
# ========================================================

su - root

# 开放 1521 端口
# ⚠️⚠️⚠️ 需替换:Oracle 监听端口,默认 1521,如修改了监听端口需同步修改防火墙规则
firewall-cmd --add-port=1521/tcp --permanent
firewall-cmd --reload

# 检查端口是否开放
firewall-cmd --list-ports

exit

4.5.5 常见问题排查

错误原因解决方案
​Connected to an idle instance​数据库未启动​STARTUP;​
​The listener supports no services​服务未注册启动数据库后 lsnrctl reload​
​ORA-12541: no listener​监听未启动​lsnrctl start​
​Connection refused​防火墙阻止开放 1521 端口
​TNS-12514: service not found​服务名配置错误检查 listener.ora​ 和 tnsnames.ora​

五、RMAN 备份配置

5.1 配置 RMAN

# ========================================================
# 配置 RMAN(直接复制执行)
# ========================================================

rman target / << EOF
-- 配置备份保留策略(保留2份冗余备份)
-- ⚠️⚠️⚠️ 需替换:备份冗余份数,根据业务需求调整,重要系统建议设为 3 份
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

-- 启用备份优化
CONFIGURE BACKUP OPTIMIZATION ON;

-- 默认备份到磁盘
CONFIGURE DEFAULT DEVICE TYPE TO DISK;

-- 启用控制文件自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;

-- 设置控制文件自动备份路径
-- ⚠️⚠️⚠️ 需替换:备份文件存储路径,改为你的实际备份目录,确保有足够磁盘空间
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/ctl_%F';

-- 设置备份文件路径
-- ⚠️⚠️⚠️ 需替换:备份文件存储路径,改为你的实际备份目录,确保有足够磁盘空间
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/backup/bkup_%U';

-- 设置并行度
-- ⚠️⚠️⚠️ 需替换:RMAN 备份并行度,根据服务器 CPU 核数调整,一般设为 CPU 核数的一半
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;

-- 查看当前配置
SHOW ALL;
EXIT;
EOF

5.2 创建备份脚本

# ========================================================
# 创建备份脚本(直接复制执行)
# ========================================================

# ⚠️⚠️⚠️ 需替换:脚本存放路径,改为你的实际脚本存放目录
cat > /home/oracle/scripts/rman_backup.sh << 'EOF'
#!/bin/bash
# Oracle 19c RMAN 备份脚本

# ⚠️⚠️⚠️ 需替换:数据库实例名(SID),改为你的实例名,通常与数据库名相同
export ORACLE_SID=SMOM
# ⚠️⚠️⚠️ 需替换:ORACLE_HOME 路径,改为你的 Oracle 软件安装路径
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
DATE=$(date +%Y%m%d_%H%M%S)
# ⚠️⚠️⚠️ 需替换:脚本存放路径,改为你的实际脚本存放目录
LOG=/home/oracle/scripts/logs/backup_${DATE}.log

# 创建日志目录
# ⚠️⚠️⚠️ 需替换:脚本存放路径,改为你的实际脚本存放目录
mkdir -p /home/oracle/scripts/logs

echo "========= 备份开始: $(date) =========" > $LOG

rman target / << RMANEOF >> $LOG 2>&1
RUN {
  -- ⚠️⚠️⚠️ 需替换:备份文件存储路径,改为你的实际备份目录,确保有足够磁盘空间
  ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/u01/backup/full_${DATE}_%U';
  -- ⚠️⚠️⚠️ 需替换:备份文件存储路径,改为你的实际备份目录,确保有足够磁盘空间
  ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/u01/backup/full_${DATE}_%U';
  
  -- 备份数据库+归档日志
  BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
  
  -- 备份控制文件
  -- ⚠️⚠️⚠️ 需替换:备份文件存储路径,改为你的实际备份目录,确保有足够磁盘空间
  BACKUP CURRENT CONTROLFILE FORMAT '/u01/backup/ctl_${DATE}_%U';
  
  -- 备份 SPFILE
  -- ⚠️⚠️⚠️ 需替换:备份文件存储路径,改为你的实际备份目录,确保有足够磁盘空间
  BACKUP SPFILE FORMAT '/u01/backup/spfile_${DATE}_%U';
  
  RELEASE CHANNEL c1;
  RELEASE CHANNEL c2;
}
EXIT;
RMANEOF

echo "========= 备份结束: $(date) =========" >> $LOG
echo "备份日志: $LOG"
EOF

# 设置执行权限
# ⚠️⚠️⚠️ 需替换:脚本存放路径,改为你的实际脚本存放目录
chmod +x /home/oracle/scripts/rman_backup.sh

5.3 设置定时任务

# ========================================================
# 设置定时任务(直接复制执行)
# ========================================================

# 切换到 oracle 用户
su - oracle

# 设置 crontab
crontab -e

# 添加以下内容(按 i 进入编辑模式,粘贴后按 Esc + :wq 保存)
# 每天凌晨 1:00 执行全备
# ⚠️⚠️⚠️ 需替换:脚本存放路径,改为你的实际脚本存放目录
0 1 * * * /home/oracle/scripts/rman_backup.sh >> /home/oracle/scripts/logs/cron.log 2>&1

# 验证 crontab
crontab -l

六、常见问题与解决方案

问题 1:响应文件格式错误(INS-10105)

错误信息:

[FATAL] [INS-10105] The given response file /tmp/db_sw_install.rsp is not valid.

解决方案: 使用本手册提供的响应文件模板,确保参数完整。

问题 2:用户组缺失(INS-35341)

错误信息:

[FATAL] [INS-35341] The installation user is not a member of the following groups: [racdba]

解决方案: 在响应文件中设置 OSRACDBA_GROUP=dba​。

问题 3:DBCA 参数错误(INS-04003)

错误信息:

[INS-04003] Invalid argument passed from command line. Specified argument ([-memoryLimit]) is not a supported argument.

解决方案: 使用 -totalMemory​ 代替 -memoryLimit​。

问题 4:SID 已存在(DBT-10317)

错误信息:

[FATAL] [DBT-10317] Specified SID Name (SMOM) already exists.

解决方案: 检查数据库是否已存在并启动,或使用其他 SID。

问题 5:内存不足

解决方案:

# 增加交换分区
su - root
dd if=/dev/zero of=/swapfile bs=1G count=4
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
exit

七、部署检查清单

步骤检查项命令预期结果
1操作系统版本​cat /etc/redhat-release​CentOS 7.x / RHEL 7.x
2用户组​id oracle​包含 oinstall, dba, oper 等组
3内核参数​sysctl -p​无错误输出
4依赖包`rpm -qa grep -E ‘binutilsglibc
5目录权限​ls -la /u01/app/oracle​oracle:oinstall
6软件安装​$ORACLE_HOME/OPatch/opatch lsinventory​安装成功
7数据库状态​SELECT status FROM v$instance;​OPEN
8归档模式​ARCHIVE LOG LIST;​Archive Mode
9监听状态​lsnrctl status​服务已注册

八、用户与权限管理

8.1 用户权限基础

Oracle 权限类型

权限类型说明示例
系统权限(System Privilege)允许用户执行特定数据库操作CREATE USER、CREATE TABLE、SELECT ANY TABLE
对象权限(Object Privilege)允许用户访问特定对象SELECT ON scott.emp、INSERT ON scott.dept
角色(Role)一组权限的集合CONNECT、RESOURCE、DBA

常用系统权限

权限说明
​CREATE SESSION​连接数据库
​CREATE TABLE​创建表
​CREATE VIEW​创建视图
​CREATE SEQUENCE​创建序列
​CREATE PROCEDURE​创建存储过程
​CREATE TRIGGER​创建触发器
​CREATE ANY TABLE​在任何表空间创建表
​SELECT ANY TABLE​查询任何表
​INSERT ANY TABLE​插入到任何表
​UPDATE ANY TABLE​更新任何表
​DELETE ANY TABLE​删除任何表
​DBA​数据库管理员(最高权限)

8.2 创建普通读写用户

方法一:直接授权(最简单)

# ========================================================
# 创建普通读写用户(直接复制执行)
# ========================================================

sqlplus / as sysdba << EOF

-- 1. 创建用户
-- ⚠️⚠️⚠️ 需替换:应用用户名,改为你的实际应用用户名
-- 用户名:appuser
-- ⚠️⚠️⚠️ 需替换:应用用户密码,改为你的应用用户强密码
-- 密码:AppUser123
-- ⚠️⚠️⚠️ 需替换:应用用户密码,改为你的应用用户强密码
CREATE USER appuser IDENTIFIED BY AppUser123
  -- ⚠️⚠️⚠️ 需替换:默认数据表空间名,改为你的实际数据表空间名
  DEFAULT TABLESPACE USERS
  -- ⚠️⚠️⚠️ 需替换:临时表空间名,改为你的实际临时表空间名
  TEMPORARY TABLESPACE TEMP
  -- ⚠️⚠️⚠️ 需替换:数据表空间名(USERS),改为你的实际数据表空间名
  QUOTA UNLIMITED ON USERS;

-- 2. 授予基本权限(连接+资源)
-- ⚠️⚠️⚠️ 需替换:应用用户名,改为你的实际应用用户名
GRANT CONNECT TO appuser;
-- ⚠️⚠️⚠️ 需替换:应用用户名,改为你的实际应用用户名
GRANT RESOURCE TO appuser;

-- 3. 授予常用权限
-- ⚠️⚠️⚠️ 需替换:应用用户名,改为你的实际应用用户名
GRANT CREATE VIEW TO appuser;
-- ⚠️⚠️⚠️ 需替换:应用用户名,改为你的实际应用用户名
GRANT CREATE SEQUENCE TO appuser;
-- ⚠️⚠️⚠️ 需替换:应用用户名,改为你的实际应用用户名
GRANT CREATE PROCEDURE TO appuser;
-- ⚠️⚠️⚠️ 需替换:应用用户名,改为你的实际应用用户名
GRANT CREATE TRIGGER TO appuser;

-- 4. 验证用户创建
SELECT username, default_tablespace, account_status, created
FROM dba_users
WHERE username = 'APPUSER';

EXIT;
EOF

九、数据库备份与恢复

9.1 备份基础概念

备份类型对比

备份方式优点缺点适用场景
RMAN 物理备份速度快、支持增量、自动管理需学习 RMAN生产环境首选
Data Pump 逻辑备份灵活、可跨平台速度慢、大库不适合数据迁移、逻辑备份
冷备份简单可靠需停机小数据库、测试环境
热备份不停机需归档模式、复杂24x7 系统

9.2 RMAN 物理备份

# ========================================================
# RMAN 全备份(直接复制执行)
# ========================================================

rman target / << EOF
-- 查看备份
LIST BACKUP SUMMARY;

-- 验证备份可用性
-- ⚠️⚠️⚠️ 需替换:备份集编号(BS Key),从 LIST BACKUP SUMMARY 获取
VALIDATE BACKUPSET 123;

-- 查看备份详细信息
LIST BACKUP;

-- 查看数据库备份
LIST BACKUP OF DATABASE;

-- 查看归档日志备份
LIST BACKUP OF ARCHIVELOG ALL;

EXIT;
EOF

9.3 RMAN 恢复操作

9.3.1 恢复前检查

rman target / << EOF
-- 查看备份摘要
LIST BACKUP SUMMARY;

-- 验证备份可用性
-- ⚠️⚠️⚠️ 需替换:备份集编号(BS Key),从 LIST BACKUP SUMMARY 获取
VALIDATE BACKUPSET 6316;

EXIT;
EOF

9.3.2 完全恢复(数据文件损坏)

# ========================================================
# RMAN 完全恢复(直接复制执行)
# ========================================================

rman target / << EOF
# 关闭数据库
SHUTDOWN ABORT;

# 启动到 mount 状态
STARTUP MOUNT;

# ⚠️⚠️⚠️ 重要:先验证备份可用性(只读检查,不修改数据)
# 验证数据库备份是否完整可用
RESTORE DATABASE VALIDATE;

# 还原数据文件
RESTORE DATABASE;

# 恢复数据库(应用归档日志)
RECOVER DATABASE;

# 打开数据库
ALTER DATABASE OPEN;

EXIT;
EOF

9.3.3 不完全恢复(基于时间点)

# ========================================================
# 基于时间点的不完全恢复
# ========================================================

rman target / << EOF
RUN {
  # 设置恢复到指定时间点
  -- ⚠️⚠️⚠️ 需替换:示例时间点,改为你实际需要的恢复/闪回时间点
  SET UNTIL TIME "TO_DATE('2026-06-15 10:00:00','YYYY-MM-DD HH24:MI:SS')";
  
  # ⚠️⚠️⚠️ 重要:先验证备份可用性(只读检查,不修改数据)
  RESTORE DATABASE VALIDATE;
  
  # 还原数据库
  RESTORE DATABASE;
  
  # 恢复到指定时间点
  RECOVER DATABASE;
  
  # 打开数据库(需要 resetlogs)
  ALTER DATABASE OPEN RESETLOGS;
}
EXIT;
EOF

9.3.4 基于 SCN 的不完全恢复

rman target / << EOF
RUN {
  # 设置恢复到指定 SCN
  -- ⚠️⚠️⚠️ 需替换:SCN 号,这是示例值,使用 SELECT current_scn FROM v$database; 查询当前 SCN
  SET UNTIL SCN 1234567;
  
  # ⚠️⚠️⚠️ 重要:先验证备份可用性(只读检查,不修改数据)
  RESTORE DATABASE VALIDATE;
  
  RESTORE DATABASE;
  RECOVER DATABASE;
  ALTER DATABASE OPEN RESETLOGS;
}
EXIT;
EOF

9.3.5 表空间级恢复

# ========================================================
# 表空间级恢复(数据库仍可运行)
# ========================================================

rman target / << EOF
# 将表空间设为 OFFLINE
-- ⚠️⚠️⚠️ 需替换:数据表空间名(users),改为你的实际数据表空间名
SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';

# ⚠️⚠️⚠️ 重要:先验证备份可用性(只读检查,不修改数据)
-- ⚠️⚠️⚠️ 需替换:数据表空间名(users),改为你的实际数据表空间名
RESTORE TABLESPACE users VALIDATE;

# 还原表空间
-- ⚠️⚠️⚠️ 需替换:数据表空间名(users),改为你的实际数据表空间名
RESTORE TABLESPACE users;

# 恢复表空间
-- ⚠️⚠️⚠️ 需替换:数据表空间名(users),改为你的实际数据表空间名
RECOVER TABLESPACE users;

# 将表空间设为 ONLINE
-- ⚠️⚠️⚠️ 需替换:数据表空间名(users),改为你的实际数据表空间名
SQL 'ALTER TABLESPACE users ONLINE';

EXIT;
EOF

9.3.6 控制文件恢复

# ========================================================
# 控制文件损坏恢复
# ========================================================

rman target / << EOF
# 关闭数据库
SHUTDOWN ABORT;

# 启动到 nomount 状态
STARTUP NOMOUNT;

# 从自动备份恢复控制文件
RESTORE CONTROLFILE FROM AUTOBACKUP;

# 启动到 mount 状态
ALTER DATABASE MOUNT;

# ⚠️⚠️⚠️ 重要:先验证备份可用性(只读检查,不修改数据)
RESTORE DATABASE VALIDATE;

# 还原数据库
RESTORE DATABASE;

# 恢复数据库
RECOVER DATABASE;

# 打开数据库
ALTER DATABASE OPEN RESETLOGS;

EXIT;
EOF

9.3.7 块级恢复(数据块损坏)

# ========================================================
# 数据块级恢复(11g+)
# ========================================================

rman target / << EOF
# 查看损坏块
SQL 'SELECT * FROM v\$database_block_corruption';

# 恢复损坏块
BLOCKRECOVER CORRUPTION LIST;

# 或指定文件和块号
-- ⚠️⚠️⚠️ 需替换:数据文件编号和块号,这是示例值,使用 v$database_block_corruption 查询实际损坏的文件号和块号
BLOCKRECOVER DATAFILE 5 BLOCK 100, 200, 300;

EXIT;
EOF

9.7 常见故障恢复场景

9.7.1 误删除表

# ========================================================
# 场景1:误删除表恢复
# ========================================================

# 方法1:使用回收站(10g+)
sqlplus / as sysdba << EOF
-- 查看回收站
SHOW RECYCLEBIN;

-- 恢复表
-- ⚠️⚠️⚠️ 需替换:示例表(员工表),这是 SCOTT 方案下的示例表,改为你的实际业务表
FLASHBACK TABLE scott.emp TO BEFORE DROP RENAME TO emp_recovered;

EXIT;
EOF

9.7.2 数据文件损坏

# ========================================================
# 场景2:数据文件损坏恢复
# ========================================================

rman target / << EOF
-- 关闭数据库
SHUTDOWN ABORT;

-- 启动到 mount
STARTUP MOUNT;

-- ⚠️⚠️⚠️ 重要:先验证备份可用性(只读检查,不修改数据)
-- ⚠️⚠️⚠️ 需替换:数据文件路径,改为你的实际数据文件路径
RESTORE DATAFILE '/u01/oradata/SMOM/users01.dbf' VALIDATE;

-- 还原损坏的数据文件
-- ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
RESTORE DATAFILE '/u01/oradata/SMOM/users01.dbf';

-- 恢复数据文件
-- ⚠️⚠️⚠️ 需替换:数据库名/实例名,改为你的实际数据库名,如 PRODDB
RECOVER DATAFILE '/u01/oradata/SMOM/users01.dbf';

-- 打开数据库
ALTER DATABASE OPEN;

EXIT;
EOF

9.7.3 控制文件全部丢失

# ========================================================
# 场景3:控制文件全部丢失恢复
# ========================================================

rman target / << EOF
-- 关闭数据库
SHUTDOWN ABORT;

-- 启动到 nomount
STARTUP NOMOUNT;

-- 设置 DBID(需要提前记录)
-- ⚠️⚠️⚠️ 需替换:数据库 DBID,这是示例值,使用 SELECT dbid FROM v$database; 查询并提前记录
SET DBID 1234567890;

-- 从自动备份恢复控制文件
RESTORE CONTROLFILE FROM AUTOBACKUP;

-- 启动到 mount
ALTER DATABASE MOUNT;

-- ⚠️⚠️⚠️ 重要:先验证备份可用性(只读检查,不修改数据)
RESTORE DATABASE VALIDATE;

-- 还原数据库
RESTORE DATABASE;

-- 恢复数据库
RECOVER DATABASE;

-- 打开数据库
ALTER DATABASE OPEN RESETLOGS;

EXIT;
EOF

9.8 备份策略推荐

9.8.4 备份验证

# ========================================================
# 备份验证(直接复制执行)
# ========================================================

rman target / << EOF
-- 验证所有备份
VALIDATE BACKUPSET ALL;

-- 验证数据库备份
RESTORE DATABASE VALIDATE;

-- 验证归档日志
RESTORE ARCHIVELOG ALL VALIDATE;

-- 验证控制文件
RESTORE CONTROLFILE VALIDATE;

EXIT;
EOF

📚 备份恢复重要提醒:

  1. 定期测试恢复,确保备份可用
  2. 异地备份,避免单点故障
  3. 记录 DBID,便于控制文件恢复
  4. 启用闪回数据库,简化逻辑错误恢复
  5. 监控备份状态,及时发现失败

文档位置: Oracle生产环境部署标准手册_完整版.md​

使用方法: 按章节顺序复制代码块执行即可完成部署和备份配置。