本文档详细介绍Oracle DataGuard与多租户架构的集成配置和管理,风哥教程参考Oracle官方文档Multitenant部分。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 多租户架构概述
多租户架构(Multitenant Architecture)是Oracle 12c引入的一项重要特性,允许在一个容器数据库(CDB)中创建多个可插拔数据库(PDB)。学习交流加群风哥微信: itpux-com
多租户架构的组成:
- 容器数据库(CDB):包含所有PDB共享的系统元数据和资源
- 可插拔数据库(PDB):独立的数据库环境,包含用户数据和应用
- 根容器(CDB$ROOT):CDB的根容器,包含系统元数据
- 种子PDB(PDB$SEED):创建新PDB的模板
1.2 DataGuard与多租户集成
DataGuard与多租户架构的集成是指在多租户环境中配置DataGuard,为CDB和所有PDB提供灾难恢复能力。
集成的特点:
- 为整个CDB及其所有PDB提供保护
- 支持PDB级别的备份和恢复
- 简化了多数据库环境的管理
- 提供统一的故障转移和切换机制
1.3 集成优势
DataGuard与多租户集成的优势:
- 简化管理:通过管理单个CDB的DataGuard配置,保护所有PDB
- 资源共享:备用数据库的资源被所有PDB共享
- 成本降低:减少了备用数据库的数量和管理开销
- 灵活性:支持PDB级别的操作,如PDB级别的刷新和克隆
Part02-生产环境规划与建议
2.1 架构规划
多租户环境下的DataGuard架构规划:
- 主站点:CDB包含多个PDB
- 备用站点:CDB作为主CDB的备用,包含相同的PDB
- 重做传输:从主CDB传输到备用CDB
- 故障转移:当主CDB发生故障时,切换到备用CDB
2.2 配置建议
配置建议:
- 使用Oracle 12c或更高版本
- 配置CDB级别的DataGuard
- 确保主备CDB的PDB结构一致
- 使用DataGuard Broker管理配置
- 配置适当的保护模式
2.3 监控策略
监控策略:
- 监控CDB级别的DataGuard状态
- 监控各个PDB的状态
- 设置适当的告警阈值
- 定期检查PDB的一致性
Part03-生产环境项目实施方案
DataGuard与多租户集成的实施步骤:
- 配置主CDB的DataGuard参数
- 创建备用CDB
- 配置重做传输
- 启动应用服务
- 测试故障转移和切换
- 监控系统状态
Part04-生产案例与实战讲解
4.1 配置主CDB的DataGuard参数
# 配置主CDB的DataGuard参数
sqlplus / as sysdba
# 设置DB_UNIQUE_NAME
ALTER SYSTEM SET DB_UNIQUE_NAME=’fgedudb_cdb’ SCOPE=spfile;
# 输出日志
System altered.
# 设置LOG_ARCHIVE_CONFIG
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG=’DG_CONFIG=(fgedudb_cdb,fgedudb_cdb_stby)’ SCOPE=spfile;
# 输出日志
System altered.
# 设置LOG_ARCHIVE_DEST_2
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=’SERVICE=fgedudb_cdb_stby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fgedudb_cdb_stby’ SCOPE=spfile;
# 输出日志
System altered.
# 设置LOG_ARCHIVE_DEST_STATE_2
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=spfile;
# 输出日志
System altered.
# 重启CDB
SHUTDOWN IMMEDIATE;
STARTUP;
sqlplus / as sysdba
# 设置DB_UNIQUE_NAME
ALTER SYSTEM SET DB_UNIQUE_NAME=’fgedudb_cdb’ SCOPE=spfile;
# 输出日志
System altered.
# 设置LOG_ARCHIVE_CONFIG
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG=’DG_CONFIG=(fgedudb_cdb,fgedudb_cdb_stby)’ SCOPE=spfile;
# 输出日志
System altered.
# 设置LOG_ARCHIVE_DEST_2
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=’SERVICE=fgedudb_cdb_stby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fgedudb_cdb_stby’ SCOPE=spfile;
# 输出日志
System altered.
# 设置LOG_ARCHIVE_DEST_STATE_2
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=spfile;
# 输出日志
System altered.
# 重启CDB
SHUTDOWN IMMEDIATE;
STARTUP;
4.2 创建备用CDB
# 使用RMAN创建备用CDB
rman target sys/password@fgedudb_cdb auxiliary sys/password@fgedudb_cdb_stby
# 输出日志
Recovery Manager: Release 19.0.0.0.0 – Production on Fri Apr 1 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: FGEDUDB_CDB (DBID=1234567890)
connected to auxiliary database: FGEDUDB_CDB_STBY (not mounted)
# 执行duplicate命令
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;
# 输出日志
Starting Duplicate Db at 01-APR-26
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=123 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile ‘/oracle/product/19.3.0/dbhome_1/dbs/orapwfgedudb_cdb’ auxiliary format
‘/oracle/product/19.3.0/dbhome_1/dbs/orapwfgedudb_cdb_stby’;
restore clone controlfile to ‘/oradata/fgedudb_cdb_stby/control01.ctl’;
sql clone ‘alter database mount standby database’;
}
executing Memory Script
# 克隆过程日志…
Finished Duplicate Db at 01-APR-26
rman target sys/password@fgedudb_cdb auxiliary sys/password@fgedudb_cdb_stby
# 输出日志
Recovery Manager: Release 19.0.0.0.0 – Production on Fri Apr 1 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: FGEDUDB_CDB (DBID=1234567890)
connected to auxiliary database: FGEDUDB_CDB_STBY (not mounted)
# 执行duplicate命令
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;
# 输出日志
Starting Duplicate Db at 01-APR-26
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=123 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile ‘/oracle/product/19.3.0/dbhome_1/dbs/orapwfgedudb_cdb’ auxiliary format
‘/oracle/product/19.3.0/dbhome_1/dbs/orapwfgedudb_cdb_stby’;
restore clone controlfile to ‘/oradata/fgedudb_cdb_stby/control01.ctl’;
sql clone ‘alter database mount standby database’;
}
executing Memory Script
# 克隆过程日志…
Finished Duplicate Db at 01-APR-26
4.3 启动备用CDB的应用服务
# 启动备用CDB的应用服务
sqlplus / as sysdba@fgedudb_cdb_stby
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
# 输出日志
Database altered.
# 检查应用服务状态
SELECT PROCESS, STATUS, CLIENT_PROCESS FROM v$managed_standby;
# 输出日志
PROCESS STATUS CLIENT_PROCESS
——— ———– —————
ARCH CONNECTED ARCH
ARCH CONNECTED ARCH
ARCH CONNECTED ARCH
ARCH CONNECTED ARCH
RFS IDLE LGWR
RFS IDLE ARCH
MRP0 APPLYING_LOG N/A
sqlplus / as sysdba@fgedudb_cdb_stby
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
# 输出日志
Database altered.
# 检查应用服务状态
SELECT PROCESS, STATUS, CLIENT_PROCESS FROM v$managed_standby;
# 输出日志
PROCESS STATUS CLIENT_PROCESS
——— ———– —————
ARCH CONNECTED ARCH
ARCH CONNECTED ARCH
ARCH CONNECTED ARCH
ARCH CONNECTED ARCH
RFS IDLE LGWR
RFS IDLE ARCH
MRP0 APPLYING_LOG N/A
4.4 管理PDB的DataGuard
# 查看PDB状态
sqlplus / as sysdba@fgedudb_cdb
SELECT PDB_NAME, STATUS FROM dba_pdbs;
# 输出日志
PDB_NAME STATUS
———- ———-
PDB$SEED READ ONLY
FGEDU_PDB1 READ WRITE
FGEDU_PDB2 READ WRITE
# 在备用CDB上查看PDB状态
sqlplus / as sysdba@fgedudb_cdb_stby
SELECT PDB_NAME, STATUS FROM dba_pdbs;
# 输出日志
PDB_NAME STATUS
———- ———-
PDB$SEED READ ONLY
FGEDU_PDB1 MOUNTED
FGEDU_PDB2 MOUNTED
sqlplus / as sysdba@fgedudb_cdb
SELECT PDB_NAME, STATUS FROM dba_pdbs;
# 输出日志
PDB_NAME STATUS
———- ———-
PDB$SEED READ ONLY
FGEDU_PDB1 READ WRITE
FGEDU_PDB2 READ WRITE
# 在备用CDB上查看PDB状态
sqlplus / as sysdba@fgedudb_cdb_stby
SELECT PDB_NAME, STATUS FROM dba_pdbs;
# 输出日志
PDB_NAME STATUS
———- ———-
PDB$SEED READ ONLY
FGEDU_PDB1 MOUNTED
FGEDU_PDB2 MOUNTED
4.5 测试故障转移
# 使用DataGuard Broker执行故障转移
dgmgrl sys/password@fgedudb_cdb_stby
# 输出日志
DGMGRL for Linux: Release 19.0.0.0.0 – Production on Fri Apr 1 10:00:00 2026
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected to “fgedudb_cdb_stby”
Connected as SYSDBA.
# 执行故障转移
FAILOVER TO ‘fgedudb_cdb_stby’;
# 输出日志
Performing failover NOW, please wait…
Failover succeeded, new primary is “fgedudb_cdb_stby”
# 验证新主CDB状态
SHOW DATABASE ‘fgedudb_cdb_stby’;
# 输出日志
Database – fgedudb_cdb_stby
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
fgedudb_cdb_stby
Database Status:
SUCCESS
# 查看PDB状态
sqlplus / as sysdba@fgedudb_cdb_stby
SELECT PDB_NAME, STATUS FROM dba_pdbs;
# 输出日志
PDB_NAME STATUS
———- ———-
PDB$SEED READ ONLY
FGEDU_PDB1 READ WRITE
FGEDU_PDB2 READ WRITE
dgmgrl sys/password@fgedudb_cdb_stby
# 输出日志
DGMGRL for Linux: Release 19.0.0.0.0 – Production on Fri Apr 1 10:00:00 2026
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected to “fgedudb_cdb_stby”
Connected as SYSDBA.
# 执行故障转移
FAILOVER TO ‘fgedudb_cdb_stby’;
# 输出日志
Performing failover NOW, please wait…
Failover succeeded, new primary is “fgedudb_cdb_stby”
# 验证新主CDB状态
SHOW DATABASE ‘fgedudb_cdb_stby’;
# 输出日志
Database – fgedudb_cdb_stby
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
fgedudb_cdb_stby
Database Status:
SUCCESS
# 查看PDB状态
sqlplus / as sysdba@fgedudb_cdb_stby
SELECT PDB_NAME, STATUS FROM dba_pdbs;
# 输出日志
PDB_NAME STATUS
———- ———-
PDB$SEED READ ONLY
FGEDU_PDB1 READ WRITE
FGEDU_PDB2 READ WRITE
Part05-风哥经验总结与分享
5.1 集成最佳实践
- 使用DataGuard Broker管理多租户环境的DataGuard配置
- 确保主备CDB的PDB结构一致
- 配置适当的保护模式,平衡数据安全和性能
- 定期测试故障转移和切换,确保系统可靠性
- 监控CDB和PDB的状态,及时发现和处理问题
5.2 常见问题与解决方案
- PDB结构不一致:在主CDB中创建或删除PDB后,确保备用CDB也进行相应操作
- 重做传输故障:检查网络连接和TNS配置
- 应用服务故障:检查应用进程状态,确保MRP正常运行
- 故障转移后PDB状态异常:检查PDB的打开状态,必要时手动打开
- 性能问题:优化网络和存储性能,配置适当的并行度
5.3 性能优化建议
- 使用高速网络连接,提高重做传输速度
- 配置适当的并行度,提高重做应用速度
- 使用SSD存储,提高I/O性能
- 优化PDB的资源分配,提高整体性能
- 定期清理归档日志,避免存储空间不足
学习交流加群风哥QQ113257174
风哥提示:DataGuard与多租户架构的集成可以简化管理,提高资源利用率,是企业级数据库环境的理想选择。
更多学习教程公众号风哥教程itpux_com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
