20220319-Oracle RAC DG手动切换

在这里插入图片描述

环境说明:

主库:Oracle 11.2.0.4.0 RAC(两节点)
备库:Oracle 11.2.0.4.0 RAC(两节点)
OS:AIX 7.1

IP信息:

主库IP:

#public ip
10.10.1.11chenjch1
10.10.1.12chenjch2
#private ip
192.100.10.11chenjch1-priv
192.100.10.12chenjch2-priv
#vip
10.10.1.13chenjch1-vip
10.10.1.14chenjch2-vip
#scan ip
10.10.1.15flashdb-scan

从库IP:

# public
10.100.1.11     du-chenj-cdb15
10.100.1.13     du-chenj-cdb16
# private
10.200.10.11   du-chenj-cdb15-priv
10.200.10.13   du-chenj-cdb16-priv
# virtual
10.100.1.12     du-chenj-cdb15-vip
10.100.1.14     du-chenj-cdb16-vip
# scan
10.100.1.15     sy-CJCDB-scan

切换前检查

查看活动会话分布

set lin 200 pages 200
select inst_id,username,status,count(*) from gv$session group by inst_id,username,status order by 3,4;

查看长事务

set linesize 200  
set pagesize 5000  
col transaction_duration format a45  
with transaction_details as  
( select inst_id  
  , ses_addr  
  , sysdate - start_date as diff  
  from gv$transaction  
)  
select s.username  
, to_char(trunc(t.diff))  
             || ' days, '  
             || to_char(trunc(mod(t.diff * 24,24)))  
             || ' hours, '  
             || to_char(trunc(mod(t.diff * 24 * 60,24)))  || ' minutes, '  || to_char(trunc(mod(t.diff * 24 * 60 * 60,60)))  || ' seconds' as transaction_duration  
, s.program  
, s.terminal  
, s.status  
, s.sid  
, s.serial#  
from gv$session s  
, transaction_details t  
where s.inst_id = t.inst_id  
and s.saddr = t.ses_addr  
order by t.diff desc  
/

检查事务

select  undoblockstotal "Total", undoblocksdone "Done", undoblockstotal-undoblocksdone
 "ToDo",decode(cputime,0,'unknown',to_char(sysdate+(((undoblockstotal-undoblocksdone) 
 / (undoblocksdone / cputime)) / 86400),'yyyy-mm-dd hh24:mi:ss')) 
"Estimated time to complete",to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') 
from v$fast_start_transactions;

检查JOB

col schedule_owner for a20
col schedule_name for a30
col owner for a15
col job_name for a30
col job_creator for a15
set line 180
col JOB_ACTION for a40 
col COMMENTS for a40 
select owner,job_name,enabled,JOB_ACTION,LAST_START_DATE,LAST_RUN_DURATION
--,comments
from dba_scheduler_jobs where owner <> 'SYS';

检查DG参数

set linesize 500 pages 100
col value for a70 
col name for a30 
select name, value 
from v$parameter 
where name in ('db_name','db_unique_name', 
'log_archive_config', 
'log_archive_dest_1','log_archive_dest_2', 
'log_archive_dest_state_1', 'log_archive_dest_3', 
'log_archive_dest_state_3', 
'log_archive_dest_state_2', 
'remote_login_passwordfile', 
'log_archive_format', 
'log_archive_max_processes', 
'fal_server','db_file_name_convert', 
'log_file_name_convert', 
'standby_file_management') 
/

检查DG进程状态

col dest_name for a30
col error for a50
set lin 200 pages 100
col applied_scn for 9999999999999
select dest_id,error,status,log_sequence,applied_scn,MAX_CONNECTIONS,NET_TIMEOUT,COMPRESSION from v$archive_dest where dest_id<5;
--select process,status,thread#,sequence#,block#,blocks from v$managed_standby;
select INST_ID,process,status,thread#,sequence#,block#,blocks from gv$managed_standby order by INST_ID ;

检查主库状态

ssh 10.10.1.11
su - oracle
export ORACLE_SID=CJCDB1
sqlplus / as sysdba
SELECT DATABASE_ROLE,SWITCHOVER_STATUS FROM v$DATABASE;
NOT ALLOWED             当前的数据库不是带有备用数据库的主数据库
PREPARING DICTIONARY    该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备
PREPARING SWITCHOVER    接受用于切换的重做数据时,逻辑备用配置会使用它
RECOVERY NEEDED         备用数据库还没有接收到切换请求
SESSIONS ACTIVE        在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话
SWITCHOVER PENDING      适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库
SWITCHOVER LATENT       切换没有完成并返回到主数据库
TO LOGICAL STANDBY      主数据库已经收到了来自逻辑备用数据库的完整的字典
TO PRIMARY              该备用数据库可以转换为主数据库
TO STANDBY              该主数据库可以转换为备用数据库

