您的位置:首页 > 其它

rac 环境搭建单实例文件系统DG + broke配置

2017-05-12 01:09 621 查看
说明:
1. 本文档是在测试环境中进行的。环境架构为双节点RAC+单节点DG。
2. 本文档主要测试RAC环境下的准备切换。包括:dataguard的搭建过程,switch over过程和 fail over过程。
3. 由于本测试环境数据量很少,且主库服务器所剩空间不多,所以采用直接复制备库的方式搭建DG环境。

--主库的两个实例:
demo1 192.168.52.231
demo2 192.168.52.232

--备库:
dg_demo 192.168.52.235

--搭建最大性能的物理standby
--配置主库:
1.开启主库的强制日志功能:
alter database force logging;
select force_logging from v$database;

2.修改主库的参数文件:
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(demo,dg_demo)' scope=both;
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+DGARCH/DEMO/ARCHIVELOG/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=demo' scope=both;
alter system set LOG_ARCHIVE_DEST_2='SERVICE=dg_demo LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) COMPRESSION=ENABLE DB_UNIQUE_NAME=dg_demo' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both;
alter system set LOG_ARCHIVE_MAX_PROCESSES=10 scope=both;
alter system set FAL_SERVER=dg_demo;
alter system set FAL_CLIENT=demo;
alter system set db_file_name_convert='/oradata/demo/datafile/','+DGDATA/demo/datafile/','/oradata/demo/datafile/','+DGDATA/demo/tempfile/' scope=spfile; --必须停库(此参数主从切换使用,可以先不配置)
alter system set log_file_name_convert='/oradata/demo/logfile/','+DGDATA/demo/onlinelog/','/oradata/demo/logfile/','+DGARCH/demo/onlinelog/' scope=spfile;--必须停库(此参数主从切换使用,可以先不配置)
alter system set standby_file_management=auto;

3. 在tnsnames.ora中添加如下条目:
vim tnsnames.ora
---------------------------------------------------------------
demo1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.231)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = demo)
(INSTANCE_NAME = demo1)
)
)

demo2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.232)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = demo)
(INSTANCE_NAME = demo2)
)
)

dg_demo =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.235)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dg_demo)
)
)

4.将主库的参数文件和口令文件拷贝到备库并更名:
SQL> create pfile from spfile;

参数文件:initdg_demo
口令文件:orapwdg_demo

oracle@rac1:/opt/oracle/11gR2/db/dbs> scp initdemo1.ora test-rac-dg:/opt/oracle/11gR2/db/dbs/initdg_demo.ora
oracle@rac1:/opt/oracle/11gR2/db/dbs> scp orapwdemo1 test-rac-dg:/opt/oracle/11gR2/db/dbs/orapwdg_demo

--配置备库:
5. 修改备库的参数文件:
--------------------------------
*.audit_file_dest='/opt/oracle/11gR2/admin/demo/adump'
*.audit_trail='db'
*.cluster_database=false
*.compatible='11.2.0.0.0'
*.control_files='/oradata/demo/controlfile/control01.ctl'
*.db_block_size=8192
*.db_create_file_dest='/oradata/demo/datafile'
*.db_domain=''
*.db_file_name_convert='+DGDATA/demo/datafile/','/oradata/demo/datafile/','+DGDATA/demo/tempfile/','/oradata/demo/datafile/'
*.log_file_name_convert='+DGDATA/demo/onlinelog/','/oradata/demo/logfile/','+DGARCH/demo/onlinelog/','/oradata/demo/logfile/'
*.db_name='demo'
*.db_unique_name='dg_demo'
*.diagnostic_dest='/opt/oracle/11gR2'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=demoXDB)'
*.job_queue_processes=1000
*.log_archive_config='DG_CONFIG=(demo,dg_demo)'
*.fal_client='dg_demo'
*.fal_server='demo1','demo2'
*.log_archive_dest_1='LOCATION=/oradata/demo/archivelog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dg_demo'
*.log_archive_dest_2='SERVICE=demo LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) COMPRESSION=ENABLE DB_UNIQUE_NAME=demo'

*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=10
*.open_cursors=500
*.processes=150
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
*.thread=1
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
---------------------------------------------------------------------------

6. 准备相关目录:
mkdir -p /opt/oracle/11gR2/admin/demo/adump
mkdir /oradata/demo/archivelog
mkdir /oradata/demo/datafile
mkdir /oradata/demo/logfile
mkdir /oradata/demo/controlfile

