Oracle 11g DataGuard 搭建指南

Oracle 11g DataGuard 搭建指南

这是一套可完整复现的Oracle 11g物理备库(ADG)部署笔记,基于VirtualBox虚拟机,rhel6环境,覆盖核心原理、标准化搭建等内容。无需丰富的Linux或Oracle经验,跟着步骤操作即可成功搭建。如有错误,欢迎批评指正。


一、环境准备

1.1 VirtualBox 配置

打开 VirtualBox,进入「管理 → 主机网络管理器」,创建 Host-Only 网卡,默认网段为 192.168.56.1/24,关闭DHCP服务器,用于主机与虚拟机、主备虚拟机之间通信。

1.2 软件清单

提前下载以下文件,放在宿主机易访问目录(如 D:\software\):

文件名 说明
rhel-server-6.10-x86_64-dvd.iso RHEL 6.10 操作系统镜像
p13390677_112040_Linux-x86-64_1of7.zip Oracle 11g 数据库安装包分卷1
p13390677_112040_Linux-x86-64_2of7.zip Oracle 11g 数据库安装包分卷2
rlwrap-0.42-1.el6.x86_64.rpm sqlplus/rman 命令行增强工具(可选)
1.3 网络规划

采用 Host-Only + NAT 双网卡模式:

  • 主库:主机名primary,Host-Only IP 192.168.56.101/24
  • 备库:主机名standby,Host-Only IP 192.168.56.102/24
  • NAT网卡:自动获取IP,用于外网下载依赖包
1.4 磁盘与内存规划
  • 单节点内存:3072MB(3GB),双节点总占用6GB

  • 单节点系统盘:60GB 固定大小VMDK虚拟磁盘

  • 单节点分区方案:

    挂载点 大小 文件系统 核心用途
    /boot 1GB ext4 系统引导与内核文件
    swap 4GB swap 虚拟内存换页空间
    / 15GB ext4 系统根目录
    /u01 40GB ext4 Oracle软件与数据存储

二、创建虚拟机与安装系统

核心思路:先制作通用模板虚拟机,完成通用配置与Oracle软件安装,再完整克隆生成主备库,仅修改差异化参数,减少重复操作。

2.1 创建虚拟机
  1. 打开 VirtualBox,点击「新建」,名称设为primary,选择RHEL 6.10镜像
  2. 内存分配3072MB,创建60GB固定大小VMDK虚拟磁盘
  3. 启动顺序:硬盘优先,移除软驱
2.2 虚拟机硬件配置
  • 存储:挂载RHEL 6.10 ISO镜像
  • 网络:网卡1为Host-Only,网卡2为NAT
2.3 安装 RHEL 6.10
  1. 启动虚拟机,加载ISO,语言选English,时区Asia/Shanghai
  2. 软件选择:带GUI的服务器
  3. 按1.4章节分区方案手动分区
  4. 网络配置:主机名primary,Host-Only静态IP192.168.56.101/24
  5. 设置root密码为oracle,关闭Kdump,完成安装并重启

三、模板机系统通用前置配置(root用户执行)

3.1 网络与主机名配置
复制代码

# 修改主机名 hostname primary sed -i 's/HOSTNAME=.*/HOSTNAME=primary/' /etc/sysconfig/network # 重启网络服务 service network restart # 配置hosts解析,添加主备库映射 cat >> /etc/hosts <<EOF # DG主备库解析 192.168.56.101 primary 192.168.56.102 standby EOF # 验证网络连通性 ping -c 3 primary # 关闭NetworkManager服务 service NetworkManager stop chkconfig NetworkManager off

3.2 关闭防火墙与SELinux
复制代码

# 临时关闭iptables防火墙 service iptables stop # 永久关闭防火墙开机自启 chkconfig iptables off # 临时关闭SELinux setenforce 0 # 永久关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 验证SELinux状态,预期输出Disabled getenforce

3.3 创建Oracle用户与用户组
复制代码

