已索引

环境及规划

主库:192.168.4.117、192.168.4.118、192.168.4.119、192.168.4.120(双节点RAC)
备库:192.169.4.117(单节点RAC)、192.169.4.119

主库的实例名为cybankdb1/cybankdb2,数据库唯一名为cybankdb,数据库名为cybankdb
备库的实例名为cybankdbstd,数据库唯一名为cybankdbstd,数据库名为cybankdb

主库服务器上已经安装好了 grid 和 oracle 数据库软件,并且创建好了数据库 cybankdb。
备库服务器上只安装了 grid 和 oracle 软件。

主库完成后期配置

需要主库完成后期配置后,再配置ADG,否则有很多地方需要改动。

搭建常规 ADG

主库日志模式(仅在第一个节点上操作)

主库需要打开归档,且启用强制日志。

[xoracle]$ srvctl stop database -d cybankdb
SQL> startup mount;  
SQL> alter database archivelog;  
SQL> alter system set log_archive_dest_1='LOCATION=+FRA';  
SQL> alter database force logging;  
SQL> shutdown immediate;
[xoracle]$ srvctl start database -d cybankdb
SQL> alter system switch logfile;   <----- 最佳实践,RAC 两个节点都执行几次以产生归档,避免后面运行 duplicate 命令时出错,

主库配置 standby 日志(仅在第一个节点上操作)

检查主库当前日志情况(每个线程的组数和大小)

set lines 200;
set pages 800;
col member for a60;
select THREAD#,MEMBER,f.GROUP#,BYTES/1024/1024 "SIZE(M)" 
from v$logfile f 
join v$log g 
on f.group# = g.group#
order by THREAD#,GROUP#;  

   THREAD# MEMBER                                                           GROUP#    SIZE(M)
---------- ------------------------------------------------------------ ---------- ----------
         1 +DATA/cybankdb/ONLINELOG/group_1.289.1154728351                          1       2048
         1 +FRA/cybankdb/ONLINELOG/group_1.260.1154728357                           1       2048
         1 +DATA/cybankdb/ONLINELOG/group_2.290.1154728351                          2       2048
         1 +FRA/cybankdb/ONLINELOG/group_2.257.1154728357                           2       2048
         1 +DATA/cybankdb/ONLINELOG/group_3.291.1154728351                          3       2048
         1 +FRA/cybankdb/ONLINELOG/group_3.261.1154728357                           3       2048
         1 +DATA/cybankdb/ONLINELOG/group_4.292.1154728351                          4       2048
         1 +FRA/cybankdb/ONLINELOG/group_4.258.1154728357                           4       2048
         1 +DATA/cybankdb/ONLINELOG/group_5.293.1154728351                          5       2048
         1 +FRA/cybankdb/ONLINELOG/group_5.259.1154728357                           5       2048
         2 +DATA/cybankdb/ONLINELOG/group_6.296.1154728625                          6       2048
         2 +FRA/cybankdb/ONLINELOG/group_6.262.1154728627                           6       2048
         2 +DATA/cybankdb/ONLINELOG/group_7.297.1154728629                          7       2048
         2 +FRA/cybankdb/ONLINELOG/group_7.263.1154728631                           7       2048
         2 +DATA/cybankdb/ONLINELOG/group_8.298.1154728633                          8       2048
         2 +FRA/cybankdb/ONLINELOG/group_8.264.1154728637                           8       2048
         2 +DATA/cybankdb/ONLINELOG/group_9.299.1154728639                          9       2048
         2 +FRA/cybankdb/ONLINELOG/group_9.265.1154728641                           9       2048
         2 +DATA/cybankdb/ONLINELOG/group_10.300.1154728643                        10       2048
         2 +FRA/cybankdb/ONLINELOG/group_10.266.1154728645                         10       2048

20 rows selected.

配置 standby 日志

alter database add standby logfile  thread 1 group 41 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 1 group 42 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 1 group 43 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 1 group 44 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 1 group 45 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 1 group 46 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 2 group 47 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 2 group 48 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 2 group 49 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 2 group 50 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 2 group 51 ('+DATA','+FRA') size 2048m;
alter database add standby logfile  thread 2 group 52 ('+DATA','+FRA') size 2048m;

