0
点赞
收藏
分享

微信扫一扫

Oracle11g之ADG主备switchover手动切换

凯约 2024-10-13 阅读 15

说明: 手动switchover 常用于主备库轮流切换打补丁,或者正常的主备库切换演练。切换前务必检查当前主库与备库的归档是否是同步的,确认同步正常后再执行切换。

一、环境准备

图片.png 提示 具体配置过程可以参考下面文章: 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

举报

相关推荐

0 条评论