# 创建用户组 groupadd -g 1000 oinstall groupadd -g 1031 dba groupadd -g 1032 oper # 创建oracle用户,加入用户组 useradd -u 1101 -g oinstall -G dba,oper oracle # 设置oracle用户密码(统一为oracle) echo "oracle" | passwd --stdin oracle # 验证用户创建成功 id oracle

3.4 创建Oracle安装目录并授权
复制代码

# 创建基础目录、软件目录、通用数据目录、归档目录 mkdir -p /u01/app/oracle/product/11.2.0.4/db_1 mkdir -p /u01/app/oracle/oradata mkdir -p /u01/app/oracle/arch mkdir -p /u01/app/oracle/admin/adump mkdir -p /u01/app/oraInventory mkdir -p /soft # 递归授权目录给oracle用户 chown -R oracle:oinstall /u01 chown -R oracle:oinstall /soft # 统一权限为775(Oracle官方标准) chmod -R 775 /u01 chmod -R 775 /soft

3.5 配置系统内核参数(3GB内存)
复制代码

# 编辑内核参数配置文件 cat >> /etc/sysctl.conf <<EOF # Oracle 11g 核心内核参数(3G内存) kernel.shmmax = 1610612736 # 物理内存的50%,1.5GB,适配AMM自动内存管理 kernel.shmall = 2097152 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 6815744 fs.aio-max-nr = 1048576 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 # DG稳定性增强参数 kernel.panic_on_oops = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_syncookies = 1 EOF # 注销掉原先的kernel配置 vi /etc/sysctl.conf # 使内核参数立即生效 sysctl -p

3.6 /dev/shm临时文件系统调整(适配3GB内存)

/dev/shm是Oracle AMM自动内存管理的核心,必须调整到不小于AMM内存最大值,否则数据库启动会报错。

复制代码

# 编辑/etc/fstab配置文件 vi /etc/fstab # 找到tmpfs对应的行,修改为以下内容(无则直接在末尾追加) tmpfs /dev/shm tmpfs defaults,size=2000M 0 0 # 重新挂载生效,无需重启系统 mount -o remount /dev/shm # 验证配置生效,预期输出大小为2G左右 df -h /dev/shm

3.7 配置Oracle用户资源限制
复制代码

# 修改nproc配置,避免覆盖limits.conf vi /etc/security/limits.d/90-nproc.conf # 将* soft nproc 1024改为 * soft nproc 16384 # 添加Oracle用户官方要求的资源限制 cat >> /etc/security/limits.conf <<EOF # Oracle用户资源限制(官方强制要求) oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768 EOF # 配置login文件,启用资源限制 cat >> /etc/pam.d/login <<EOF session required pam_limits.so EOF # 配置profile全局用户资源限制 cat >> /etc/profile <<EOF if [ \$USER = "oracle" ]; then if [ \$SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi EOF # 使配置生效 source /etc/profile

3.8 安装Oracle 11g必备依赖包
复制代码

# 挂载系统光盘 mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom # 配置本地YUM源 cat > /etc/yum.repos.d/local.repo <<EOF [local] name=Local RHEL 6.10 DVD baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0 EOF yum clean all yum repolist # 批量安装依赖 yum install -y binutils compat-libcap1 compat-libstdc++-33 \ elfutils-libelf-devel gcc gcc-c++ glibc glibc-devel ksh libaio \ libaio-devel libgcc libstdc++ libstdc++-devel libXext libXtst \ libX11 libXau libXi make sysstat unixODBC unixODBC-devel libaio.i686 libaio-devel.i686 # 安装rlwrap工具(需要先传上去) yum localinstall -y /soft/rlwrap-0.42-1.el6.x86_64.rpm # 验证依赖包安装完整性,无输出则表示全部安装成功 rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel | grep "not installed"

3.9 配置Oracle用户通用环境变量

模板机配置通用环境变量,克隆后仅需修改差异化参数即可。

复制代码

