温馨提示×

如何在Ubuntu上配置Oracle数据库复制

小樊
39
2025-11-19 04:10:37
栏目: 云计算

在 Ubuntu 上配置 Oracle 数据库复制

方案选型与前置条件

  • 常见方案对比与适用场景
    • Data Guard 物理备库:高可用与灾备首选,基于重做日志的块级复制,支持最大可用/最大性能模式,切换与回切流程成熟,适合生产核心库。
    • Oracle GoldenGate:异构/跨平台、跨版本、细粒度对象与 DML/DDL 双向复制,延迟低、灵活性强,适合零停机迁移多活/双向场景。
    • Streams(已不推荐)/逻辑复制:基于队列的逻辑复制,可跨字符集/版本,但维护复杂度高,官方已转向 GoldenGate,仅在存量环境维护中使用。
  • 前置条件
    • 两台 Ubuntu 主机(建议 Ubuntu 20.04/22.04),网络互通,开放 1521/TCP(数据库)、22/TCP(SSH)。
    • 已安装同版本(或兼容版本)的 Oracle Database(单实例即可),具备 SYS 权限与 Oracle Wallet/口令文件 可用。
    • 主库启用 归档日志FORCE LOGGING,存储与归档目录充足;主备 DB_NAME 一致、DB_UNIQUE_NAME 不同。
    • 时间同步(如 chrony),磁盘与文件系统权限正确,备份策略到位。

方案一 使用 Data Guard 物理备库(推荐)

  • 主库配置
    • 启用归档与强制日志
      • sqlplus / as sysdba
        • archive log list;
        • alter database force logging;
        • shutdown immediate; startup mount;
        • alter database archivelog;
        • alter database open;
    • 创建备库控制文件与口令文件
      • alter database create standby controlfile as ‘/u01/app/oracle/oradata/STDBY/control01.ctl’;
      • orapwd file=$ORACLE_HOME/dbs/orapwSTDBY entries=30 force=y
    • 配置参数(示例,写入 spfile 后重启)
      • alter system set db_unique_name=‘PRI’ scope=spfile;
      • alter system set log_archive_config=‘dg_config=(PRI,STDBY)’ scope=spfile;
      • alter system set log_archive_dest_1=‘location=/u01/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=PRI’ scope=spfile;
      • alter system set log_archive_dest_2=‘service=STDBY async valid_for=(online_logfiles,primary_role) db_unique_name=STDBY’ scope=spfile;
      • alter system set log_archive_dest_state_1=enable scope=spfile;
      • alter system set log_archive_dest_state_2=enable scope=spfile;
      • alter system set fal_server=‘STDBY’ scope=spfile;
      • alter system set fal_client=‘PRI’ scope=spfile;
      • alter system set standby_file_management=‘auto’ scope=spfile;
      • – 如主备目录不同,增加:
        • alter system set db_file_name_convert=‘/u01/app/oracle/oradata/PRI’,‘/u01/app/oracle/oradata/STDBY’ scope=spfile;
        • alter system set log_file_name_convert=‘/u01/app/oracle/oradata/PRI’,‘/u01/app/oracle/oradata/STDBY’ scope=spfile;
    • 监听与 TNS(两节点一致)
      • listener.ora 中为主库 SID 配置静态服务(可选,提升稳定性)。
      • tnsnames.ora 增加:
        • PRI = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=pri-host)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PRI)))
        • STDBY = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=stdby-host)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=STDBY)))
  • 备库配置
    • 目录与权限
      • mkdir -p /u01/app/oracle/oradata/STDBY /u01/app/oracle/arch /u01/app/oracle/fast_recovery_area/STDBY
      • chown -R oracle:oinstall /u01/app/oracle
    • 使用 RMAN 从主库克隆备库(DUPLICATE)
      • rman target sys/oracle@PRI auxiliary sys/oracle@STDBY
        • duplicate target database for standby from active database nofilenamecheck;
    • 启动备库 MRP(介质恢复进程)
      • sqlplus / as sysdba
        • alter database recover managed standby database disconnect from session;
        • – 如需只读查询:alter database recover managed standby database cancel; alter database open read only;
  • 验证与切换
    • 主库:alter system switch logfile; 备库:select process,status,thread#,sequence# from v$managed_standby;
    • 切换演练(计划内):在主库执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 在备库执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 完成后反向切换。
    • 注:以上关键步骤(归档、FAL、db_unique_name、log_archive_dest_n、RMAN duplicate、MRP)为 Data Guard 搭建的核心环节,参数名与流程在不同版本保持一致,仅路径与实例名需按现场调整。