7.配置备库的网络:(netmgr)
(1)配置网络监听:

vim listener.ora
---------------------------------------------
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dg_demo)
(ORACLE_HOME = /opt/oracle/11gR2/db)
(SID_NAME = dg_demo)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.52.235)(PORT = 1521))
)

ADR_BASE_LISTENER = /opt/oracle/11gR2

(2)为备库准备tnsnames.ora文件
备库的tnsnames.ora文件从主库拷贝

8.启动备库到nomount:
export ORACLE_SID=dg_demo
sqlplus / as sysdba
startup nomount

9.测试网络是否通:
sqlplus /nolog
conn sys/oracle@demo1 as sysdba
conn sys/oracle@demo2 as sysdba
conn sys/oracle@dg_demo as sysdba

10. 还原备库:(在两个节点都可以完成)
rman target sys/oracle@demo1 auxiliary sys/oracle@dg_demo

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate auxiliary channel c5 type disk;
duplicate target database for standby from active database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
}

--还原完成之后,备库已经为mount状态。

SQL> select status from v$instance;

STATUS
------------
MOUNTED

12. 为备库增加standby日志:
alter database add standby logfile thread 1 group 7 '/oradata/demo/logfile/stdredo7a.log' size 52428800;
alter database add standby logfile thread 1 group 8 '/oradata/demo/logfile/stdredo8a.log' size 52428800;
alter database add standby logfile thread 1 group 9 '/oradata/demo/logfile/stdredo9a.log' size 52428800;
alter database add standby logfile thread 2 group 10 '/oradata/demo/logfile/stdredo10a.log' size 52428800;
alter database add standby logfile thread 2 group 11 '/oradata/demo/logfile/stdredo11a.log' size 52428800;
alter database add standby logfile thread 2 group 12 '/oradata/demo/logfile/stdredo12a.log' size 52428800;

alter database add standby logfile member
'/oradata/demo/logfile/stdredo7b.log' to group 7,
'/oradata/demo/logfile/stdredo8b.log' to group 8,
'/oradata/demo/logfile/stdredo9b.log' to group 9,
'/oradata/demo/logfile/stdredo10b.log' to group 10,
'/oradata/demo/logfile/stdredo11b.log' to group 11,
'/oradata/demo/logfile/stdredo12b.log' to group 12;

在主库也增加standby日志:
alter database add standby logfile thread 1 group 5 '+data/demo/onlinelog/standby5.log' size 52428800;
alter database add standby logfile thread 1 group 6 '+data/demo/onlinelog/standby6.log' size 52428800;
alter database add standby logfile thread 1 group 7 '+data/demo/onlinelog/standby7.log' size 52428800;
alter database add standby logfile thread 2 group 8 '+data/demo/onlinelog/standby8.log' size 52428800;
alter database add standby logfile thread 2 group 9 '+data/demo/onlinelog/standby9.log' size 52428800;
alter database add standby logfile thread 2 group 10 '+data/demo/onlinelog/standby10.log' size 52428800;

13.启动备库(默认为只读模式):
alter database open;

14. 在备库开启日志实时应用模式:
alter database recover managed standby database using current logfile disconnect from session;

select process,status from v$managed_standby;

验证是否成功:
(1)查看主库远程归档是否报错:(会有延迟)
select dest_id,status,error from v$archive_dest where dest_id=2;

(2)通过警报日志监控备库日志应用情况:
cd $ORACLE_BASE/diag/rdbms/dg_demo/dg_demo/trace
tailf alert_dg_demo.log --永远等待主库的current组。

(3)在备库查看日志应用情况:
select sequence#,name,applied from v$archived_log order by 1;