# 切换到oracle用户 su - oracle # 编辑环境变量文件 cat >> ~/.bash_profile <<'EOF' # Shell基础配置 PS1="[\u@\h:\w]\$ " alias sqlplus="rlwrap sqlplus" alias rman="rlwrap rman" export PS1 # Oracle核心环境变量 export LANG=en_US export TMP=/tmp export TMPDIR=$TMP export ORACLE_HOSTNAME=primary export ORACLE_UNQNAME=primdb export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/db_1 export TNS_ADMIN=$ORACLE_HOME/network/admin export ORACLE_SID=primdb export ORACLE_TERM=xterm # 字符集 export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS" export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK # 路径 export PATH=$ORACLE_HOME/bin:.:$PATH:$HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib umask 022 EOF # 使环境变量生效 source ~/.bash_profile # 验证环境变量 echo $ORACLE_HOME echo $PATH

3.10 安装Oracle 11.2.0.4软件(仅安装软件,不建库)
  1. 上传Oracle 11.2.0.4安装包到模板机/soft目录,执行解压:
复制代码

su - oracle cd /soft # 解压两个分卷压缩包(自动合并生成 database 文件夹) unzip -o p13390677_112040_Linux-x86-64_1of7.zip unzip -o p13390677_112040_Linux-x86-64_2of7.zip # 删除压缩包 rm p13390677_112040_Linux-x86-64_1of7.zip rm p13390677_112040_Linux-x86-64_2of7.zip # 重启 exit reboot

  1. 切换到图形化界面,执行安装程序:
复制代码

su - oracle cd /soft/database export DISPLAY=192.168.56.1:0.0 ./runInstaller

  1. 安装向导关键配置步骤: a. 配置安全更新:取消勾选「我希望通过My Oracle Support接收安全更新」,点击下一步,弹窗选择「是」 b. 安装选项:选择「仅安装数据库软件」,点击下一步 c. 网格安装选项:选择「单实例数据库安装」,点击下一步 d. 产品语言:默认English,可额外添加简体中文,点击下一步 e. 数据库版本:选择「企业版」,点击下一步 f. 安装位置:ORACLE_BASEORACLE_HOME自动识别环境变量,无需修改,点击下一步 g. 特权操作系统组:数据库管理员组选择dba,数据库操作员组选择oper,点击下一步 h. 先决条件检查:忽略swap警告,勾选「全部忽略」,点击下一步 i. 概要:核对所有配置无误后,点击「完成」,开始安装 j. 安装完成后,按提示切换到root用户执行2个脚本:

    复制代码

    /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0.4/db_1/root.sh k. 脚本执行完成后,点击「关闭」,完成Oracle软件安装

3.11 模板机清理与封装(为克隆做准备,关键!)
复制代码

# 清除所有 ifcfg 文件中的 HWADDR 行 sed -i '/^HWADDR=/d' /etc/sysconfig/network-scripts/ifcfg-eth[0-1] # 清理网卡规则,避免克隆后网卡无法启动 rm -rf /etc/udev/rules.d/70-persistent-net.rules # 关闭模板虚拟机 shutdown -h now # VirtualBox中移除模板机挂载的ISO镜像,避免克隆后重复挂载


四、克隆生成主备库虚拟机与差异化配置

4.1 VirtualBox完整克隆操作
  1. VirtualBox中选中主库primary,右键选择「复制」
  2. 新虚拟机名称:standby(备库),文件夹选择对应路径
  3. 勾选「重新初始化所有网卡的MAC地址」(必须勾选,否则MAC地址冲突导致网络不通)
  4. 克隆类型:选择「完整克隆」,点击下一步
  5. 硬盘分配:选择「为所有虚拟硬盘生成新的UUID」,点击「复制」
4.2 备库(standby)差异化配置
4.2.1 网络与主机名配置(root用户执行)
复制代码