每个节点添加 n + 1 组。

主库配置参数(仅在第一个节点上操作)

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(cybankdb,cybankdbstd)' sid='*';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+FRA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=cybankdb' sid='*';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=cybankdbstd LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cybankdbstd' sid='*';
alter system set FAL_SERVER='cybankdbstd' sid='*';
alter system set DB_FILE_NAME_CONVERT='+DATADG/CYBANKDBSTD/','+DATA/CYBANKDB/','+FRADG/CYBANKDBSTD/','+FRA/CYBANKDB/'  sid='*' scope=spfile;
alter system set LOG_FILE_NAME_CONVERT='+DATADG/CYBANKDBSTD/','+DATA/CYBANKDB/','+FRADG/CYBANKDBSTD/','+FRA/CYBANKDB/' sid='*' scope=spfile;
alter system set STANDBY_FILE_MANAGEMENT=AUTO sid='*';

修改后重启实例:

[xoracle]$ srvctl stop database -d cybankdb
[xoracle]$ srvctl start database -d cybankdb

生成参数文件并传送至备库(仅在第一个节点上操作)

SQL> create pfile='/tmp/pfile.cy' from spfile;
[xoracle]$ scp /tmp/pfile.cy 192.169.4.117:$ORACLE_HOME/dbs/initcybankdbstd.ora

备库关闭透明大页并配置大页

此时,因为没有数据库,所以大页处于未使用状态,待ADG完成,再次检查。

备库配置参数

[xoracle]$ vim $ORACLE_HOME/dbs/initcybankdbstd.ora
DB_NAME=cybankdb
DB_UNIQUE_NAME=cybankdbstd
LOG_ARCHIVE_CONFIG='DG_CONFIG=(cybankdb,cybankdbstd)'
LOG_ARCHIVE_DEST_1='LOCATION=+FRADG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=cybankdbstd'
LOG_ARCHIVE_DEST_2='SERVICE=cybankdb LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cybankdb'
FAL_SERVER=cybankdb
DB_FILE_NAME_CONVERT='+DATA/CYBANKDB/','+DATADG/CYBANKDBSTD/','+FRA/CYBANKDB/','+FRADG/CYBANKDBSTD/'
LOG_FILE_NAME_CONVERT='+DATA/CYBANKDB/','+DATADG/CYBANKDBSTD/','+FRA/CYBANKDB/','+FRADG/CYBANKDBSTD/'
STANDBY_FILE_MANAGEMENT=AUTO
CONTROL_FILES='+DATADG/CYBANKDBSTD/CONTROLFILE/control01.ctl','+FRADG/CYBANKDBSTD/CONTROLFILE/control02.ctl'

如下内容官方文档上没有写,但是需要根据情况修改:
*.db_create_file_dest='+DATADG'
*.db_recovery_file_dest='+FRADG'

将如下的undo配置:
cybankdb2.undo_tablespace='UNDOTBS2'
cybankdb1.undo_tablespace='UNDOTBS1'
修改为:
*.undo_tablespace='UNDOTBS1'


建议修改:
*.audit_file_dest='/opt/database/oracle/admin/cybankdbstd/adump'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=cybankdbstdXDB)'

删掉如下配置:
*.所有内存子组件配置
*.cluster_database=true
cybankdb2.thread=2
cybankdb1.thread=1
cybankdb1.instance_number=1
cybankdb2.instance_number=2
*.local_listener='-oraagent-dummy-'
family:dw_helper.instance_mode='read-only'

根据参数文件创建目录结构:

[xoracle]$ mkdir -p /opt/database/oracle/admin/cybankdbstd/adump
[xgrid]$ asmcmd
ASMCMD> mkdir +DATADG/CYBANKDBSTD/
ASMCMD> mkdir +DATADG/CYBANKDBSTD/CONTROLFILE/
ASMCMD> mkdir +FRADG/CYBANKDBSTD/
ASMCMD> mkdir +FRADG/CYBANKDBSTD/CONTROLFILE

然后启动实例到 nomount。

[xoracle]$ sqlplus / as sysdba
SQL> startup nomount

主备库配置网络

