dataguard(windows-linux )

本文档详细介绍了如何配置Oracle数据库的主备环境,包括操作系统和IP地址规划、数据库版本、环境变量设置、强制日志和归档模式的启用、参数配置、监听和tnsnames.ora文件的配置,以及主备库的创建和同步步骤。内容覆盖了从环境准备到数据库同步的全过程,是Oracle数据库高可用性方案的重要参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 环境准备

主库备库
操作系统windowsLinux
服务器名称primarynodestandbynode
IP地址规划192.168.186.132192.168.186.131
------------------------------------------------------
数据库版本11.2.0.411.2.0.4
db_namesfxtsfxt
db_unique_namesfxt_bfsfxt_bf
instance_namesfxtsfxt_bf
service_namesfxtsfxt
数据库安装安装数据库软件+创建监听+安装数据库安装数据库软件+创建监听

2.环境配置

1.修改节点名称:

C:\Windows\System32\drivers\etc\hosts

#127.0.0.1   localhost localhost.localdomain localhost4 
#::1         localhost localhost.localdomain localhost6
192.168.186.132  primarynode
192.168.186.131  standbynode
2. 从库环境变量配置
PATH=$PATH:$HOME/bin

ORACLE_SID=sfxt_bf; export ORACLE_SID
ORACLE_BASE=/data/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin; export PATH
export TEMP=/tmp
export TMPDIR=/tmp
umask 022

export PATH

3.主库配置

3.1 主库设置强制日志

  • 查询是否启用强制记录日志
select force_logging from v$database;
  • 如果未启用,则使用下面语句来开启强制记录日志
alter database force logging;  --强制记录日志

3.2 启用归档

  • 查询是否启用归档
archive log list 
--或者
select log_mode from v$database;
  • 如果未启用归档,可以按照如下步骤开启归档
----Oracle 11g数据库归档模式开启

--STEP1:以sysdba角色登陆数据库
sqlplus / as sysdba

--STEP2:干净的关闭数据库
shutdown immediate

--STEP3:将数据库启动到mount状态
startup mount

--STEP4:开启归档
alter database archivelog;

--STEP5:打开数据库
alter database open

3.3 主库参数配置

  • db_unique_name
SQL> alter system set db_unique_name = 'sfxt' scope=spfile;
  • log_archive_config
SQL> alter system set log_archive_config='DG_CONFIG=(sfxt,sfxt_bf)' scope=spfile;
  • log_archive_dest_1
SQL> alter system set log_archive_dest_1='LOCATION=C:\app\Administrator\product\11.2.0\dbhome_1\archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sfxt' scope=both;
  • log_archive_dest_2
SQL> alter system set log_archive_dest_2='SERVICE=tnssfxt_bf LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sfxt_bf' scope=spfile;
  • log_archive_dest_state_1
alter system set log_archive_dest_state_1 = ENABLE;
  • log_archive_dest_state_2
alter system set log_archive_dest_state_2 = ENABLE;
  • db_file_name_convert 查看数据文件的位置:
SQL> select name from v$datafile;
  • 如果主库与备库数据文件位置不相同,则需要使用db_file_name_convert来转换。
SQL> alter system set db_file_name_convert='/data/oracle/oradata/sfxt_bf','C:\APP\ADMINISTRATOR\ORADATA\SFXT' scope=spfile;
  • log_file_name_convert 查看在线日志文件的位置:
SQL> select member from v$logfile;
  • 如果主库与备库在线日志文件位置不相同,则需要使用log_file_name_convert来转换。
SQL> alter system set log_file_name_convert='/data/oracle/oradata/sfxt_bf','C:\APP\ADMINISTRATOR\ORADATA\SFXT' scope=spfile;
  • standby_file_management
SQL> alter system set standby_file_management=auto scope=spfile;
  • fal_client
SQL> alter system set fal_client='tnssfx' scope=both;
  • fal_server
