📅 整理日期: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.optionINSTALL_DB_SWONLY仅安装软件(不创建数据库)
SELECTED_LANGUAGESen,zh_CN语言支持(英文+中文)
ORACLE_HOME/u01/app/oracle/product/19.0.0/dbhome_1Oracle 软件安装目录
ORACLE_BASE/u01/app/oracleOracle 基础目录
oracle.install.db.InstallEditionEE企业版(SE2=标准版)
OSRACDBA_GROUPdbaRAC 组(单机用 dba 代替)
DECLINE_SECURITY_UPDATEStrue不启用安全更新

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 参数说明:

参数说明
-templateNameGeneral_Purpose.dbc数据库模板
-gdbNameSMOM全局数据库名
-sidSMOM实例名(通常与 gdbName 相同)
-characterSetAL32UTF8字符集(推荐使用)
-totalMemory2048分配给数据库的内存(MB)
-databaseConfigTypeSINGLE单实例(非 RAC)
-databaseTypeMULTIPURPOSE通用类型(OLTP/DW/MULTIPURPOSE)
-emConfigurationNONE不配置企业管理器
-storageTypeFS文件系统存储(ASM 需特殊配置)
-datafileDestination/u01/oradata/SMOM数据文件存放目录
-redoLogFileSize100重做日志文件大小(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-releaseCentOS 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/oracleoracle: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

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