在备库上静态注册一个与 DB_UNIQUE_NAME 不同的临时服务名,然后重启监听,示例如下:

[xgrid]$ vim $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (GLOBAL_DBNAME=cybankdbstdxw)
         (SID_NAME=cybankdbstd)
         (ORACLE_HOME=/opt/database/oracle/product/db_1)
      )
   )
   
[xgrid]$ lsnrctl reload
[xgrid]$ lsnrctl status

然后配置可同时访问主备库的 tnsnames。
只需要在主库第一节点配置 tnsnames 文件即可,然后将 tnsnames 复制到备库上。
这儿的 IP 地址使用的是 VIP 或者 PUBLIC IP。

tnsnames 示例如下:

[xoracle]$ vim $ORACLE_HOME/network/admin/tnsnames.ora

cybankdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.119)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cybankdb)
    )
  )

cybankdbstd =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.169.4.119)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cybankdbstdxw)
    )
  )

同步密码文件

将主库的密码文件复制到备库(主库第一个节点上操作):

[xoracle]$ srvctl config database -d cybankdb
[xoracle]$ orapwd file='/tmp/orapwcybankdbstd' input_file='+DATA/CYBANKDB/PASSWORD/pwdcybankdb.283.1178988953'
??[xgrid]$ pwcopy pwdcybankdb.281.1169123575 /home/xgrid/    ?????

[xoracle]$ scp /tmp/orapwcybankdbstd 192.169.4.119:$ORACLE_HOME/dbs/orapwcybankdbstd

测试 Oracle Net 连通性

一定要做测试!使用 tnsnames 测试连接(主备都要测试,主库只测第一个节点即可)。

[xoracle]$ sqlplus sys@cybankdb as sysdba
[xoracle]$ sqlplus sys@cybankdbstd as sysdba

开始数据库复制

禁用主库归档日志删除任务(如果有的话)。

在主库第一节点上执行如下命令:

$ rman target / auxiliary sys/xxxx@cybankdbstd nocatalog
-- 直接执行下面的命令就可以,新库没有啥数据
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;

恢复 Oracle Net 配置

删除备库的 listener.ora 文件添加的所有内容,然后重启监听,示例如下:

[xgrid]$ vim $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (GLOBAL_DBNAME=cybankdbstdxw)
         (SID_NAME=cybankdbstd)
         (ORACLE_HOME=/opt/database/oracle/product/db_1)
      )
   )
   
$ lsnrctl stop
$ lsnrctl start

更正 tnsnames 文件中的连接(到主库使用SCAN,到备库目前仅只需修改服务名),同步主备库所有节点,注意是所有节点。

$ vim $ORACLE_HOME/network/admin/tnsnames.ora

至此,备库会自动到主库上去取缺失的日志文件并进行recover,当备库 alert 日志文件不再变化后,即可打开备库。

打开备库数据库

SQL> alter database open;

启用实时同步

SQL> alter database recover managed standby database using current logfile disconnect from session;

检查实时同步

set lines 200;
select open_mode,database_role,switchover_status from v$database;


OPEN_MODE            DATABASE_ROLE    SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY NOT ALLOWED

SQL> select name,value from V$DATAGUARD_STATS;

NAME                             VALUE
-------------------------------- ----------------------------------------------------------------
transport lag                    +00 00:00:00
apply lag                        +00 00:00:00
apply finish time
estimated startup time           32

在主库创建一个测试表,检查备库上是否生成。

检查大页是否使用

### grep -i huge /proc/meminfo 
AnonHugePages:         0 kB
HugePages_Total:   14610
HugePages_Free:       37
HugePages_Rsvd:       30
HugePages_Surp:        0
Hugepagesize:       2048 kB

备库后期配置

备库创建 spfile

SQL> create spfile='+DATADG' from pfile;
SQL> ! mv $ORACLE_HOME/dbs/initcybankdbstd.ora /tmp/
SQL> shutdown immediate;

将数据库纳入集群管理

[xoracle]$ srvctl add database -d cybankdbstd -o /opt/database/oracle/product/db_1
[xoracle]$ srvctl add instance -d cybankdbstd -i cybankdbstd -n cybankdbdg
[xoracle]$ srvctl enable database -d cybankdbstd