# 修改主机名 hostname standby sed -i 's/HOSTNAME=.*/HOSTNAME=standby/' /etc/sysconfig/network # 配置网卡IP,编辑Host-Only网卡配置文件(ifcfg-eth0) sed -i 's/^IPADDR=.*/IPADDR=192.168.56.102/' /etc/sysconfig/network-scripts/ifcfg-eth0 # 重启网络服务 service network restart # 检查hosts解析,和主库完全一致 cat /etc/hosts # 验证主备网络互通 ping -c 3 primary ping -c 3 standby

4.2.2 Oracle环境变量差异化修改(oracle用户执行)
复制代码

su - oracle # 编辑.bash_profile,修改以下核心参数 sed -i 's/^export ORACLE_HOSTNAME=.*/export ORACLE_HOSTNAME=standby/' ~/.bash_profile sed -i 's/^export ORACLE_UNQNAME=.*/export ORACLE_UNQNAME=standb/' ~/.bash_profile sed -i 's/^export ORACLE_SID=.*/export ORACLE_SID=standb/' ~/.bash_profile # 使配置生效 source ~/.bash_profile # 验证 echo $ORACLE_SID

4.2.3 备库专属目录创建(oracle用户执行)
复制代码

# 创建审计目录、数据目录、归档目录 mkdir -p /u01/app/oracle/admin/standb/adump mkdir -p /u01/app/oracle/oradata/standb mkdir -p /u01/app/oracle/arch # 递归授权整个Oracle目录 chown -R oracle:oinstall /u01/app/oracle chmod -R 775 /u01/app/oracle

4.2.4 备库自启动配置(root用户执行)

备库不能OPEN,必须:启动监听 → 启动到MOUNT → 启动MRP同步进程

复制代码

# 给 rc.local 加执行权限 chmod +x /etc/rc.d/rc.local vi /etc/rc.d/rc.local # 在文件最后一行添加: # 备库 Oracle 开机自启(DG专用) su - oracle -c "/u01/app/oracle/product/11.2.0.4/db_1/bin/lsnrctl start" su - oracle -c "/u01/app/oracle/product/11.2.0.4/db_1/bin/sqlplus / as sysdba <<EOF startup mount; alter database recover managed standby database disconnect from session; exit; EOF"

4.3 主库(primary)差异化配置
4.3.1 主库专属目录创建(oracle用户执行)
复制代码

mkdir -p /u01/app/oracle/oradata/primdb mkdir -p /u01/app/oracle/admin/primdb/adump mkdir -p /u01/app/oracle/admin/primdb/dpdump chown -R oracle:oinstall /u01/app/oracle/oradata/primdb chown -R oracle:oinstall /u01/app/oracle/admin chmod -R 775 /u01/app/oracle/oradata/primdb chmod -R 775 /u01/app/oracle/admin

4.3.2 主库自启动配置(root用户执行)

主库需要:启动监听 → 启动数据库到OPEN状态

复制代码

# 给 rc.local 加执行权限 chmod +x /etc/rc.d/rc.local vi /etc/rc.d/rc.local # 在文件最后一行添加: # 主库 Oracle 开机自启 su - oracle -c "/u01/app/oracle/product/11.2.0.4/db_1/bin/lsnrctl start" su - oracle -c "/u01/app/oracle/product/11.2.0.4/db_1/bin/sqlplus / as sysdba <<EOF startup; exit; EOF"


五、DG主库核心配置(oracle用户,主库执行)

5.1 主库监听配置与数据库实例创建
5.1.1 创建监听

图形化界面执行netca,按照向导创建默认监听LISTENER,端口1521:

复制代码

su - oracle cd $ORACLE_HOME export DISPLAY=192.168.56.1:0.0 netca # 启动监听 lsnrctl start # 验证监听状态 lsnrctl status

5.1.2 DBCA创建主库实例
复制代码

su - oracle cd $ORACLE_HOME export DISPLAY=192.168.56.1:0.0 dbca

