Oracle 19c 生产环境部署标准手册
目录
📅 整理日期: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 ‘binutils | glibc |
| 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
📚 备份恢复重要提醒:
- 定期测试恢复,确保备份可用
- 异地备份,避免单点故障
- 记录 DBID,便于控制文件恢复
- 启用闪回数据库,简化逻辑错误恢复
- 监控备份状态,及时发现失败
文档位置: Oracle生产环境部署标准手册_完整版.md
使用方法: 按章节顺序复制代码块执行即可完成部署和备份配置。