SQL> alter system set fal_server='tnssfxt_bf' scope=both;

3.4 创建需要的文件夹

C:\app\Administrator\product\11.2.0\dbhome_1\archivelog

3.5 重新应用新的参数文件

SYS> shutdown immediate; —一致性停库
SYS> create spfile from pfile; —创建新的spfile
SYS> startup;

3.6 添加主库和备库的standby日志组

  • standby日志组个数:配置为redo日志组个数+1
  • 在主库与备库都添加standby日志组。主库可以不添加,但是如果后期发生主备切换,还是要添加,所以最好一次性添加。
  • 只查询standby日志组: select * from v$standby_log ;
alter database add standby logfile group 4 ('C:\app\Administrator\oradata\sfxt\stredo04.log') size 50M;
alter database add standby logfile group 5 ('C:\app\Administrator\oradata\sfxt\stredo05.log') size 50M;
alter database add standby logfile group 6 ('C:\app\Administrator\oradata\sfxt\stredo06.log') size 50M;
alter database add standby logfile group 7 ('C:\app\Administrator\oradata\sfxt\stredo07.log') size 50M;

3.7 主库静态监听配置

[oracle@primarynode admin]$ vim listener.ora

# listener.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = primarynode)(PORT = 1521))
)
)
)

SID_LIST_LISTENER = 
(SID_LIST = 
(SID_DESC = 
(GLOBAL_DBNAME=sfxt)
(SID_NAME = sfxt)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)       
) 
) 

ADR_BASE_LISTENER = /u01/oracle

3.8 主库tnsnames.ora文件配置

vim tnsnames.ora

# tnsnames.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
tnssfxt =
(DESCRIPTION =
 (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.186.132)(PORT = 1521))
 )
 (CONNECT_DATA =
   (SERVICE_NAME = sfxt)
 )
)

tnssfxt_bf =
(DESCRIPTION =
 (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.186.131)(PORT = 1521))
 )
 (CONNECT_DATA =
   (SERVICE_NAME = sfxt)
 )
)

4. 备库配置

4.1 设置一个密码文件

1.指定standby database的ORACLE_SID
export ORACLE_SID=stddb
2.跳转到dbs文件夹下
cd $ORACLE_HOME/dbs
3.创建密码文件
orapwd file=orapwsfxt_bf password=sys123

4.3 初始化参数文件

  • 在主库生成初始化参数文件

    SQL> create pfile from spfile;
    
  • 拷贝主库的参数文件到备库并重命名

  • 修改备库的参数文件内容

    sfxt.__java_pool_size=4194304
    sfxt.__large_pool_size=4194304
    sfxt.__oracle_base='/data/oracle'#ORACLE_BASE set from environment
    sfxt.__pga_aggregate_target=343932928
    sfxt.__sga_target=515899392
    sfxt.__shared_io_pool_size=0
    sfxt.__shared_pool_size=192937984
    sfxt.__streams_pool_size=0
    *.audit_file_dest='/data/oracle/admin/sfxt_bf/adump'
    *.audit_trail='db'
    *.compatible='11.2.0.0.0'
    *.control_files='/data/oracle/oradata/sfxt_bf/control01.ctl','/data/oracle/flash_recovery_area/sfxt_bf/control02.ctl'
    *.db_block_size=8192
    *.db_domain=''
    *.db_name='sfxt'
    *.db_recovery_file_dest='/data/oracle/flash_recovery_area'
    *.db_recovery_file_dest_size=4102029312
    *.diagnostic_dest='/data/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=sfxtXDB)'
    *.local_listener='LISTENER_SFXT'
    *.memory_target=858783744
    *.open_cursors=300
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.undo_tablespace='UNDOTBS1'
    db_unique_name=sfxt_bf
    log_archive_config='dg_config=(sfxt,sfxt_bf)'
    log_archive_dest_1=''LOCATION=/data/oracle/product/11.2.0/db_1/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=sfxt_bf'
    log_archive_dest_2='SERVICE=tnssfxt LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=sfxt'
    log_archive_dest_state_1=enable
    log_archive_dest_state_2=enable
    db_file_name_convert='C:\APP\ADMINISTRATOR\ORADATA\SFXT','/data/oracle/oradata/sfxt_bf'
    log_file_name_convert='C:\APP\ADMINISTRATOR\ORADATA\SFXT','/data/oracle/oradata/sfxt_bf'
    fal_client='tnssfxt_bf'
    fal_server='tnssfxt'
    standby_file_management='AUTO'
    
  • 新建需要的目录

    mkdir -p /data/oracle/admin/sfxt_bf/adump
    mkdir -p /data/oracle/oradata/sfxt_bf
    mkdir -p  /data/oracle/flash_recovery_area/sfxt_bf
    
  • 将控制文件复制过来

    注意控制文件一般有两个

    C:\app\Administrator\oradata\sfxt\CONTROL01.CTL

    C:\app\Administrator\flash_recovery_area\sfxt\CONTROL02.CTL

4.4 使用pfile文件创建spfile文件

登陆到idle数据库
sqlplus / as sysdba
创建spfile
create spfile from pfile
启动数据库到nomount状态
startup nomount

4.5 配置静态监听

[oracle@standbynode admin]$ vim listener.ora
# listener.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = standbynode)(PORT = 1521))
)
)
)

SID_LIST_LISTENER = 
(SID_LIST = 
(SID_DESC = 
(GLOBAL_DBNAME=sfxt)
(SID_NAME = sfxt_bf)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)       
) 
) 

ADR_BASE_LISTENER = /data/oracle

4.5 配置tnsnames.ora文件,直接把主库的拷贝过来即可

4.6 测试网络连通性

在主库与备库上均执行,确保可以正常访问
tnsping tnssfxt
tnsping tnssfxt_bf
在主库:
sqlplus sys/sys123@tnssfxt as sysdba
sqlplus sys/sys123@tnssfxt_bf as sysdba

4.7 参数检查(可选)

1.db_unique_name       :2个节点需要不一样
2.compatible           :主库与备库兼容性需一致
3.log_archive_config      : 配置主库与备库的db_unique_name
4.log_archive_dest_1,2    :归档日志的路径
5.log_archive_dest_state_2 :
enable -- 启用log_archive_dest_2
defer  --禁用log_archive_dest_2
6.db_file_name_convert    :数据文件转换路径
7.log_file_name_convert   :日志文件转换路径
8.standby_file_management :设置为auto
9.log_archive_format     :日志文件格式,两边需一致

5. 使用duplicate创建物理standby

5.1 连接到主库和备库

备库端执行:
## 一定要加nocatalog,否则在执行duplicate时会报错
[oracle@primarynode ~]$ rman target sys/sys123@sfxt auxiliary sys/sys123@sfxt_bf nocatalog

5.2 使用duplicate复制数据库

RMAN> duplicate target database for standby from active database nofilenamecheck;

6. 开始同步数据库(在备库上执行)

alter database open;  

--方式一:开启实时同步
alter database recover managed standby database using current logfile disconnect from session;
--或简写为:
alter database recover managed standby database using current logfile disconnect;

--方式二:开启同步(日志切换时才同步)
alter database recover managed standby database disconnect from session;

7.检查是否执行成功

7.1 主库状态查看

SQL> select    open_mode,      --数据库打开模式,如果实时同步,则为:read only with apply,取消同步则为:read only
          database_role,       --数据库角色,是主库还是备库
          protection_mode,     --保护模式
          protection_level     --保护级别
from  v$database;  
SQL> select open_mode,database_role,protection_mode,protection_level from  v$database;  

OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE       PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
READ WRITE           PRIMARY          MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

7.2 备库状态查看

SQL> select    open_mode,          
          database_role,      
          protection_mode,     
          protection_level     
from  v$database;   
OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE       PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值