将密码文件纳入集群管理

orapwd file='+DATADG' dbuniquename=cybankdbstd input_file=$ORACLE_HOME/dbs/orapwcybankdbstd
srvctl config database -d cybankdbstd
rm -f $ORACLE_HOME/dbs/orapwcybankdbstd

将参数文件纳入集群管理

通过 asmcmd 查看参数文件名:

ASMCMD> ls +DATADG/CYBANKDBSTD/PARAMETERFILE/
spfile.330.1179247777

然后加参数文件纳入集群管理:

[xoracle]$ srvctl modify database -d cybankdbstd -spfile '+DATADG/CYBANKDBSTD/PARAMETERFILE/spfile.330.1179247777'

重启集群与数据库

[xoracle]$ srvctl start database -d cybankdbstd    ---> 第一次重启集群数据库不会随集群自动启动
[root]# /opt/cluster/product/grid/bin/crsctl stop cluster
[root]# /opt/cluster/product/grid/bin/crsctl start cluster

检查备库的监听地址(仅备库)

SQL> show parameter listener
remote_listener 应该监听在 SCAN名:SCAN端口 上面
local_listener 应该监听在 VIP:1521 上面

另外,查看监听状态,监听地址应该是IP,若不是且 DNS 解析有问题,在 ADG 切换时会出故障。

su - xgrid
lsnrctl status LISTENER_SCAN1
lsnrctl status LISTENER_SCAN2
lsnrctl status LISTENER_SCAN3
lsnrctl status

然后修改主备各节点的 tnsnames 文件,使用备库的 SCAN 域名及端口。

$ vim $ORACLE_HOME/network/admin/tnsnames.ora

cybankdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cybankdb.bot.com)(PORT = 21381))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cybankdb)
    )
  )


cybankdbstd =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cybankdbdg.bot.com)(PORT = 21381))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cybankdbstd)
    )
  )

修改备库控制文件快照位置

RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DATADG/snapcf_cybankdbstd.f';
RMAN> show all;

配置归档保护策略

主库:
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

备库:
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO 'SBT_TAPE' APPLIED ON ALL STANDBY;

配置归档日志清理

ADG 搭建起来后,主备库上都要配置归档日志清理策略,以防大量的归档日志将空间耗尽。
不建议使用在备份时自动删除归档的方法,因为可能存在如ogg等日志依赖型应用。
建议主备库均手动配置归档删除的计划任务。

[xoracle]$ crontab -e
*/10 * * * * /home/xoracle/delete_archive.sh > /home/xoracle/delete_archive.log 2>&1 &

[xoracle]$ touch /home/xoracle/delete_archive.sh
[xoracle]$ chmod +x /home/xoracle/delete_archive.sh
[xoracle]$ vim /home/xoracle/delete_archive.sh

#!/bin/bash

source /home/xoracle/.bash_profile

export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
rman target / << EOF
delete noprompt archivelog all completed before 'sysdate-10/1440';
exit
EOF

配置 broker

修改 /etc/hosts 文件

在主库所有节点的 hosts 文件中加入备库的 VIP 名称:

### used by dg(tnsnames.ora)
192.169.4.119  cybankdbdg-vip.bot.com cybankdbdg-vip

在备库所有节点的 hosts 文件中加入主库的 VIP 名称:

### used by dg(tnsnames.ora)
192.168.4.119  cybankdb1-vip.bot.com cybankdb1-vip
192.168.4.120  cybankdb2-vip.bot.com cybankdb2-vip

确认主备库状态

SQL> select protection_mode from v$database;

默认就是最大性能,(需要高可用或者高性能状态才能配置??),后面我们使用 broker 将其修改为最大可用模式。

停用日志实时应用(在备库上操作)

alter database recover managed standby database using current logfile disconnect from session;
set lines 200;
select name,value from V$DATAGUARD_STATS;

alter database recover managed standby database cancel;

确认开启 flashback database(主备库,主库只需要在一个节点上操作即可)

注意:即使主库打开了闪回后再复制的数据库,备库的闪回也没有打开。

$ srvctl stop database -d cybankdb
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter system set db_flashback_retention_target=60 sid='*';
SQL> shutdown immediate;
$ srvctl start database -d cybankdb

说明:

  1. FailOver 后,主库数据可能不一致,这时需要将原主库重建为备库,主库开启闪回后,可以让新备库自动地与新主库同步。
  2. 因为备库切换身份后就是主库,所以在备库上也开启闪回。

在主备库上设置 dg_broker 参数【主备库】

在主库上设置:

SQL> alter system set dg_broker_config_file1='+DATA/CYBANKDB/dr1cybankdb.dat' sid='*';
SQL> alter system set dg_broker_config_file2='+FRA/CYBANKDB/dr2cybankdb.dat' sid='*';
SQL> alter system set dg_broker_start=TRUE sid='*';

同样的方法在备库上配置 dg_broker 参数:

SQL> alter system set dg_broker_config_file1='+DATADG/CYBANKDBSTD/dr1cybankdbstd.dat' sid='*';
SQL> alter system set dg_broker_config_file2='+FRADG/CYBANKDBSTD/dr2cybankdbstd.dat' sid='*';
SQL> alter system set dg_broker_start=TRUE sid='*';

在主备库所有节点上配置 listener.ora

说明:如果没有注册 <db_unique_name>_DGMGRL.<db_domain>,DG也能搭建成功,也能切换,但是切换时会报如不认识请求的服务错误,需要人工干预。

GLOBAL_DBNAM 和 SID_NAME 各节点根据实际情况修改。

[xgrid]$ vim $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (GLOBAL_DBNAME=cybankdb_DGMGRL)
         (ORACLE_HOME=/opt/database/oracle/product/db_1)
         (SID_NAME=cybankdb1)
      )  
   ) 

修改完成,需要重启监听(所有主备节点都要操作):

[xgrid]$ lsnrctl stop
[xgrid]$ lsnrctl start
[xgrid]$ lsnrctl status

配置 tnsnames.ora

主备所有节点都加上下面的内容。

[xoracle]$ vim $ORACLE_HOME/network/admin/tnsnames.ora
cybankdb_DGMGRL =
  (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cybankdb1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = cybankdb2-vip)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = cybankdb_DGMGRL)
    )
  )

cybankdbstd_DGMGRL =
  (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cybankdbdg-vip)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = cybankdbstd_DGMGRL)
    )
  )

配置 broker

如果是19c,在备库上执行如下两条命令:

SQL> alter system set log_archive_dest_2='' sid='*';
SQL> alter system reset log_archive_dest_2 sid='*';

不执行的话,19C会报错:

DGMGRL> add database cybankdb as connect identifier is cybankdb_DGMGRL;
Error: ORA-16698: member has a LOG_ARCHIVE_DEST_n parameter with SERVICE attribute set

Failed.

在备库上执行如下命令:

$ dgmgrl
DGMGRL> connect sys@cybankdb_DGMGRL
DGMGRL> create configuration 'cybankdb' as primary database is cybankdb connect identifier is cybankdb_DGMGRL;
DGMGRL> add database cybankdbstd as connect identifier is cybankdbstd_DGMGRL;
DGMGRL> enable configuration;
DGMGRL> show configuration; (稍等一会儿)

说明:启用 broker 后,会启用一个名为 dmon 的进程(Data Guard monitor process)。

设置日志传输模式

maxavailability 和 maxprotection 模式,必须将 LogXptMode 设置为 SYNC。

DGMGRL> edit database cybankdb set property 'LogXptMode'='SYNC';
DGMGRL> edit database cybankdbstd set property 'LogXptMode'='SYNC';

注意:如果 log_archive_dest_2 看到 仍然是 ASYNC,做一切主备切换就好了。

设置保护模式

DGMGRL> edit configuration set protection mode as maxavailability;    //maxperformance

查看配置

DGMGRL> show configuration [verbose];   -- 多等一会儿
DGMGRL> show database [verbose] "cybankdb";
DGMGRL> show database verbose "cybankdbstd";

实时同步数据

Broker 配置完成后,默认就开起了日志实时同步,如果 v$database.open_mode 显示的是 read only,等一段时间就对了。

