说明: 手动switchover 常用于主备库轮流切换打补丁,或者正常的主备库切换演练。切换前务必检查当前主库与备库的归档是否是同步的,确认同步正常后再执行切换。
一、环境准备
提示 具体配置过程可以参考下面文章:
https://blog.51cto.com/wujianwei/12219685
二. 检查当前环境配置及状态
2.1. 查看当前主库参数配置
select database_role,protection_mode,protection_level,open_mode from v$database;
archive log list
show parameter log_archive_config
show parameter log_archive_dest_1
show parameter log_archive_dest_2
show parameter LOG_FILE_NAME_CONVERT
show parameter DB_FILE_NAME_CONVERT
show parameter FAL_SERVER
show parameter FAL_CLIENT
详细过程如下:
SQL> select database_role,protection_mode,protection_level,open_mode from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE
------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 5
Next log sequence to archive 7
Current log sequence 7
SQL> show parameter log_archive_config
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_config string DG_CONFIG=(uni_dg1,uni_dg2)
SQL> show parameter log_archive_dest_1
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_dest_1 string LOCATION=/u01/oracle/tools/ora
cle11g/product/11.2.0/dbhome_1
/dbs/arch VALID_FOR=(ALL_LOGF
ILES,ALL_ROLES) DB_UNIQUE_NAME
=uni_dg1
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
SQL> show parameter log_archive_dest_2
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_dest_2 string SERVICE=uni_dg2 LGWR async VAL
ID_FOR=(ONLINE_LOGFILES,PRIMAR
Y_ROLE) DB_UNIQUE_NAME=uni_dg2
log_archive_dest_20 string
log_archive_dest_21 string
log_archive_dest_22 string
log_archive_dest_23 string
log_archive_dest_24 string
log_archive_dest_25 string
log_archive_dest_26 string
log_archive_dest_27 string
log_archive_dest_28 string
log_archive_dest_29 string
SQL> show parameter LOG_FILE_NAME_CONVERT
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
log_file_name_convert string /u01/oracle/tools/oracle11g/or
adata/orcl, /u01/oracle/tools/
oracle11g/oradata/orcl
SQL> show parameter DB_FILE_NAME_CONVERT
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
db_file_name_convert string /u01/oracle/tools/oracle11g/or
adata/orcl, /u01/oracle/tools/
oracle11g/oradata/orcl
SQL> show parameter FAL_SERVER
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
fal_server string uni_dg2
SQL> show parameter FAL_CLIENT
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
fal_client string uni_dg1
SQL>
2.2. 查看当前备库参数配置
select database_role,protection_mode,protection_level,open_mode from v$database;
archive log list
show parameter log_archive_config
show parameter log_archive_dest_1
show parameter log_archive_dest_2
show parameter LOG_FILE_NAME_CONVERT
show parameter DB_FILE_NAME_CONVERT
show parameter FAL_SERVER
show parameter FAL_CLIENT
2.3. 查看主备日志同步情况
archive log list
主库操作:
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 5
Next log sequence to archive 7
Current log sequence 7 #记住这个和备库对比,备库和主库一致说已实时同步
SQL>
备库操作:
SQL>b archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 6
Next log sequence to archive 0
Current log sequence 7 #记住这个和主库对比,备库和主库一致说已实时同步
SQL>
2.4查备库视图v$dataguard_stats
该动态性能视图显示出在主库产生了多少重做日志数据,但是没有被备库所应用,所以通过该视图基本可以确定当主库崩溃的话,备库将丢失多少重做日志数据,同时我们可以估算failover的时间(apply finish time + estimated startup time).
set linesize 999
col name for 50
col values for a30
select * from v$dataguard_stats;
具体执行过程:
SQL> set linesize 999
SQL> col name for 50
SP2-0246: Illegal FORMAT string "50"
SQL> col values for a30
SQL> select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------
transport lag +00 00:00:00 day(2) to second(0) interval 10/12/2024 14:48:37 10/12/2024 14:48:36
apply lag +00 00:00:00 day(2) to second(0) interval 10/12/2024 14:48:37 10/12/2024 14:48:36
apply finish time +00 00:00:00.000 day(2) to second(3) interval 10/12/2024 14:48:37
estimated startup time 5 second 10/12/2024 14:48:37
SQL>
v$dataguard_stats视图说明
###name字段
transport lag:没有传到备库的redo量或者在已经传输到备库但是备库没有应用的redo量。
apply lag:备库通过应用主库传过来的redo日志与主库同步所延迟的时间。
apply finish time :表示在备库上完成redo应用所需要的时间。
estimated startup time:启动和打开物理备库需要的时间,不适用逻辑备库
###value字段
参数的值
###unit字段
各个参数的时间单元
###TIME_COMPUTED字段
物理备库上估算各个参数的本地时间
三. 切换原主库至新备库
3.1. 查看主库当前可切换状态
对主库进行切换(如果SWITCHOVER_STATUS的值为TO STANDBY或者为SESSIONS ACTIVE都可以切换至备库) select database_role,switchover_status from v$database;
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------------------ ------------------------------------------------------------
PRIMARY TO STANDBY
3.2. 切换主库至备库
命令执行完,数据库实例处于关闭状态
alter database commit to switchover to physical standby with session shutdown;
详细过程如下:
SQL> alter database commit to switchover to physical standby with session shutdown;
Database altered.
SQL> select status from v$instance;
STATUS
------------------------------------
STARTED
SQL> select database_role,switchover_status from v$database;
select database_role,switchover_status from v$database
*
ERROR at line 1:
ORA-01507: database not mounted
SQL> select * from test0001;
select * from test0001
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
SQL>
3.3. 启动新备库至mount状态
SQL> startup mount;
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL>
SQL>
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL>
SQL>
SQL>
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1586708480 bytes
Fixed Size 2213736 bytes
Variable Size 922749080 bytes
Database Buffers 654311424 bytes
Redo Buffers 7434240 bytes
Database mounted.
3.4. 检查新备库状态
select open_mode,database_role,switchover_status from v$database;
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
------------------------------------------------------------ ------------------------------------------------ ------------------------------------------------------------
MOUNTED PHYSICAL STANDBY TO PRIMARY
SQL>
四. 切换原备库至新主库
4.1. 查看备库当前可切换状态
查看备库是否可以切换至主库( SWITCHOVER_STATUS的值为TO PRIMARY或者为SESSIONS ACTIVE都可以切换至主库)
SQL> set line 300 pages 300
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
------------------------------------------------------------
TO PRIMARY
4.2. 切换原备库至新主库
命令执行完,数据库实例处于mount状态
alter database commit to switchover to primary with session shutdown;
select status from v$instance;
详细过程如下:
SQL> alter database commit to switchover to primary with session shutdown;
Database altered.
SQL> select status from v$instance;
STATUS
------------------------------------
MOUNTED
4.3. 开启新主库至open 状态,并检查新主库状态
alter database open;
select database_role,protection_mode,protection_level,open_mode from v$database;
select name,open_mode,database_role,dataguard_broker,guard_status,switchover_status from v$database;
详细过程如下:
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> select database_role,protection_mode,protection_level,open_mode from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE
------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE
SQL>
五. 切换完成状态检查验证
5.1. 新主库手动切换归档日志
alter system switch logfile;
5.2. 查看新主库当前归档序号
archive log list;
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 11
Next log sequence to archive 13
Current log sequence 13
SQL>
SQL>
5.3. 新备库启用日志实时应用
本文档采用打开备库、备库open read only方式启用日志实时应用
#新备库 先查看 open_mode 和归档日志信息
SQL> select open_mode from v$database;
OPEN_MODE
------------------------------------------------------------
MOUNTED
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 11
Next log sequence to archive 0
Current log sequence 13
#打开备库 alter database open; select open_mode from v$database; #READ ONLY
SQL> alter database open;
Database altered.
SQL>
SQL> select open_mode from v$database;
OPEN_MODE
------------------------------------------------------------
READ ONLY
SQL> select status from v$instance ;
STATUS
------------------------------------
OPEN
##备库启用日志实时应用 --备库open read only用
alter database recover managed standby database parallel 10 using current logfile disconnect from session;
--备库mount模式用
alter database recover managed standby database parallel 10 disconnect from session;
#补充:备库关闭日志实时应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
详细过程:
SQL> select open_mode from v$database;
OPEN_MODE
------------------------------------------------------------
READ ONLY
SQL>
SQL> alter database recover managed standby database parallel 10 using current logfile disconnect from session;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
------------------------------------------------------------
READ ONLY WITH APPLY
5.4. 检查新备库当前接收,以及正在应用的日志序号。与新主库一致
select process,client_process,sequence#,status from v$managed_standby;
archive log list;
新备库执行过程如下:
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_PROCESS SEQUENCE# STATUS
--------------------------- ------------------------ ---------- ------------------------------------
ARCH ARCH 11 CLOSING
ARCH ARCH 0 CONNECTED
ARCH ARCH 12 CLOSING
ARCH ARCH 10 CLOSING
RFS N/A 0 IDLE
RFS UNKNOWN 0 IDLE
RFS LGWR 13 IDLE
MRP0 N/A 13 APPLYING_LOG
8 rows selected.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 13
Next log sequence to archive 0
Current log sequence 13
SQL>
新主库执行过程如下:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence 11
Next log sequence to archive 13
Current log sequence 13
SQL>
SQL>
##新主库插入一条数据
SQL> insert into test0001 values(3,'aaa');
1 row created.
SQL> commit;
Commit complete.
###新备库上查看:
SQL>
SQL> select * from test0001;
ID
----------
NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
zhangsan
2
lisi
3
aaa
SQL>
##新备库已经可以正常同步数据了
5.6. 检查新主库及新备库alert日志,观察是否有告警及其他需要注意的日志。
tail -100f /u01/oracle/tools/oracle11g/diag/rdbms/uni_dg2/orcl/trace/alert_orcl.log
tail -100f /u01/oracle/tools/oracle11g/diag/rdbms/uni_dg1/orcl/trace/alert_orcl.log
以上就是简单的分享测试过程,不对之处欢迎指正。 参考地址:https://www.modb.pro/doc/110083