Thứ Ba, 13 tháng 9, 2022

HƯỚNG DẪN GIÁM SÁT, VẬN HÀNH DATAGUARD

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

STT

Công việc

Câu lệnh tại máy primay 192.168.0.22

Câu lệnh tại máy standby 192.168.0.11

1

Kiểm tra đồng bộ log giữa 2 máy

ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SELECT sequence#, first_time, next_time

FROM   v$archived_log

ORDER BY sequence#;

kết quả:

3289 29-MAY-2017 16:55:53 29-MAY-2017 17:20:49

ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SELECT sequence#, first_time, next_time, applied

FROM   v$archived_log

ORDER BY sequence#;

kết quả:

3289 29-MAY-2017 16:55:53 29-MAY-2017 17:20:49 YES

2

Nếu trên máy standby trạng thái NO

thì  chuyển về Yes


recover standby database;

3

Tắt database trên máy 11


sqlplus / as sysdba

shutdown immediate

4

Bật lại database máy 11


sqlplus / as sysdba

startup mount

5

apply log trên máy standby 11


alter database recover managed standby database

 disconnect from session;

6

Thực hiện switchover tư máy

22 sáng máy 11 thực hiên trên máy 22

trước sau đó thực thi trên máy 11

sqlplus / as sysdba

alter database commit to switchover to standby;

-- Mount old primary database to standby database

alter database mount standby database;

alter database recover managed standby database

 disconnect from session;

sqlplus  / as sysdba

alter database commit to switchover to primary;

--Shutdown standby database

shutdown immediate

-- Open old standby database to primary

startup;

7

Tắt Database máy 22

sqlplus / as sysdba

shutdown immediate


8

Sau khi thêm tài nguyên thì bật lên

sqlplus / as sysdba

startup mount


9

apply log trên máy standby 22

alter database recover managed standby database

 disconnect from session;


6

Thực hiện switchover từ

máy 11 sáng máy 22 thực hiện trên

máy 22 trước rồi mới thực hiện máy 11

sqlplus  / as sysdba

alter database commit to switchover to primary;

--Shutdown standby database

shutdown immediate

-- Open old standby database to primary

startup;

sqlplus / as sysdba

alter database commit to switchover to standby;

-- Mount old primary database to standby database

alter database mount standby database;

alter database recover managed standby database

 disconnect from session;

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:


ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master