7.1. HƯỚNG DẪN GIÁM SÁT, BẬT, TẮT DATAGUARD
Giám sát
Sử dụng Oracle Broker kiểm tra trạng thái cấu hình DataGuard:
dgmgrl /
show configuration;
show database verbose dbaviet
Hoặc sử dụng SQL kiểm tra apply lag trên Standby:
SELECT NAME, VALUE FROM V$DATAGUARD_STATS WHERE NAME='apply lag';
Nếu lag =0 thì OK, còn > 5 phút cần check lại.
Kiểm tra trạng thái các process sử dụng cho đồng bộ dữ liệu trên Standby
ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS'
SELECT PROCESS, CLIENT_PROCESS, THREAD#, SEQUENCE#, STATUS, BLOCK#, BLOCKS FROM GV$MANAGED_STANDBY order by PROCESS, thread#, SEQUENCE#;
Check apply archived log:
SQL> !date
Mon Apr 5 15:23:15 +07 2021
SELECT sequence#, first_time, next_time, applied FROM v$archived_log
where next_time>sysdate-1 ;
(Như này là real time, sequence cuối cùng 19987 là IN-MEMORY, còn nếu nhiều sequence mà APPLIED=NO là GAP (trễ) ở đó)
-- Đảm bảo không có row nào
SELECT NAME, thread#, sequence#, next_time, first_change#, creator, fal,
registrar, archived, applied, deleted,
TRUNC (blocks * block_size / 1024 / 1024) || 'M' arc
FROM v$archived_log
WHERE thread# = 1 AND sequence# >= (SELECT MAX (sequence#)
FROM v$archived_log
WHERE applied = 'YES' AND thread# = 1)
and dest_id=2
UNION ALL
SELECT NAME, thread#, sequence#, next_time, first_change#, creator, fal,
registrar, archived, applied, deleted,
TRUNC (blocks * block_size / 1024 / 1024) || 'M' arc
FROM v$archived_log
WHERE thread# = 2 AND sequence# >= (SELECT MAX (sequence#)
FROM v$archived_log
WHERE applied = 'YES' AND thread# = 2)
and dest_id=2
ORDER BY thread#, sequence# DESC;
Kiểm tra transfer được archive log từ Primary sang Standby
§ Primary: Tạo log switch
ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';
-- Kiểm tra sequence# mới nhất: ví dụ 1131595 1/29/2021 2:16:20 PM 1/29/2021 3:32:26 PM
SELECT sequence#, first_time, next_time
FROM v$archived_log;
ALTER SYSTEM SWITCH LOGFILE;
-- Kiểm tra sequence# hiện tại mới sinh ra: ví dụ 1131596 1/29/2021 3:32:26 PM 1/29/2021 4:47:06 PM
SELECT sequence#, first_time, next_time
FROM v$archived_log;
§ Standby: Kiểm tra xem archive log mới sinh ra đã sang standby và đã apply chưa
ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';
-- Nếu equence# là 131596 thì OK
SELECT sequence#, first_time, next_time
FROM v$archived_log;
Note: Nếu không transfer được archive log từ primary sang standby hãy kiểm tra:
- Đường mạng giữa primary & standby
- Listener trên standby
- Standby có đang mount hoặc open hay không.
- Vùng chứa archive log (+RECO) trên standby có bị đầy hay không
2.START/STOP
2.1. Start/Stop broker
alter system set dg_broker_start=true sid='*'
alter system set dg_broker_start=false sid='*';
2.2. Start/Stop chế độ apply trên Primary
Cách 1: Dùng Broker
--Khởi động truyền log/archive trên 1 node database dbaviet
dgmgrl /
edit database dbavietset state='TRANSPORT-ON';
--Dừng truyền log/archive trên database dbaviet
dgmgrl /
edit database dbavietset state='TRANSPORT-OFF';
Check lai:
DGMGRL> SHOW DATABASE dbaviet;
Cách 2: Dùng SQL
-- dbaviet
SQL> show parameter archive_dest_state_2
-- Enable
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY SID='*';
--Disable đẩy archivelog sang dest_2
ALTER SYSTEM SET log_archive_dest_state_2='DEFER' SCOPE=BOTH SID='*';
Khi tắt sẽ có log:
Fri Jul 16 10:31:10 2021
FAL[server, ARC3]: FAL archive failed, see trace file.
ARCH: FAL archive failed. Archiver continuing
ORACLE Instance dbaviet_dg1 - Archival Error. Archiver continuing.
FAL[server, ARC3]: FAL archive failed, see trace file.
ARCH: FAL archive failed. Archiver continuing
ORACLE Instance dbaviet_dg1 - Archival Error. Archiver continuing.
FAL[server, ARC3]: FAL archive failed, see trace file.
ARCH: FAL archive failed. Archiver continuing
ORACLE Instance dbaviet_dg1 - Archival Error. Archiver continuing.
FAL[server, ARC3]: FAL archive failed, see trace file.
2.3. Start/Stop chế độ apply trên standby
-- Cách 1: Dùng Broker
1. Bật apply trên database dbaviet_standby
dgmgrl /
edit database dbaviet_standby set state='APPLY-ON';
show database dbaviet_standby
2. Dừng apply trên database dbaviet_standby
dgmgrl /
edit database dbaviet_standby set state='APPLY-OFF';
-- Cách 2: Dùng SQL
-- Start
alter database recover managed standby database using current logfile disconnect;
hoặc:
alter database recover managed standby database disconnect from session;
-- Stop
alter database recover managed standby database cancel;
2.4. Tự động, manual thêm datafile
alter system set standby_file_management=AUTO;
alter system set standby_file_management=MANUAL;
7.2. Cách xử lý GAPS trong standby database (Data Guard) sử dụng backup RMAN incremental
Các bước trong bài đăng này có thể được sử dụng để giải quyết sự cố nếu cơ sở dữ liệu physical sandby bị mất hoặc bị hỏng archived redo data hoặc thiếu archived log (gap)1. Đảm bảo rằng bạn dừng tiên trình khôi phục được quản lý (MRP) trước khi tiếp tục các bước tiếp theo.
-- PRIMARY
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
2. Trên STANDBY DATABASE (cơ sở dữ liệu dự phòng) , tìm SCN sẽ được sử dụng để incremental backup tại cơ sở dữ liệu chính (Primary Database). Bạn cần sử dụng 'SCN thấp nhất' từ 3 truy vấn dưới đây:
--STANDBY
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
--------------
3164433
SQL> select min(fhscn) from x$kcvfh;
MIN(FHSCN)
----------------
3162298
SQL> select min(f.fhscn) from x$kcvfh f, v$datafile d
where f.hxfil =d.file#
and d.enabled != 'READ ONLY' ;
MIN(F.FHSCN)
----------------
3162298
3. Bạn cần sử dụng ' SCN thấp nhất ' từ 3 truy vấn, ở đây là -> SCN: 3162298. Trong RMAN, hãy kết nối với cơ sở dữ liệu PRIMARY và tạo bản incremental backup từ SCN được dẫn xuất ở bước trước:
--PRIMARY
RMAN> BACKUP INCREMENTAL FROM SCN 3162298 DATABASE FORMAT '/tmp/ForStandby_%U' tag 'FORSTANDBY';
4. Chuyển tất cả các bộ backup được tạo trên hệ thống chính sang hệ thống dự phòng.
--PRIMARY
primary $ scp /tmp/ForStandby_* standby:/tmp
Trên STANDBY catalog các backup pieces để nó nhận được bản backup (thông tin này được ghi vào control file của Standby database):
--STANDBY
RMAN> CATALOG START WITH '/tmp/ForStandby';
using target database control file instead of recovery catalog
searching for all files that match the pattern /tmp/ForStandby
List of Files Unknown to the Database
=====================================
File Name: /tmp/ForStandby_2lkglss4_1_1
File Name: /tmp/ForStandby_2mkglst8_1_1
Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /tmp/ForStandby_2lkglss4_1_1
File Name: /tmp/ForStandby_2mkglst8_1_1
5. Khôi phục cơ sở dữ liệu STANDBY với incremental backup đã được catalog:
--STANDBY
RMAN> RECOVER DATABASE NOREDO;
starting recover at 03-JUN-09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=28 devtype=DISK
channel ORA_DISK_1: starting incremental datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00001: +DATA/mystd/datafile/system.297.688213333
destination for restore of datafile 00002: +DATA/mystd/datafile/undotbs1.268.688213335
destination for restore of datafile 00003: +DATA/mystd/datafile/sysaux.267.688213333
channel ORA_DISK_1: reading from backup piece /tmp/ForStandby_2lkglss4_1_1
channel ORA_DISK_1: restored backup piece 1
piece handle=/tmp/ForStandby_2lkglss4_1_1 tag=FORSTANDBY
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
Finished recover at 03-JUN-09
6. Trong RMAN, kết nối với cơ sở dữ liệu PRIMARY và tạo bản sao lưu standby control file:
--PRIMARY
RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/tmp/ForStandbyCTRL.bck';
7. Sao chép bản sao standby control file vào hệ thống STANDBY .
--PRIMARY
primary $ scp /tmp/ForStandbyCTRL.bck standby:/tmp
8. Sao lưu vị trí của datafile ở standby trong trường hợp tên / vị trí datafile khác với tên / vị trí tệp Primary.
--standby
SQL> spool datafile_names_step8.txt
set lines 200
col name format a60
select file#, name from v$datafile order by file# ;
spool off
9. Từ RMAN, kết nối với cơ sở dữ liệu STANDBY và khôi phục standby control file:
--STANDBY
RMAN> SHUTDOWN IMMEDIATE ;
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE STANDBY CONTROLFILE FROM '/tmp/ForStandbyCTRL.bck';
Starting restore at 03-JUN-09
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=36 devtype=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
output filename=+DATA/mystd/controlfile/current.257.688583989
Finished restore at 03-JUN-09
10. Tắt cơ sở dữ liệu STANDBY và startup mount:
--STANDBY
SQL> SHUTDOWN;
SQL> STARTUP MOUNT;
11. Vì control file được khôi phục từ PRIMARY, các vị trí datafile trong STANDBY controlfile sẽ giống với cơ sở dữ liệu PRIMARY, vì vậy các catalog datafile trong STANDBY sẽ thực hiện các thao tác đổi tên cần thiết. Thực hiện bước dưới đây trong STANDBY cho mỗi diskgroup trong đó cấu trúc thư mục datafile giữa chế độ primary và chế độ standby là khác nhau.
--STANDBY
RMAN> CATALOG START WITH '+DATA/mystd/datafile/';
List of Files Unknown to the Database
=====================================
File Name: +data/mystd/DATAFILE/SYSTEM.309.685535773
File Name: +data/mystd/DATAFILE/SYSAUX.301.685535773
File Name: +data/mystd/DATAFILE/UNDOTBS1.302.685535775
File Name: +data/mystd/DATAFILE/SYSTEM.297.688213333
File Name: +data/mystd/DATAFILE/SYSAUX.267.688213333
File Name: +data/mystd/DATAFILE/UNDOTBS1.268.688213335
Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: +data/mystd/DATAFILE/SYSTEM.297.688213333
File Name: +data/mystd/DATAFILE/SYSAUX.267.688213333
File Name: +data/mystd/DATAFILE/UNDOTBS1.268.688213335
12. Chuyển các datafile sang tên chính xác của nó tại standby :
--STANDBY
RMAN> SWITCH DATABASE TO COPY;
datafile 1 switched to datafile copy "+DATA/mystd/datafile/system.297.688213333"
datafile 2 switched to datafile copy "+DATA/mystd/datafile/undotbs1.268.688213335"
datafile 3 switched to datafile copy "+DATA/mystd/datafile/sysaux.267.688213333"
13. Trên cơ sở dữ liệu ở standby, xóa tất cả các standby redo log group:
--STANDBY
SQL> ALTER DATABASE CLEAR LOGFILE GROUP [group number];
Xác minh:
Chạy lại các truy vấn từ bước 2 để xác nhận rằng incremental apply đã chuyển các datafile forwared. SCN bây giờ phải lớn hơn giá trị ban đầu của nó:
--STANDBY
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
--------------
SQL> select min(fhscn) from x$kcvfh;
MIN(FHSCN)
---------------
SQL> select min(f.fhscn) from x$kcvfh f, v$datafile d
where f.hxfil =d.file#
and d.enabled != 'READ ONLY' ;
MIN(F.FHSCN)
---------------
14. Bắt đầu quá trình MRP ở standby
--standby
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Bạn cũng có thể lấy và thực hiện incremental backup các datafile từ SCN ở standby trên cơ sở dữ liệu chính. Bằng cách đó, bạn có thể giảm thời gian sao lưu và khôi phục.
7.3. Thủ tục switchover Oracle DataGuard
7.4. Thủ tục Failover Oracle Data Guard
Khi site chính gặp sự cố đột ngột không khôi phục được thì buộc phải bật con Physical Standby thành Primary, hay còn gọi là Failover
Chi tiết cấu hình Dataguard
Login in vào Standby Server:-
Step:1 Kiểm tra database role và open_mode
select name,open_mode,database_role from v$database;
Step:2 Cancel tiến trình MRP
alter database recover managed standby database cancel;
Step:3 Chuyển standby thành primary
alter database recover managed standby database finish;
alter database activate standby database;
Managed recovery process đã tạm dừng giữa primary và standby database và standby trở thành primary database.
Step:4 shutdown và kiểm tra database name, open mode, role.
shutdown immediate;
Startup
Step:5
select name,open_mode,database_role from v$database;
Note:
Nên backup full 1 bản ở Primary chính để đảm bảo an toàn vì hiện tại không có dự phòng gì ngoài bản backup full vừa thực hiện (chú ý bản backup phải nằm trên SAN khác với SAN chứa datafile)
Sau khi failover: