ORACLE EBS DATAGUARD 搭建

一.环境信息

数据库软件都已经安装好

primary

数据库版本:11.2.0.3
是否RAC:N
实例名称:pri

standby

数据库版本:11.2.0.3
是否RAC:N
实例名称:std

db_name 一般和主库保持一致

修改hosts文件

在两个节点的/etc/hosts文件中分别加入双方主机名和IP的映射。

二.主库操作

查看在线日志

SELECT thread#, group#, bytes / 1024 / 1024
  FROM v$log;

SELECT *
  FROM v$logfile;

确保开启日志归档

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /data/ebs/pri/db/apps_st/data/archive
Oldest online log sequence     5738
Current log sequence           5739
--如果没有开启则关闭数据启动到mount模式后来开启归档
SQL> alter database archivelog;
--打开数据库
SQL> alter database open;

主库配置强制归档

alter database force logging;

增加standby 日志组

ALTER DATABASE add standby logfile GROUP 3 ('/data/ebs/pri/db/apps_st/data/log03a_std.dbf','/data/ebs/pri/db/apps_st/data/log03b_std.dbf') size 1000m;

ALTER DATABASE add standby logfile GROUP 4 ('/data/ebs/pri/db/apps_st/data/log04a_std.dbf','/data/ebs/pri/db/apps_st/data/log04b_std.dbf') size 1000m;

ALTER DATABASE add standby logfile GROUP 5 ('/data/ebs/pri/db/apps_st/data/log05a_std.dbf','/data/ebs/pri/db/apps_st/data/log05b_std.dbf') size 1000m;

在主库创建密码文件

#注意ORACLE_SID 大小写
orapwd file=orapwpri password=oracle force=y
scp orapwPRI [email protected]:/data/ebs/std/db/tech_st/11.2.0/dbs/orapwSTD

#保证 remote_login_passwordfile 参数 = EXCLUSIVE .
通过 sqlplus sys/oracle@pri as sysdba 来验证可以相互登录

查看主库是否启用spfile

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /data/ebs/pri/db/tech_st/11.2.
                                                 0/dbs/spfilePRI.ora

设置主库参数

alter system set log_archive_config='dg_config=(pri,std)' scope=spfile;#pri、std分别为主库备库的sid

SQL> alter system set log_archive_dest_1='LOCATION=/data/ebs/pri/db/apps_st/data/archive valid_for=(all_logfiles,all_roles) db_unique_name=pri' scope=spfile;

System altered.#这个参数在设置的时候,都要义所属节点的文件路径和db_unique_name一致

SQL> alter system set log_archive_dest_2='SERVICE=std ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std' scope=spfile;#这个参数在设置的时候,都要义所属节点的文件路径和db_unique_name一致

System altered.

SQL> alter system set log_archive_dest_state_1=enable scope=spfile;

System altered.

SQL> alter system set log_archive_dest_state_2=enable scope=spfile;

System altered.

SQL> alter system set log_archive_max_processes=30 scope=both;

System altered.

SQL> alter system set standby_file_management=auto  scope=spfile;

System altered.

SQL> show parameter db_create_file_dest   

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string
#上面这个参数可以不用设置

SQL> alter system set db_file_name_convert='/data/ebs/std/db/apps_st/data','/data/ebs/pri/db/apps_st/data' scope=spfile; #(第二个参数才是本地路径)

System altered.

SQL> alter system set log_file_name_convert='/data/ebs/std/db/apps_st/data','/data/ebs/pri/db/apps_st/data' scope=spfile; #(第二个参数才是本地路径)

System altered.

SQL> create pfile from spfile;

File created.

修改 tnsnames.ora和listener.ora

#在tnsnames.ora最后加入
IFILE=/data/ebs/pri/db/tech_st/11.2.0/network/admin/dg_std_ifile.ora
#然后在dg_std_ifile.ora这个文件填写对端库的tns

STD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xx.xx.xx)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = std)
    )
  )

#listener.ora
SID_LIST_PRI =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = pri_DGMGRL)#这一行是新增的,其中pri是db_unique_name
      (ORACLE_HOME= /data/ebs/pri/db/tech_st/11.2.0)
      (SID_NAME = PRI)
    )
  )

三.备库设置

设置备库参数

–在备库段通过spfile 创建pfile,然后修改如下参数


*.db_name='std' 
*.db_unique_name='std' DG主库和备库的db_name必须一致,db_unique_name不一致
*.log_archive_config='dg_config=(pri,std)' pri主数据库SID,std备份数据库SID

*.log_archive_dest_1='location=/u01/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=pri' #当前节点路径
*.log_archive_dest_2='service=pri valid_for=(online_logfiles,primary_role) db_unique_name=pri' #对端主库的信息

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.log_archive_max_processes=4

*.fal_server='std' #对端主库的的SID

*.fal_client='pri' #当前节点的信息

*.db_file_name_convert='/u01/app/oracle/oradata/std','/u01/app/oracle/oradata/pri' #第一个目录是对对端主库路径,第二个是当前节点路径

*.log_file_name_convert='/u01/app/oracle/oradata/std','/u01/app/oracle/oradata/pri' #第一个目录是备份数据库数据文件路径(备份服务器上有此目录),第二个是主数据库数据文件路径

*.standby_file_management='auto'

在备库启动到nomount