还可以通过 dgmgrl 查看备库的信息来查看:

DGMGRL> show database verbose "cybankdbstd";

Database - cybankdbstd

  Role:            PHYSICAL STANDBY
  Intended State:  APPLY-ON
  Transport Lag:   0 seconds (computed 0 seconds ago)
  Apply Lag:       0 seconds (computed 0 seconds ago)
  Apply Rate:      567.00 KByte/s
  Real Time Query: OFF
  Instance(s):
    cybankdbSTD

这儿看到 APPLY-ON 表示启用了日志实时应用。

关闭实时同步数据

如果要关闭实时数据同步:

DGMGRL> edit database "cybankdbstd" set state='APPLY-OFF';

切换测试

在做切换之前,先将备库的密码文件拷出来传输到主库,然后为主库重新生成密码文件。
否则,在主切备,然后切回来时会出错。

步骤如下:

在备库上:

[xoracle]$ srvctl config database -d cybankdbstd
[xoracle]$ orapwd file='/tmp/orapwcybankdb' input_file='+DATADG/CYBANKDBSTD/PASSWORD/pwdcybankdbstd.331.1179247899'
[xoracle]$ scp /tmp/orapwcybankdb 192.168.4.117:/tmp

在主库上:

[xoracle]$ srvctl modify database -d cybankdb -pwfile ''
[xoracle]$ orapwd file='+DATA' dbuniquename=cybankdb input_file=/tmp/orapwcybankdb

建议在主库两个节点上做一些日志切换:

SQL> alter system switch logfile;

然后做主备切换(第一次切换broker会多花一些时间):

DGMGRL> switchover to cybankdbstd;

检查目前状态是否正常:

DGMGRL> show configuration [verbose];   -- 多等一会儿
DGMGRL> show database [verbose] "cybankdb";
DGMGRL> show database verbose "cybankdbstd";

回切:
两次切换要稍微间隔一些时间,如几分钟。建议在当前主库上做一些日志切换。

DGMGRL> switchover to cybankdb;

检查目前状态是否正常

DGMGRL> show configuration;

切换完成后,主备库都重启一下数据库。

创建服务名

建立自动切换用的service名

主库:

[xoracle]$ srvctl add service -d cybankdb -s prim_cybankdb -r cybankdb1,cybankdb2 -l PRIMARY -q TRUE -y AUTOMATIC    【-r 后面跟的是实例名】
[xoracle]$ srvctl start service -d cybankdb -s  prim_cybankdb
[xoracle]$ srvctl add service -d cybankdb -s stby_cybankdb -r cybankdb1,cybankdb2 -l physical_standby
[xoracle]$ srvctl start service -d cybankdb -s stby_cybankdb
[xoracle]$ srvctl stop service -d cybankdb -s stby_cybankdb

备库

[xoracle]$ srvctl add service -d cybankdbstd -s prim_cybankdb -r cybankdbstd -l PRIMARY -q TRUE -y AUTOMATIC
[xoracle]$ srvctl add service -d cybankdbstd -s stby_cybankdb  -r cybankdbstd -l PHYSICAL_STANDBY
[xoracle]$ srvctl start service -d cybankdbstd -s stby_cybankdb

提供应用人员连接信息

JDBC:
jdbc:oracle:thin:@(DESCRIPTION =(CONNECT_TIMEOUT=1)(RETRY_COUNT=1)(FAILOVER=on)(LOAD_BALANCE=off)(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = scan-cybankdb.bot.com)(PORT = 21381))(ADDRESS = (PROTOCOL = TCP)(HOST = scan-cybankdbdg.bot.com)(PORT = 21381)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = prim_cybankdb)))   

tnsnames:
cybankdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cybankdb.bot.com)(PORT = 21381))
      (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cybankdbdg.bot.com)(PORT = 21381))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prim_cybankdb)
      (FAILOVER_MODE=
        (TYPE=select)
        (METHOD=basic)
        (retries=30)
        (delay=5)
      )
    )
  )

打补丁

给主备打补丁。

-- By 许望(RHCA、OCM、VCP)
最后修改:2024 年 09 月 14 日 11 : 35 AM
如果觉得我的文章对你有用,请随意赞赏