方案二 使用 Oracle GoldenGate 进行逻辑复制

  • 适用场景:跨平台/跨版本、零停机升级、双向复制、只复制部分对象/表空间。
  • 主备库启用补充日志与最小补充日志
    • sqlplus / as sysdba
      • alter database add supplemental log data;
      • alter database add supplemental log data (primary key,unique,foreign key) columns;
  • GoldenGate 安装与用户
    • 在两端安装 Oracle GoldenGate for Oracle(对应数据库版本),创建管理用户(如 ggadmin),授予 DBA 或细粒度权限,并配置 ENABLE_GOLDENGATE_REPLICATION=true(12c+)。
  • 抽取、投递与复制进程(示例)
    • 抽取(主库)
      • ADD EXTRACT ext1, TRANLOG, BEGIN NOW
      • ADD EXTTRAILSOURCE /u01/gg/dirdat/ea, EXTRACT ext1
      • ADD RMTTRAIL /u01/gg/dirdat/ra, EXTRACT ext1
      • START EXTRACT ext1
    • 投递(主库)
      • ADD EXTRACT dpump, EXTTRAILSOURCE /u01/gg/dirdat/ea
      • ADD RMTTRAIL /u01/gg/dirdat/ra, EXTRACT dpump
      • START EXTRACT dpump
    • 复制(备库)
      • ADD REPLICAT rep1, EXTTRAIL /u01/gg/dirdat/ra, CHECKPOINTTABLE ggadmin.checkpoint
      • START REPLICAT rep1
  • 双向复制要点
    • 避免环路:在复制链路中对 DML 打 TAG,对含 TAG 的 LCR 不再次复制;或按表/模式拆分方向。
    • 冲突处理:定义冲突检测与解决策略(时间戳/版本列/业务规则)。
    • 初始化加载:使用 RMAN 增量 SCNData Pump 做基线,再开启增量同步。
    • 注:GoldenGate 的抽取/投递/复制进程模型、初始化与环路避免机制为通用做法,具体参数依业务与版本细化。

方案三 使用 Streams 逻辑复制(存量环境维护)

  • 适用场景:已有 Streams 环境维护或特定 DDL 传播需求。
  • 关键步骤
    • 两库启用 归档日志补充日志,设置 GLOBAL_NAMES=TRUE,并配置 AQ/STREAMS 相关参数(如 streams_pool_size、aq_tm_processes)。
    • 创建复制管理员(如 strmadmin)与表空间,使用 DBMS_STREAMS_ADM 配置捕获/传播/应用进程,完成实例化与启动。
    • 双向同步需额外注意环路与冲突处理,通常先完成单向再扩展为双向。
    • 注:Streams 在 12c 之后官方主推 GoldenGate,新部署建议优先选择 GoldenGate 或 Data Guard。

快速验证与常见问题

  • 快速验证
    • Data Guard:在主库切换日志后,备库查询 v$archived_log 与 v$managed_standby 的 sequence#/status 是否同步推进;必要时执行 READ ONLY WITH APPLY 验证查询一致性。
    • GoldenGate:info all/extract/ replicat 查看进程状态,stats 查看延迟,view report 与 ggsci lag 检查复制时延与错误。
  • 常见问题
    • 网络与解析:确保 /etc/hosts 或 DNS 正确,tnsping PRI/STDBY 可达;防火墙放行 1521
    • 归档与空间:监控 ARCHIVELOGFRA 使用率,避免归档满导致同步中断。
    • 参数一致性:主备 compatible、字符集、时区、时间同步;Data Guard 注意 db_file_name_convert/log_file_name_convertDB_UNIQUE_NAME
    • 补充日志:未启用会导致 Key Columns 缺失,影响一致性与冲突处理。
    • 版本与特性:确认数据库版本对 Data Guard/GG 的支持矩阵与补丁级别,必要时先升级再部署复制。

0