停用备库2节点

ssh 10.100.1.13
su - oracle
sqlplus / as sysdba
show parameter instance_name
shutdown immediate

主库验证GAP

sqlplus / as sysdba
SELECT LOG_ARCHIVED - LOG_APPLIED + 1 LOGGAP
  FROM (SELECT MAX(SEQUENCE#) LOG_ARCHIVED
          FROM V$ARCHIVED_LOG
         WHERE DEST_ID = 1
           AND ARCHIVED = 'YES'
           AND RESETLOGS_CHANGE# =
               (SELECT MAX(RESETLOGS_CHANGE#) FROM V$ARCHIVED_LOG)),
       (SELECT MAX(SEQUENCE#) LOG_APPLIED
          FROM V$ARCHIVED_LOG
         WHERE DEST_ID = 2
           AND APPLIED = 'YES'
           AND RESETLOGS_CHANGE# =
               (SELECT MAX(RESETLOGS_CHANGE#) FROM V$ARCHIVED_LOG));

从库节点一操作

#验证从库是否是RTA模式,减少GAP

set lines 200
col dest_name for a30
select DEST_ID,DEST_NAME,RECOVERY_MODE from gv$archive_dest_status where RECOVERY_MODE <>'IDLE';

#RECOVERY_MODE=MANAGED REAL TIME APPLY 为 real time apply,否则不是

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

配置闪回

主库数据库任意一个节点操作。

 set lin 200 pages 100
 col FLASHBACK_ON for a10
 col current_scn for 99999999999999
 col open_mode for a10
col SWITCHOVER_STATUS for a20
col PROTECTION_MODE for a20
col name for a20
 select name,current_scn,protection_mode,database_role,force_logging,FLASHBACK_ON,open_mode,switchover_status from v$database;

查看asm磁盘组空间 CJCDB_ARCH

select name,total_mb,free_mb,round((total_mb-free_mb)/total_mb*100,2) "Used%" from v$asm_diskgroup;
NAME       TOTAL_MB    FREE_MBUsed%
-------------------- ---------- ---------- ----------
ANLZ_DATA 409600     17086758.28
FLASHDB_OCR 102400     102004  .39
MGNT_ARCH 204800     199758 2.46
MGNT_DATA1331200     14942588.78
TRNT_ARCH 204800     196148 4.22
TRNT_DATA1024000      1216798.81
CJCDB_DATA 819200     12233385.07
CJCDB_ARCH 102400     100731 1.63
EPCC_DATA 307200       878397.14
EPCC_ARCH 102400     102049  .34
SCM_DATA 614400     32613546.92
SCM_ARCH 102400     102271  .13
12 rows selected.

配置闪回路径

alter system set db_recovery_file_dest_size=50g;
alter system set db_recovery_file_dest='+CJCDB_DATA';
--CJCDB_ARCH

开启闪回

alter database flashback on;
create restore point prytosty;

检查闪回点

col name for a30
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select scn,time,name from V$RESTORE_POINT;
       SCN TIME        NAME
---------- --------------------------------------------------------------------------- --------------------
4.2276E+11 27-MAR-21 11.48.59.000000000 PM       PRYTOSTY

开始切换

主切备

ssh 10.10.1.11
export ORACLE_SID=CJCDB1
sqlplus / as sysdba
SELECT trim(DATABASE_ROLE) DBROLE FROM v$DATABASE;
alter system switch logfile;
alter system flush SHARED_POOL;
ALTER SYSTEM SET log_archive_trace=8191 sid='*';

执行命令后,原主库自动关闭实例

alter database commit to switchover to physical standby with session shutdown; 
startup mount

备切主

ssh 10.100.1.11 
su - oracle
sqlplus / as sysdba
show parameter instance_name
SELECT trim(DATABASE_ROLE) DBROLE FROM v$DATABASE;
ALTER SYSTEM SET log_archive_trace=8191 sid='*';

执行命令后,原备库自动启动到mount

alter database commit to switchover to primary with session shutdown;
shutdown immediate;
startup;
set lin 200 pages 100
set lin 200 pages 100
col FLASHBACK_ON for a10
col current_scn for 99999999999999
col open_mode for a10
col SWITCHOVER_STATUS for a20
col PROTECTION_MODE for a20
select current_scn,protection_mode,database_role,force_logging,FLASHBACK_ON,open_mode,switchover_status from v$database;
ALTER SYSTEM SET log_archive_trace=0 sid='*';

新备库启动mrp

ssh 10.10.1.11
export ORACLE_SID=CJCDB1
sqlplus / as sysdba
alter database open;
ALTER SYSTEM SET log_archive_trace=0 sid='*';
recover managed standby database using current logfile disconnect from session;

新备库启动节点2

ssh 10.10.1.12
export ORACLE_SID=CJCDB1
startup

新主库启动节点2

ssh 10.100.1.13
export ORACLE_SID=CJCDB2
sqlplus / as sysdba
show parameter instance_name
startup

新备库检查

ssh 10.10.1.11
export ORACLE_SID=CJCDB1
sqlplus / as sysdba
SELECT status from v$instance;
set lin 200 pages 200
select process,status,thread#,sequence#,block#,blocks from v$managed_standby;
set lin 200 pages 100
col FLASHBACK_ON for a10
col current_scn for 99999999999999
col open_mode for a10
col SWITCHOVER_STATUS for a20
col PROTECTION_MODE for a20
select current_scn,
       protection_mode,
       database_role,
       force_logging,
       FLASHBACK_ON,
       open_mode,
       switchover_status
  from v$database;

新主库检查

ssh 10.100.1.11
export ORACLE_SID=CJCDB1
sqlplus / as sysdba
SELECT status from v$instance;

DG常用命令

检查DG进程状态

主库传输状态检查:一般不需要,备库看不到rfs进程时可以查看。

col dest_name for a30
col error for a50
set lin 200 pages 100
select dest_id,error,status,log_sequence,applied_scn,MAX_CONNECTIONS,NET_TIMEOUT,COMPRESSION from v$archive_dest where dest_id<5;

如有必要重新激活传输

###alter system set log_archive_dest_state_2=defer;
###alter system set log_archive_dest_state_2=enable;

检查DG同步关系

set lin 200 pages 100
col FLASHBACK_ON for a10
col current_scn for 99999999999999
col open_mode for a10
col SWITCHOVER_STATUS for a20
col PROTECTION_MODE for a20
select current_scn,protection_mode,database_role,force_logging,FLASHBACK_ON,open_mode,switchover_status from v$database;  

查看进程状态

set lin 200 pages 200
select INST_ID,process,status,thread#,sequence#,block#,blocks from gv$managed_standby order by INST_ID ;
STATUS:进程的当前状态,值较多,常见的有:
ALLOCATED:正准备连接Primary数据库
ATTACHED:正在连接Primary数据库
CONNECTED:已连接至Primary数据库
IDLE:空闲中
RECEIVING:归档文件接收中
OPENING:归档文件处理中
CLOSING:归档文件处理完,收尾中
WRITING:Redo数据库写向归档文件中
WAIT_FOR_LOG:等待新的Redo数据中
WAIT_FOR_GAP:归档有中断,正等待中断的那部分Redo数据
APPLYING_LOG:应用Redo数据中

验证mrp启动实时还是非实时

#验证是否是RTA模式

set lines 200
col dest_name for a30
select DEST_ID,DEST_NAME,RECOVERY_MODE from v$archive_dest_status where RECOVERY_MODE <>'IDLE';

#RECOVERY_MODE=MANAGED REAL TIME APPLY 为 real time apply,否则不是

启动实时应用

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
###RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

启动非实时应用

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  DISCONNECT FROM SESSION;
###RECOVER MANAGED STANDBY DATABASE  DISCONNECT FROM SESSION;

更改保护模式

###alter database set standby database to maximize protection;
###alter database set standby database to maximize availability;
###alter database set standby database to maximize performancen;

查看服务

cd /oracle/crs/bin
./crsctl stat res -t

如有问题,手动启动 srvctl start service -d syfront -s front

主切备

###alter database commit to switchover to physical standby with session shutdown; 

备切主

###alter database commit to switchover to primary with session shutdown;

V$DATAGUARD_STATS(备库查看)
该动态性能视图显示出在主库上产生了多少重做日志数据
gap检查:

SELECT LOG_ARCHIVED-LOG_APPLIED+1 LOGGAP FROM (SELECT MAX(SEQUENCE#) LOG_ARCHIVED
FROM V$ARCHIVED_LOG WHERE DEST_ID=1 AND ARCHIVED='YES' AND RESETLOGS_CHANGE#=(SELECT MAX(RESETLOGS_CHANGE#)
FROM V$ARCHIVED_LOG)), (SELECT MAX(SEQUENCE#) LOG_APPLIED
FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND APPLIED='YES'
AND RESETLOGS_CHANGE#=(SELECT MAX(RESETLOGS_CHANGE#) FROM V$ARCHIVED_LOG));
SELECT THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
COL NAME FOR A100
SET LINESIZE 9999  PAGESIZE 9999
COL NEXT_CHANGE# FOR 999999999999999
SELECT THREAD#, NAME, SEQUENCE#, ARCHIVED, APPLIED, A.NEXT_CHANGE#
  FROM V$ARCHIVED_LOG A
 WHERE A.SEQUENCE# >= (SELECT MAX(B.SEQUENCE#) - 3
                         FROM V$ARCHIVED_LOG B
                        WHERE B.THREAD# = A.THREAD#
                          AND B.RESETLOGS_CHANGE# = A.RESETLOGS_CHANGE#
                          AND B.RESETLOGS_CHANGE# =
                              (SELECT D.RESETLOGS_CHANGE# FROM V$DATABASE D)
                          AND B.APPLIED = 'YES' 
              GROUP BY B.THREAD#)
 ORDER BY A.THREAD#, A.SEQUENCE#;

在备库手工注册拷贝过来的的归档日志

alter database register logfile '/opt/oracle/archive_log/1_27293_750772439.log'

检查当前job_queue_processes值

show parameter job_queue_processes

修改job_queue_processes为0,恢复job执行

alter system set job_queue_processes=1000;

检查job

col what for a50
col schema_user for a20
col interval for a20
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select schema_user,job,what,broken,LAST_DATE,this_date,NEXT_DATE,TOTAL_TIME,INTERVAL,FAILURES 
from dba_jobs
where schema_user not in ('APEX_030200');
SELECT * FROM DBA_JOBS_RUNNING;

检查DG参数

set linesize 500 pages 100
col value for a70 
col name for a30 
select name, value 
from v$parameter 
where name in ('db_name','db_unique_name', 
'log_archive_config', 
'log_archive_dest_1','log_archive_dest_2', 
'log_archive_dest_state_1', 'log_archive_dest_3', 
'log_archive_dest_state_3', 
'log_archive_dest_state_2', 
'remote_login_passwordfile', 
'log_archive_format', 
'log_archive_max_processes', 
'fal_server','db_file_name_convert', 
'log_file_name_convert', 
'standby_file_management') 
/

查看隐含参数

验证修改的DRM参数以及_ktb参数 ##和平里一节点

set lin 200 pages 100
col name for a30
col value for a80
select nam.ksppinm name,val.ksppstvl value from x$ksppi nam,x$ksppsv val where nam.indx=val.indx and nam.ksppinm in
('_gc_undo_affinity','_gc_policy_time', '_ktb_debug_flags') order by 1
/

参数说明:

3.LOG_ARCHIVE_CONFIG 
LOG_ARCHIVE_CONFIG='DG_CONFIG=(db_unique_name, db_unique_name, ...)'
5.LOG_ARCHIVE_DEST_n 
LOG_ARCHIVE_DEST_n = {LOCATION=path_name| SERVICE=service_name, attribute, attribute, ... } 

归档文件的生成路径,location代表本地机上,service指明在另一台机器上。
主库:

LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/arch/chicago VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=chicago' 
LOG_ARCHIVE_DEST_2='SERVICE=boston LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston' 

备库:

LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/arch/boston VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=boston' 
LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=chicago'
8.LOG_ARCHIVE_FORMAT 
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc 

指定归档文件格式,这里在主备端应保持一样的格式。

%t -thread number 
%s -log sequence number 
%r -resetlogs ID 

主库:

LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc 

备库:

LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc 
LOG_ARCHIVE_DEST_STATE_n = {alternate | reset | defer | enable}
FAL_SERVER And FAL_CLIENT Settings For Cascaded Standby (Doc ID 358767.1)
How to configure the FAL_CLIENT and FAL_SERVER parameters in cascaded standby setup.
FAL_SERVER specifies the FAL (fetch archive log) server for a standby database. 
The value is an Oracle Net service name, which is assumed to be configured properly on the standby database system to point to the desired FAL server.
FAL_CLIENT specifies the FAL (fetch archive log) client name that is used by the FAL service, 
configured through the FAL_SERVER parameter, to refer to the FAL client. 
The value is an Oracle Net service name, 
which is assumed to be configured properly on the FAL server system to point to the FAL client (standby database). 
Given the dependency ofFAL_CLIENTonFAL_SERVER, the two parameters should be configured or changed at the same time.
You can read about the cascaded redo log solution in
<Note 409013.1>: Cascaded Standby Databases in Oracle 10g/11g

FAL_CLIENT和FAL_SERVER是配置dataguard用到的两个参数,FAL指获取归档日志(Fetch Archived Log)
FAL简单的说就是当standby db发现gaps in archived redo logs,即发现缺少archive log,就会自动去主库上拿。这样就可以避免了人工干预。

欢迎关注我的公众号《IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值