已索引
环境及规划
主库: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
说明:
- FailOver 后,主库数据可能不一致,这时需要将原主库重建为备库,主库开启闪回后,可以让新备库自动地与新主库同步。
- 因为备库切换身份后就是主库,所以在备库上也开启闪回。
在主备库上设置 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)
)
)
)
打补丁
给主备打补丁。