select * from (select thread#,sequence#,applied from v$archived_log where thread#=1 order by sequence# desc) where rownum<=5
union
select * from (select thread#,sequence#,applied from v$archived_log where thread#=2 order by sequence# desc) where rownum<=5;

--在主库查看
SELECT THREAD#,MAX(sequence#) from v$archived_log group by thread#;

select * from (select thread#,dest_id,sequence#,applied from v$archived_log where thread#=1 and dest_id=2 order by sequence# desc) where rownum<=5
union
select * from (select thread#,dest_id,sequence#,applied from v$archived_log where thread#=2 and dest_id=2 order by sequence# desc) where rownum<=5;

--查看v$standby_log视图,发现每个实例只有且只能有一组日志处于active状态。
SQL> select group#,thread#,sequence#,archived,status from v$standby_log;

GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------
7 1 710 ACTIVE
8 2 400 ACTIVE
9 2 0 UNASSIGNED
10 2 0 UNASSIGNED
11 1 0 UNASSIGNED
12 1 0 UNASSIGNED

============================================================================================================

主从切换

--RAC环境下主备切换只能有一个实例是活动的,其他实例必须关闭。这里我们关闭demo2节点。

SQL> select INSTANCE_NAME from v$instance;

INSTANCE_NAME
----------------
demo2

SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.

--在RAC节点一将主库切换到备库

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
demo1
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
SQL> alter database commit to switchover to physical standby;

Database altered.

SQL> shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup mount;
ORACLE instance started.

Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 738200072 bytes
Database Buffers 41943040 bytes
Redo Buffers 2637824 bytes
Database mounted.

--将备库切换到主库

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

SQL> alter database commit to switchover to primary;

Database altered.

SQL> select status from v$instance;

STATUS
------------
MOUNTED

--启动备库(rac)的实例1
SQL> alter database open;

Database altered.

SQL> select status from v$instance;

STATUS
------------
OPEN

--启动备库(RCA)的实例2
oracle@rac2:~> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jun 25 15:04:56 2014

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to an idle instance.

SQL> startup;
ORACLE instance started.

Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 763365896 bytes
Database Buffers 16777216 bytes
Redo Buffers 2637824 bytes
Database mounted.
Database opened.

--启动主库(原备库)
SQL> alter database open;

Database altered.

SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY

--启动备库(231,232)的日志应用(MRP进程)
--注意,如果standby 是RAC环境,MRP只能在一个实例上执行,这个RAC的恢复操作一样,而其他实例只能运行RFS.
alter database recover managed standby database using current logfile disconnect from session;
select process,status from v$managed_standby;

--主库(235)查询是否报错
select dest_id,status,error from v$archive_dest where dest_id=2;

--备库(231,232)查询日志是否成功应用
select thread#,sequence#,dest_id,name,applied from v$archived_log order by 1,2,3;
select thread#,sequence#,dest_id,name,applied from v$archived_log where sequence#>1000 order by 1,2,3 ;
===================================================================================================
--switchover切换回最初状态

--关闭备库的其中一个节点
SQL> select INSTANCE_NAME from v$instance;

INSTANCE_NAME
----------------
demo2

SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.

--将主库(235)切换到备库

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO STANDBY

SQL> alter database commit to switchover to physical standby;

Database altered.

SQL> shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup mount;
ORACLE instance started.

Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 738200072 bytes
Database Buffers 41943040 bytes
Redo Buffers 2637824 bytes
Database mounted.

--在备库的实例demo1(231)上将备库切换到主库

SQL> select INSTANCE_NAME from v$instance;

INSTANCE_NAME
----------------
demo1

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

SQL> alter database commit to switchover to primary;

Database altered.

SQL> select status from v$instance;

STATUS
------------
MOUNTED

--启动实例1
SQL> alter database open;

Database altered.

SQL> select status from v$instance;

STATUS
------------
OPEN

--启动实例2
oracle@rac2:~> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jun 25 15:04:56 2014

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to an idle instance.

SQL> startup;
ORACLE instance started.

Total System Global Area 784998400 bytes
Fixed Size 2217464 bytes
Variable Size 763365896 bytes
Database Buffers 16777216 bytes
Redo Buffers 2637824 bytes
Database mounted.
Database opened.

--启动备库(235)
alter database open;

--在备库启动日志应用
alter database recover managed standby database using current logfile disconnect from session;
select process,status from v$managed_standby;

--主库查询是否报错
select dest_id,status,error from v$archive_dest where dest_id=2;

--备库查询日志是否成功应用
select thread#,sequence#,dest_id,name,applied from v$archived_log order by 1,2,3;
select thread#,sequence#,dest_id,name,applied from v$archived_log where sequence#>1000 order by 1,2,3;

================================================================================================
failover

--failover

--模拟主库实例损坏,这里将两个实例一起停掉
srvctl stop database -d demo -o immediate

1) 查看是否有日志 GAP:
SQL> SELECT UNIQUE THREAD#,MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;
SQL> SELECT THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
2) 如果有,则拷贝过来
3) 手工的注册这些日志:
SQL> ALTER DATABASE REGISTER LOGFILE '路径';

--本次实验没有GAP.
--使用有GAP,则使用如下命令在备库应用这些日志:
--alter database recover managed standby database cancel;
--recover standby database until cancel;

--停掉日志应用
SQL> alter database recover managed standby database cancel;
Database altered.

--现在我们来将备库切换到主库
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SQL> ALTER DATABASE OPEN; 或者 shutdown immediate+startup

--以上的步骤是常规的方法,如果用这个方法的时候报错:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY
*
ERROR at line 1:
ORA-16139: media recovery required

--错误提示需要做恢复,如果在上述步骤中已经在备库应用过日志。则尝试强制Failover一下看看:
shutdown immediate
startup mount;
alter database activate standby database;
alter database open;

==============================================================
failover 重新搭建DG

--使用原参数文件将备库(231,232)启动到nomount
srvctl start database -d demo -o nomount

--对主库(原备库)进行全备份:
rman target /
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
backup as compressed backupset database format '/home/oracle/rmanbak/Full_%d_%I_%s_%p_%T.bkp';
backup current controlfile format '/home/oracle/rmanbak/ctl_%d_%I_%s_%p_%T.bkp';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}

