Dưới đây là hướng dẫn các bước thực hiện switchover Oracle data guard, chuyển đổi vai trò prim, standby giữa 2 node trong hệ thống.
THÔNG TIN CHI TIẾT 2 NODE:
Items | Primary – SRV1 | Standby – SRV2 |
hostname | srv1 | srv2 |
ip | 192.168.1.11 | 192.168.1.12 |
db name | duodb | duodb |
instance_name | duodb | stand |
db_unique_name | duodb | stand |
version DB | 19.3 | 19.3 |
DB_HOME | /u01/app/oracle/ product/19.3.0/dbhome_1 | /u01/app/oracle/ product/19.3.0/dbhome_1 |
DB_BASE | /u01/app/oracle | /u01/app/oracle |
global database name | srv1.localdomain | srv2.localdomain |
SRV1 – server tôi đặt là Primary
SRV2 – server tôi đặt là Standby
Kiểm tra thông tin database:
Primary database:
SQL> select name,open_mode,database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
——— ——————– —————-
DUODB READ WRITE PRIMARY
Standby database:
SQL> select name,open_mode,database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
——— ——————– —————-
DUODB MOUNTED PHYSICAL STANDBY
Pre-check trước khi thực hiện chuyển đổi:
SQL> ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';
Session altered.
SQL> SELECT sequence#, first_time, next_time, applied FROM v$archived_log ORDER BY sequence#;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
———- ——————– ——————– ———
5 04-MAY-2024 06:18:36 04-MAY-2024 10:45:55 YES
6 04-MAY-2024 10:45:55 04-MAY-2024 12:44:04 YES
7 04-MAY-2024 12:44:04 04-MAY-2024 18:01:27 YES
8 04-MAY-2024 18:01:27 04-MAY-2024 18:02:34 YES
9 04-MAY-2024 18:02:34 04-MAY-2024 18:02:34 YES
10 04-MAY-2024 18:02:34 04-MAY-2024 18:11:12 YES
10 04-MAY-2024 18:02:34 04-MAY-2024 18:11:12 YES
11 04-MAY-2024 18:11:12 04-MAY-2024 18:17:07 YES
11 04-MAY-2024 18:11:12 04-MAY-2024 18:17:07 YES
12 04-MAY-2024 18:17:07 04-MAY-2024 18:22:13 YES
12 04-MAY-2024 18:17:07 04-MAY-2024 18:22:13 YES
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
———- ——————– ——————– ———
13 04-MAY-2024 18:22:17 04-MAY-2024 18:23:41 YES
14 04-MAY-2024 18:23:41 04-MAY-2024 18:43:37 YES
15 04-MAY-2024 18:43:41 04-MAY-2024 18:44:23 NO
15 04-MAY-2024 18:43:41 04-MAY-2024 18:44:23 YES
16 04-MAY-2024 18:44:23 05-MAY-2024 14:48:54 NO
16 04-MAY-2024 18:44:23 05-MAY-2024 14:48:54 NO
17 rows selected.
select switchover_status from v$database;
SWITCHOVER_STATUS
——————–
TO STANDBY
Thông tin bên trên trả về trạng thái hiện tại của DG: trong đó SWITCHOVER_STATUS có thể nhận các thông số sau:
Not Allowed: thông báo không thể thực hiện chuyển đổi được, có thể SRV này là standby hoặc Standby nhưng chưa được thực hiện switchover sang Primary.
Session Active: Cho biết rằng có các phiên SQL đang hoạt động được gắn vào cơ sở dữ liệu chính hoặc dự phòng cần được ngắt kết nối trước khi cho phép thao tác chuyển đổi.
Switchover Pending: Đây là cơ sở dữ liệu dự phòng và yêu cầu chuyển đổi cơ sở dữ liệu chính đã được nhận nhưng chưa được xử lý.
Switchover Latent: Quá trình chuyển đổi đang ở chế độ chờ xử lý nhưng chưa hoàn tất và quay trở lại cơ sở dữ liệu chính
To Primary: Đây là cơ sở dữ liệu dự phòng, không có phiên hoạt động, được phép chuyển sang cơ sở dữ liệu chính
To Standby: Đây là cơ sở dữ liệu chính, không có phiên hoạt động, được phép chuyển sang cơ sở dữ liệu dự phòng
Recovery Needed: Đây là cơ sở dữ liệu dự phòng chưa nhận được yêu cầu chuyển đổi
Primary database: thực hiện chuyển đổi (LƯU Ý: quá trình chuyển đổi phải được thực hiện trên PRIMARY database)
Kiểm tra role và thông tin db_unique_name trên cả 2 SRV:
select name, open_mode, db_unique_name, database_role from v$database;
NAME OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE
——— ——————– —————————— —————-
DUODB READ WRITE duodb PRIMARY
NAME OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE
——— ——————– —————————— —————-
DUODB MOUNTED STAND PHYSICAL STANDBY
Chúng ta thấy rằng: SRV Primary có db_unique_name: duodb, còn Standby có db_unique_name là STAND => nghĩa là giờ chúng ta cần switchover duodb thành STAND là xong.
Verify thử trước khi thực hiện: (đảm bảo không có GAPS)
alter database switchover to STAND verify;
=> đảm bảo không có lỗi gì xuất hiện
select status, gap_status from v$archive_dest_status where dest_id = 2;
STATUS GAP_STATUS
——— ————————
VALID NO GAP
SRV1: Thực hiện quá trình switchover:
alter database switchover to STAND;
SRV2: (hiện tại Srv2 trở thành primary database) => open database:
sqlplus / as sysdba alter database open;
SRV1: (hiện tại là standby database) và tiến hành mount database:
startup mount alter database recover managed standby database disconnect;
// lệnh này tiến hành đồng bộ redo log trở lại sau quá trình bị disconnect
Check thông tin trên 2 SRV:
select name, open_mode, db_unique_name, database_role from v$database;
Kiểm tra lại GAP trên 2 SRV:
select status, gap_status from v$archive_dest_status where dest_id = 2;
Switchover thành công, SRV1 giờ đã trở thành Standby và SRV2 hiện đã thành Primary.
Chúng ta cũng có thể thao tác chuyển đổi ngược lại quá trình trên switchoverback làm tương tự như bên trên.
Chúc các bạn thành công.