图形化界面执行dbca,创建数据库实例,核心配置步骤:

  1. 操作:选择「创建数据库」,点击下一步
  2. 模板:选择「一般用途或事务处理」,点击下一步
  3. 数据库标识:全局数据库名primdb,SIDprimdb,点击下一步
  4. 管理选项:取消勾选「配置Enterprise Manager」,减少资源占用,点击下一步
  5. 数据库凭据:为所有账户使用同一管理口令,设置密码oracle,点击下一步
  6. 存储选项:选择「文件系统」,点击下一步
  7. 数据库文件位置:选择「使用模板中的数据库文件位置」,路径为/u01/app/oracle/oradata/primdb,点击下一步
  8. 恢复配置:勾选「指定快速恢复区」,勾选「启用归档」,点击下一步
  9. 数据库内容:仅保留勾选Oracle Text、Sample Schemas,取消勾选其他非必要组件,点击下一步
  10. 初始化参数:
    • 内存:勾选Typical,内存大小设置为2048MB,勾选「Use Automatic Memory Management (AMM)」
    • 字符集:选择「AL32UTF8 - Unicode UTF-8 Universal Character Set」
    • 块大小:保持默认8192 Bytes(8K),Processes保持默认150
    • 连接模式:勾选「Dedicated Server Mode(专用服务器模式)」
  11. 数据库存储:无需修改,点击下一步
  12. 创建选项:仅保留勾选「创建数据库」,点击完成
  13. 概要:核对所有配置无误后,点击「确定」开始建库
  14. 建库完成后,点击「退出」
5.2 开启主库强制日志模式

强制日志模式下,数据库所有操作都会记录redo日志(包括nologging操作),确保备库能完全同步主库数据,DG搭建必须开启。

复制代码

sqlplus / as sysdba -- 查询当前强制日志状态 select force_logging from v$database; -- 开启强制日志模式 alter database force logging; -- 再次验证,预期输出YES select force_logging from v$database; exit

5.3 验证归档模式开启状态

DBCA建库时已开启归档,执行以下命令验证:

复制代码

sqlplus / as sysdba -- 查询归档模式 archive log list; select log_mode from v$database; -- 预期输出:Archive Mode exit

⚠️ 若未开启归档,执行以下命令开启:

复制代码

shutdown immediate; startup mount; alter database archivelog; alter database open;

5.4 配置DG核心参数

所有修改spfile的参数,需重启数据库生效;scope=both的参数,当前实例和spfile同时生效。

复制代码

sqlplus / as sysdba -- 1. 设置db_unique_name,主库唯一标识 alter system set db_unique_name='primdb' scope=spfile sid='*'; -- 2. 配置DG集群节点列表,必须包含主备库的db_unique_name alter system set log_archive_config='DG_CONFIG=(primdb,standb)' scope=spfile sid='*'; -- 3. 配置本地归档路径 alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primdb' scope=both sid='*'; -- 4. 配置备库远程归档路径 alter system set log_archive_dest_2='SERVICE=standby LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standb' scope=both sid='*'; -- 5. 启用归档路径 alter system set log_archive_dest_state_1=ENABLE scope=both sid='*'; alter system set log_archive_dest_state_2=ENABLE scope=both sid='*'; -- 6. 配置备库数据文件路径转换(主库:备库路径在前,主库路径在后) alter system set db_file_name_convert='/u01/app/oracle/oradata/standb','/u01/app/oracle/oradata/primdb' scope=spfile sid='*'; -- 7. 配置备库日志文件路径转换 alter system set log_file_name_convert='/u01/app/oracle/oradata/standb','/u01/app/oracle/oradata/primdb' scope=spfile sid='*'; -- 8. 配置备库文件自动管理 alter system set standby_file_management=AUTO scope=spfile sid='*'; -- 9. 配置FAL客户端和服务端 alter system set fal_client='primary' scope=both sid='*'; alter system set fal_server='standby' scope=both sid='*'; -- 10. 配置远程登录密码文件 alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile sid='*'; -- 重启数据库使所有spfile参数生效 shutdown immediate; startup; -- 验证参数配置是否生效 show parameter db_unique_name; show parameter log_archive_config; exit