--将主库(原备库)的全备拷贝到备库的相同目录:
oracle@rac2:~/rmanbak> scp 192.168.52.235:/home/oracle/rmanbak/Full*.bkp .
--将备库恢复到mount状态

rman target /
restore standby controlfile from '/home/oracle/rmanbak/ctl_dTEST_889759476_59_1';

--将备库启动到mount
alter database mount;

--还原备库
rman target /

run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
restore database;
recover database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}

--在备库应用日志
alter database recover managed standby database using current logfile disconnect from session;

--打开备库
SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database open;

Database altered.
--将连个节点重新启动
srvctl stop database -d test

srvctl start database -d test

--将RAC切换成主库,即回到最初的状态(双实例RAC+单实例DG)

####################################################################################################

failover 开启数据库闪回功能 (不需要重新搭建dg)停机

主从数据库都需要打开flashback database
SQL> show parameter recovery

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +data
db_recovery_file_dest_size big integer 1G
recovery_parallelism integer 0
select flashback_on from v$database; 在主从都看 查看是否开启

shut immediate

startup mount

alter database flashback on; //开启闪回

fast overfail主从数据库必须置为最大可用状态,如果不是也不要着急,一会用dgmgrl来切成最大可用。

select protection_mode,database_role,protection_level from v$database

另外,主从数据库都要使用spfile:

show parameter spfile

----模拟failover主库(rac库)
srvctl stop database -d demo -o immediate

---备库(dg_test)
[oracle@dg flash]$ dgmgrl
DGMGRL for Linux: Version 11.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect
Username: sys
Password:
将备库切换成主库
DGMGRL> failover to dg_test

原来的备库成为主库

DGMGRL> show configuration

Configuration - dg_rac

Protection Mode: MaxPerformance
Databases:
dg_test - Primary database
test - Physical standby database (disabled)
ORA-16661: the standby database needs to be reinstated

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

DGMGRL> reinstate database test;

原来主库变为备库

srvctl start database -d test

--检查
select database_role,open_mode,protection_mode,force_logging,FLASHBACK_ON from v$database;

--主库(235)查询是否报错
select dest_id,status,error from v$archive_dest where dest_id=2;

--备库(231,232)查询日志是否成功应用
select thread#,sequence#,dest_id,name,applied from v$archived_log order by 1,2,3;

监控主从同步状况

select to_char(SYSDATE,'yyyymmdd hh24:mi:ss') CTIME,NAME,VALUE,DATUM_TIME
from V$DATAGUARD_STATS
WHERE NAME LIKE '%lag';

=================================================================================================

dgmgrl 配置

说明:
本实验主库是rac环境 test (demo)
从库是单实例 dg_test (dg_demo)