SQL> startup nomount
ORACLE instance started.

Total System Global Area 1.0689E+10 bytes
Fixed Size                  2237776 bytes
Variable Size            4798286512 bytes
Database Buffers         5872025600 bytes
Redo Buffers               16924672 bytes
SQL> show parameter db_unique_name

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
db_unique_name                       string
std
SQL> create spfile from pfile;

File created.

SQL> shutdown immediate
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1.0689E+10 bytes
Fixed Size                  2237776 bytes
Variable Size            4798286512 bytes
Database Buffers         5872025600 bytes
Redo Buffers               16924672 bytes
SQL> exit

修改 tnsnames.ora和listener.ora

#在tnsnames.ora最后加入
IFILE=/data/ebs/std/db/tech_st/11.2.0/network/admin/dg_pri_ifile.ora
#然后在dg_std_ifile.ora这个文件填写对端库的tns

PRI =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xx.xx.xx)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pri)
    )
  )

#修改listener.ora
SID_LIST_PRI =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = std_DGMGRL)#只有这一行是新增的,其中pri是db_unique_name,这个是给db_broker用的
      (ORACLE_HOME= /data/ebs/pri/db/tech_st/11.2.0)
      (SID_NAME = PRI)
    )
  )


四.用tnsping 验证配置

在两个节点分别用 tnsping db_unique_name 来验证互通性

五.在备库段进行传输

[orastd@ifeng-ebs-test-db archive]$ rman target sys/oracle@pri auxiliary sys/oracle@std

Recovery Manager: Release 11.2.0.3.0 - Production on Fri Aug 20 20:39:24 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: PRI (DBID=269162849)
connected to auxiliary database: PRI (not mounted)

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

#完成后,启动到startup状态
alter database open;

然后进行验证,配置到这一步已经OK了,下面的步骤是配置db_broker,这个工具相当于一个管理工具,敲一行命令可以实现主备切换,参数配置。不用再各个节点都敲一遍了。

六.进行验证

--切换日志测试,如果一直说明是OK的
--主库
SQL> alter system switch logfile;
SQL>select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

--备库
SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

七.配置dg broker

修改参数

#两个节点都要执行
alter system set dg_broker_start=true;
#下面任选一个节点执行
create configuration dg as primary database is pri connect identifier is pri;
add database std as connect identifier is std;

测试切换

DGMGRL> show configuration

Configuration - dg

  Protection Mode: MaxPerformance
  Databases:
    pri  - Primary database
    std - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS
#下面这个命令时备库当主节点使用
DGMGRL> switchover to std
Performing switchover NOW, please wait...
New primary database "std" is opening...
Operation requires shutdown of instance "PRI" on database "pri"
Shutting down instance "PRI"...
ORACLE instance shut down.
Operation requires startup of instance "PRI" on database "pri"
Starting instance "PRI"...
ORACLE instance started.
Database mounted.
Database opened.
Switchover succeeded, new primary is "std"
DGMGRL> show configuration

Configuration - dg

  Protection Mode: MaxPerformance
  Databases:
    std - Primary database
    pri  - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

DGMGRL> 

切回的时候发生错误:

DGMGRL> switchover to pri
Performing switchover NOW, please wait...
New primary database "pri" is opening...
Operation requires shutdown of instance "STD" on database "std"
Shutting down instance "STD"...
ORACLE instance shut down.
Operation requires startup of instance "STD" on database "std"
Starting instance "STD"...
Unable to connect to database
ORA-12545: Connect failed because target host or object does not exist

Failed.
Warning: You are no longer connected to ORACLE.

Please complete the following steps to finish switchover:
        start up instance "STD" of database "std"

查看两个节点对应的alert日志

没看出问题来。
看下数据库的配置信息,发生在StaticConnectIdentifier都是配置的主机名,查看主库的/etc/hosts文件,发现主机名没有配置到里面去,加上后,再重新切换就好了。

DGMGRL> show database verbose std

Database - std

  Role:            PHYSICAL STANDBY
  Intended State:  APPLY-ON
  Transport Lag:   0 seconds
  Apply Lag:       0 seconds
  Real Time Query: ON
  Instance(s):
    STD

  Properties:
    DGConnectIdentifier             = 'std'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'OPTIONAL'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyParallel                   = 'AUTO'
    StandbyFileManagement           = 'AUTO'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '30'
    LogArchiveMinSucceedDest        = '1'
    DbFileNameConvert               = '/data/ebs/pri/db/apps_st/data, /data/ebs/std/db/apps_st/data'
    LogFileNameConvert              = '/data/ebs/pri/db/apps_st/data, /data/ebs/std/db/apps_st/data'
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    SidName                         = 'STD'
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ifeng-ebs-test-db)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=std_DGMGRL)(INSTANCE_NAME=STD)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = '/data/ebs/std/db/apps_st/data/archive'
    AlternateLocation               = ''
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = '%t_%s_%r.dbf'
    TopWaitEvents                   = '(monitor)'

Database Status:
SUCCESS

DGMGRL> 

参考文档

https://www.modb.pro/doc/39007?xzs=
https://www.modb.pro/doc/38709?xzs=
https://www.modb.pro/doc/514
https://www.cnblogs.com/yhfssp/p/7815078.html

猜你喜欢

转载自blog.csdn.net/x6_9x/article/details/119892131