⚠️ 关键注意事项:

  1. log_archive_dest_2中的SERVICE=standby必须和后续tnsnames.ora中的备库别名完全一致
  2. db_file_name_convertlog_file_name_convert参数顺序不能写反
  3. 若主备库数据文件、日志文件路径完全一致,可省略这两个参数
5.5 配置主库静态监听

数据库nomount状态下,PMON进程无法动态注册监听,必须配置静态监听才能远程连接到实例。

复制代码

# 编辑监听配置文件 vi $ORACLE_HOME/network/admin/listener.ora

写入以下内容:

复制代码

LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521)) ) ) # 静态监听配置 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = primdb) (SID_NAME = primdb) (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/db_1) ) ) ADR_BASE_LISTENER = /u01/app/oracle

重启监听使配置生效:

复制代码

lsnrctl stop lsnrctl start # 验证监听状态,预期看到primdb服务READY/UNKNOWN lsnrctl status

5.6 配置主库TNS网络服务名

主备库的tnsnames.ora文件内容完全一致。

复制代码

# 编辑TNS配置文件 vi $ORACLE_HOME/network/admin/tnsnames.ora

写入以下内容:

复制代码

# 主库本地别名 primary = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = primdb) ) ) # 备库远程别名 standby = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = primdb) ) )

⚠️ 备库的SERVICE_NAME必须和主库的db_name一致(primdb),不能写备库的db_unique_name


六、DG备库核心前置配置

6.1 同步主库密码文件

主备库之间的远程sysdba认证,依赖密码文件,主备库sys用户密码必须完全一致。

复制代码

# 主库执行:scp拷贝密码文件到备库 su - oracle cd $ORACLE_HOME/dbs scp orapwprimdb oracle@standby:$ORACLE_HOME/dbs/ # 备库执行:重命名密码文件为备库的ORACLE_SID对应名称 su - oracle cd $ORACLE_HOME/dbs mv orapwprimdb orapwstandb # 验证密码文件权限,必须是640,属主oracle:oinstall ls -l orapwstandb

6.2 创建备库参数文件并启动到nomount状态
复制代码

# 1. 主库执行:生成pfile参数文件 sqlplus / as sysdba SQL> create pfile from spfile; exit # 2. 主库执行:拷贝pfile文件到备库 cd $ORACLE_HOME/dbs scp initprimdb.ora oracle@standby:$ORACLE_HOME/dbs/ # 3. 备库执行:重命名pfile文件为备库ORACLE_SID对应名称 su - oracle cd $ORACLE_HOME/dbs mv initprimdb.ora initstandb.ora # 4. 备库执行:编辑pfile文件,修改核心参数 cat > initstandb.ora <<'EOF' memory_target=1216M memory_max_target=1216M compatible=11.2.0.4.0 *.audit_file_dest='/u01/app/oracle/admin/standb/adump' *.db_name='primdb' *.db_unique_name='standb' *.db_file_name_convert='/u01/app/oracle/oradata/primdb','/u01/app/oracle/oradata/standb' *.log_file_name_convert='/u01/app/oracle/oradata/primdb','/u01/app/oracle/oradata/standb' *.control_files='/u01/app/oracle/oradata/standb/control01.ctl','/u01/app/oracle/oradata/standb/control02.ctl' *.log_archive_config='DG_CONFIG=(primdb,standb)' *.log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standb' *.log_archive_dest_2='SERVICE=primary LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primdb' *.fal_client='standb' *.fal_server='primary' *.standby_file_management='AUTO' *.remote_login_passwordfile='EXCLUSIVE' *.processes=150 EOF # 5. 备库执行:通过pfile创建spfile,启动数据库到nomount状态 sqlplus / as sysdba -- 通过pfile创建spfile create spfile from pfile; -- 启动数据库到nomount状态 startup nomount; -- 验证数据库状态,预期输出STARTED select status from v$instance; exit

6.3 配置备库静态监听
复制代码

# 编辑监听配置文件 vi $ORACLE_HOME/network/admin/listener.ora

写入以下内容:

复制代码

LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521)) ) ) # 静态监听配置 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = primdb) (SID_NAME = standb) (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/db_1) ) ) ADR_BASE_LISTENER = /u01/app/oracle

重启监听使配置生效:

复制代码

lsnrctl stop lsnrctl start # 验证监听状态 lsnrctl status

6.4 配置备库TNS网络服务名

备库的tnsnames.ora文件和主库完全一致,直接从主库拷贝即可:

复制代码

# 主库执行:拷贝tnsnames.ora到备库 scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@standby:$ORACLE_HOME/network/admin/ # 备库验证文件内容 cat $ORACLE_HOME/network/admin/tnsnames.ora

6.5 主备库连通性与远程认证验证

这一步是DG搭建的核心卡点,必须确保主备库之间的TNS通信和sysdba远程认证完全正常。

复制代码

# 1. tnsping网络连通性测试 # 主库执行,预期均输出OK tnsping primary tnsping standby # 备库执行,预期均输出OK tnsping primary tnsping standby # 2. sysdba远程登录认证测试 # 主库执行,远程登录备库 sqlplus sys/oracle@standby as sysdba SQL> select status from v$instance; SQL> exit # 备库执行,远程登录主库 sqlplus sys/oracle@primary as sysdba SQL> select status from v$instance; SQL> exit

⚠️ 若连接失败,优先检查:密码文件一致性、静态监听配置、TNS配置、防火墙、hosts解析。


七、RMAN duplicate创建物理备库

Oracle 11g提供的from active database特性,可直接通过网络从主库复制数据文件、控制文件到备库,无需手动备份还原。

7.1 备库创建前置检查
  1. 主库处于open状态,实例运行正常
  2. 备库处于nomount状态,实例运行正常
  3. 主备库监听均正常启动,静态监听配置正确
  4. 主备库TNS连通性正常,sysdba远程认证通过
  5. 主备库密码文件完全一致,sys用户密码相同
7.2 执行RMAN duplicate创建备库
复制代码

# 备库执行,连接主库为target,备库为auxiliary rman target sys/oracle@primary auxiliary sys/oracle@standby nocatalog # 核心命令,创建物理备库 RMAN> duplicate target database for standby from active database nofilenamecheck;

命令说明:

  • for standby:创建的是备库控制文件,而非普通克隆库
  • from active database:直接从运行中的主库复制数据,无需提前备份
  • nofilenamecheck:跳过文件名一致性检查,已配置db_file_name_convert时必须添加

该命令执行时长取决于主库数据文件大小,执行完成后,备库会自动启动到mount状态。

7.3 备库创建完成状态验证
复制代码

-- 备库执行,验证数据库角色和状态 sqlplus / as sysdba select open_mode,database_role from v$database; exit

预期输出:

复制代码

OPEN_MODE DATABASE_ROLE -------------------- ---------------- MOUNTED PHYSICAL STANDBY

相关推荐
IT邦德2 小时前
如期而至,2026年Oracle Q2 季度补丁发布!
数据库·oracle
2401_837163892 小时前
mysql如何利用cron定时备份_mysql自动化配置说明
jvm·数据库·python
HalvmånEver2 小时前
MySQL表的约束(二)
java·数据库·mysql
梁萌2 小时前
MySQL 中 utf8mb4_bin 与 utf8mb4_general_ci 区别
数据库·mysql
2301_773553622 小时前
如何在登录界面添加自定义背景图片_Login CSS覆盖修改
jvm·数据库·python
cyber_两只龙宝2 小时前
【Oracle】Oracle之SQL的集合运算符
linux·运维·数据库·sql·云原生·oracle
m0_493934532 小时前
JavaScript中模块化在游戏引擎开发中的资源调度作用
jvm·数据库·python
abc123456sdggfd2 小时前
C# Dev Tunnels使用方法 C# Visual Studio如何公开本地Web API进行调试
jvm·数据库·python
m0_617881422 小时前
如何优雅处理SQL存储过程异常_使用TRY-CATCH块机制
jvm·数据库·python