1、rac环境需要将u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr1rac.dat 文件共享
主库:(rac环境)
SQL> alter system set dg_broker_start=false scope=both sid='*';
SQL> show parameter dg_broker_start
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_start boolean FALSE
SQL> alter system set dg_broker_config_file1='+data/test/dr1rac.dat' sid='*';
System altered.
SQL> alter system set dg_broker_config_file2='+data/test/dr2rac.dat' sid='*';
System altered.
SQL> alter system set dg_broker_start=true scope=both sid='*';
System altered.
SQL> show parameter dg
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string +data/rac/dr1rac.dat
dg_broker_config_file2 string +data/rac/dr2rac.dat
dg_broker_start boolean TRUE

备库:

SQL> alter system set dg_broker_start=true scope=both;
SQL> show parameter dg
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_start boolean TRUE
SQL>

主库:
[oracle@rac2 ~]$dgmgrl
DGMGRL> connect
Username: sys
Password:
Connected.
DGMGRL> create configuration 'dg_rac' as primary database is 'test' connect identifier is 'test';
create configuration '随意起名' as primary database is 'db_unique_name' connect identifier is 'tnsname.ora里连接主库';
DGMGRL> add database 'test' as connect identifier is 'dg_test' maintained as physical;
add database 'db_unique_name' as connect identifier is 'tnsname.ora连接备库' maintained as physical;
DGMGRL> show configuration

Configuration - dg_rac

Protection Mode: MaxPerformance
Databases:
test - Primary database
dg_test - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
DISABLED

DGMGRL> enable configuration;
DGMGRL> show configuration
DGMGRL> enable database dg_test
DGMGRL> enable database test

主从切换(rac节点必须停止一节点 )
DGMGRL> switchover to dg_test
Performing switchover NOW, please wait...
Operation requires a connection to instance "dg_test" on database "dg_test"
Connecting to instance "dg_test"...
Connected.
New primary database "dg_test" is opening...
Operation requires startup of instance "test2" on database "test"
Starting instance "test2"...
Unable to connect to database
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

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

Please complete the following steps to finish switchover:
start up instance "test2" of database "test"

failover 切换
dgmgrl failover切换命令
DGMGRL> failover to dg_test

DGMGRL> reinstate database test

test:
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY

dg_test:
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY

启动主库停掉的实例
从库需要手工startup启动数据库

监控主从同步状况

select to_char(SYSDATE,'yyyymmdd hh24:mi:ss') CTIME,NAME,VALUE,DATUM_TIME
from V$DATAGUARD_STATS
WHERE NAME LIKE '%lag';

============================================================================================

DG的三大模式

– Maximum protection 最大保护
在Maximum protection下, 可以保证从库和主库数据完全一样,做到zero data loss.事务同时在主从两边提交完成,才算事务完成。如果从库宕机或者网络出现问题,主从库不能通讯,主库也立即宕机。在这种方式下,具有最高的保护等级。但是这种模式对主库性能影响很大,要求高速的网络连接。
  – Maximum availability 最大可用 (推荐)
在Maximum availability模式下,如果和从库的连接正常,运行方式等同Maximum protection模式,事务也是主从库同时提交。如果从库和主库失去联系,则主库自动切换到Maximum performance模式下运行,保证主库具有最大的可用性。
  – Maximum performance 最大性能
在Maximum performance,主库把归档的 archived log通过arch进程传递给从库,在这种方式下,主库运行性能最高,但是不能保证数据不丢失,且丢失的数据受redo log的大小影响。在redo log过大的情况下,可能一天都没有归档一个日志,可以通过手工切换日志的方式来减小数据的丢失。


dgmgrl 切换

DGMGRL> show database verbose 'demo';
DGMGRL> show database verbose 'dg_demo';
c.如果LogXptMode的值为async,就要将其修改为sync
DGMGRL> edit database demo  property logxptmode=
DGMGRL> edit database dg_demo set property logxptmode=sync;
  d.修改完之后再次确认LogXptMode的值,如步骤b  e.切换模式(如果切换失败,则再次去确认备库LogXptMode的值)
DGMGRL> edit configuration set protection mode as maxavailability;
Succeeded.


验证:
select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

配置快速故障转移(不推荐使用)
5、修改快速故障转移的延迟时间(默认为30秒,有些少!):

DGMGRL> edit configuration set property FastStartFailoverThreshold=10;

主库终止 从库延迟10s后从库再启动

6、启动快速故障转移:

DGMGRL> edit configuration set protection mode as MAXAvailability;
DGMGRL> enable configuration;
DGMGRL> enable fast_start failover;

Enabled.

快速故障转移必须在最大可用模式下配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