Oracle Data Guard đảm bảo tính sẵn có cao (high availability), bảo vệ dữ liệu và phục hồi dữ liệu cho doanh nghiệp.
Oracle Data Guard giúp tạo, duy trì, quản lý và giám sát một hoặc nhiều cơ sở dữ liệu dự phòng để cho phép cơ sở dữ liệu Oracle chính (primary database) có thể khôi phục dữ liệu khi các trường hợp rủi ro xảy ra. Nếu cơ sở dữ liệu chính không khả dụng, ngừng hoạt động ngoài kế hoạch, Oracle Data Guard có thể chuyển bất kỳ cơ sở dữ liệu dự phòng (standby database) thành cơ sở dữ liệu chính, giảm thiểu downtime. Ngoài ra, Oracle Data Guard sử dụng kỹ thuật backup, restoration, và cluster để cung cấp mức độ bảo vệ dữ liệu cao và tính sẵn có của dữ liệu.
Chuẩn bị cài đặt
Một cấu hình Oracle Data Guard có thể bao gồm một primary database và tối đa 30 standby database.
Trong hướng dẫn này ta sẽ sử dụng 1 physical primary database và 1 physical standby database (dựng từ primary database) cùng phiên bản nằm trên 2 server khác nhau được dựng trên vmware
Primary database
#hostnameoradbpr#enviroment variablesORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1ORACLE_UNQNAME=oraprORACLE_BASE=/u01/app/oracleORACLE_SID=ORAPR#/etc/hosts file127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.254.131 oradbpr #primary192.168.254.133 oradbsc #standby
Standby database
#hostnameoradbsc#enviroment variablesORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1ORACLE_UNQNAME=orascORACLE_BASE=/u01/app/oracleORACLE_SID=ORASC#/etc/hosts file127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.254.131 oradbpr192.168.254.133 oradbsc
Tiến hành cài đặt
Cấu hình primary database
Kích hoạt mode phù hợp cho Data Guard
Logging mode mặc định của 1 database không phù hợp với cấu hình Data Guard, mode này cho phép các hành động load dữ liệu nhất định không ghi lại log (nolog). mode này không phù hợp với standby database vì nó dẫn đến việc dữ liệu đã được load bị thiếu ở standby, dẫn đến việc cần can thiệp thủ công để khắc phục. Ngoài Logging mode mặc định, có 3 mode khác phù hợp cho một primary database.
FORCE LOGGING
mode ngăn không cho bất kỳ hành vi load dữ liệu nào được thực thi mà không ghi lại log. Điều
này có thể làm chậm quá trình load vì dữ liệu đã được load phải được copy vào redo logs. Để kích hoạt FORCE LOGGING
mode
sử dụng câu lệnh:
ALTER DATABASE FORCE LOGGING;
STANDBY NOLOGGING FOR DATA AVAILABILITY
làm các hành vi load và gửi các dữ liệu đã được load đến từng standby thông qua chính kết nối giữa primary và
standby. Commit sẽ bị trì hoãn cho đến khi tất cả các standby đã apply dữ liệu. Kích hoạt mode bằng câu lệnh:
ALTER DATABASE SET STANDBY NOLOGGING FOR DATA AVAILABILITY;
STANDBY NOLOGGING FOR LOAD PERFORMANCE
cũng giống với STANDBY NOLOGGING FOR DATA AVAILABILITY
mode ngoại trừ việc các tiến trình đang load có thể ngừng
gửi dữ liệu đến các standby nếu network không thể theo kịp tốc độ dữ liệu được load vào primary. trong mode này các standby có thể bị thiếu dữ liệu, nhưng
mỗi standby sẽ tự động fetch dữ liệu từ primary. Để kích hoạt mode thực hiện câu lệnh:
ALTER DATABASE SET STANDBY NOLOGGING FOR LOAD PERFORMANCE;
Trong hướng dẫn này ta sẽ sử dụng STANDBY NOLOGGING FOR DATA AVAILABILITY
mode
Thực hiện trên primary database
Kích hoạt Archiving
Nếu archiving không được kích hoạt thì ta phải bật ARCHIVELOG
mode trên primary database để kích hoạt archiving tự động
Sử dụng các câu lệnh
SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN;
Đặt các tham số khởi tạo
ALTER SYSTEM SET DB_UNIQUE_NAME=ORAPR SCOPE=SPFILE;ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORAPR,ORASC)' SCOPE=SPFILE;ALTER SYSTEM SET CONTROL_FILES='/data/ORAPR/control01.ctl', '/fra/ORAPR/control02.ctl' SCOPE=SPFILE;ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME="ORAPR"' SCOPE=SPFILE;ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE="ORASC" LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME="ORASC"' SCOPE=both;ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE' SCOPE=SPFILE;ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=both;
- Nếu sử dụng DGMGRL broker để quản lý, set tham số
DG_BROKER_START
ở cả primary và standby- Nếu quản lý bằng DGMGRL broker set
LOG_ARCHIVE_DEST_2
phía standby sau khienable configuration
Đặt các tham số khởi tạo dành cho standby role trên primary database. Các tham số này chỉ có hiệu lực khi primary database chuyển sang standby role
ALTER SYSTEM SET FAL_SERVER=ORASC SCOPE=SPFILE;ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/ORASC/','/ORAPR/' SCOPE=SPFILE;ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/ORASC/','/ORAPR/' SCOPE=SPFILE;ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;
Cấu hình nhận redo data
Cấu hình primary database để nhận redo data, nếu lần đầu tiên thêm 1 standby database vào cấu hình.
Sau đó, cơ sở dữ liệu chính có thể nhanh chóng chuyển sang standby role và bắt đầu nhận redo data, nếu cần.
Để tạo standby redo log, hãy sử dụng câu lệnh ALTER DATABASE ADD STANDBY LOGFILE
. Ví dụ:
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 4 ('/data/ORAPR/standby_redo01.log') SIZE 500M;ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 5 ('/data/ORAPR/standby_redo02.log') SIZE 500M;ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 6 ('/data/ORAPR/standby_redo03.log') SIZE 500M;
Check redo log file exist
SELECT GROUP#, TYPE, MEMBER from v$logfile;
Check redo wastage
SELECT name, value FROM v$sysstat WHERE name = 'redo wastage';
Chỉnh sửa listener.ora
và tnsnames.ora
Thực hiện trên cả primary và standby
Chỉnh sửa 2 file $ORACLE_HOME/network/admin/listener.ora
và $ORACLE_HOME/network/admin/tnsnames.ora
Cấu hình và khởi tạo standby database
Tạo standby control file trên primary
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/backup/orasc.ctl';
Tạo PFILE từ SPFILE trên primary
CREATE PFILE='/data/ORAPR/initORAPR.ora' FROM SPFILE;
Thực hiện các thao tác sau phía standby sau khi đã cài Oracle Database software
mkdir -p /data/ORASCmkdir -p /fra/ORASCmkdir -p /u01/app/oracle/admin/ORASC/adumpmkdir -p /backup/rman/data
Copy các file sau từ primary sang standby
scp $ORACLE_HOME/dbs/orapwORAPR oracle@oradbsc:$ORACLE_HOME/dbs/orapwORASCscp /data/ORAPR/initORAPR.ora oracle@oradbsc:$ORACLE_HOME/dbs/initORASC.orascp /backup/orasc.ctl oracle@oradbsc:/data/ORASC/control01.ctl
Thực hiện sau khi copy, trên standby
cp /data/ORASC/control01.ctl /fra/ORASC/control02.ctl
Chỉnh sửa file $ORACLE_HOME/dbs/initORASC.ora
Khởi tạo standby database bằng RMAN DUPLICATE
Startup nomount và reload listener trên standby
SQL> STARTUP NOMOUNT;[oracle@oradbpr ~]$ lsnrctl reload
rman target sys/password@ORAPR auxiliary sys/password@ORASCRMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE #SPFILE #SET DB_UNIQUE_NAME='ORASC' COMMENT 'Is standby' #SET FAL_SERVER='ORAPR' COMMENT 'Is primary' DORECOVER NOFILENAMECHECK;
FOR STANDBY
: Báo hiệu lệnh DUPLICATE này nhân bản cho standby database do đó DBID phải giữ nguyênFROM ACTIVE DATABASE
: Lấy trực tiếp từ datafile sau đó recover ,mà không sử dụng bản backup hay không phải backup gì cả.DORECOVER
: Thực hiện recovery để đưa standby về 1 thời điểm gần nhấtSPFILE
: Cho phép chúng ta đặt lại các giá trị trong spfile khi được copy từ primary sang standby.NOFILENAMECHECK
: Vị trị các file không được kiểm tra
Nếu password chứa ký tự đặc biệt truy cập https://www.urlencoder.org/ để convert.
Khởi tạo standby database bằng Backup/Recovery
Tiến hành backup bên primary
rman target /RMAN> STARTUP MOUNT; #Nếu chưa startup databaseRMAN> CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 10G;RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;RMAN> run {crosscheck archivelog all;crosscheck backup;delete expired backup;backup incremental level 0 database format '/backup/rman/data/%T_data_%U';backup archivelog all format '/backup/rman/data/%T_arc_%U';backup current controlfile format '/backup/rman/data/ctl_%U';backup spfile format '/backup/rman/data/spfile_%U';crosscheck backup;delete obsolete;}
Thực hiện backup xong copy sang standby
scp -r /backup/rman/data oracle@oradbsc:/backup/rmanscp -r /fra/ORAPR/archivelog oracle@oradbsc:/fra/ORASC
Tiến hành recovery trên standby
rman target /RMAN> STARTUP MOUNT; #Nếu chưa startup databaseRMAN> CATALOG START WITH '/backup/rman/data';RMAN> RESTORE DATABASE;RMAN> RECOVER DATABASE;
Apply quy trình
Sau khi thực hiện duplicate database, thực thi các câu lệnh phía standby
Triển khai redo apply trong background. Kiểm soát được trả lại cho phiên khi tiến trình apply được bật
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Tắt tiến trình apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Open database
ALTER DATABASE OPEN;
Bật apply theo thời gian thực (real time)
--Cần kích hoạt archivelog modeALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT;
THROUGH ALL SWITCHOVER
: sử dụng control option này giúp các standby database (không tham gia vào switchover) có thể recover thông qua tất cả các điểm end-of-redo và tiếp tục nhận và apply archived redo logs từ primary database mới, thay vì dừng quá trình recovery rồi bắt đầu lại sau khi failover để standby database trở thành primary database mới.
Nếu muốn, ta có thể đặt thời gian trễ giữa sự xuất hiện của archived redo log và các sequence được apply phía standby bằng cách sử dụng các lệnh sau.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DELAY 30 DISCONNECT FROM SESSION;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY DISCONNECT FROM SESSION;
Kiểm tra cài đặt
Trên primary database, kiểm tra archived redo log mới nhất và force a log switch (bắt Log Switches để chuyển sang log file tiếp theo)
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# DESC;ALTER SYSTEM SWITCH LOGFILE;
Kiểm tra xem archived redo log mới đã đến được standby database và được apply hay chưa
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# DESC;
Kiểm tra OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS trước khi switchover
SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER và FAILOVER
SWITCHOVER
Một database có thể ở một trong 2 role là primary và standby, hai role này có thể thay đổi trong thời gian chạy mà không làm maastg mát dữ liệu
hoặc reset redo logs. Quá trình chuyển đổi này được gọi là SWITCHOVER
.
Chuyển đổi cơ sở dữ liệu primary sang chế độ standby
ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;
Mount primary database cũ bây giờ thành standby database
STARTUP NOMOUNT;ALTER DATABASE MOUNT STANDBY DATABASE;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;ALTER DATABASE OPEN;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE;
Chuyển đổi standby database thành cơ sở dữ liệu primary
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Open standby database cũ, bây giờ thành primary
ALTER DATABASE OPEN;
FAILOVER
Khi primary database gặp sự cố và không thể khôi phục được, standby database có thể được activate hoạt động như là primary database mới.
Thực hiện các câu lệnh sau
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;ALTER DATABASE ACTIVATE STANDBY DATABASE;
Sau khi chuyển đổi nên tiến hành backup full để đảm bảo an toàn.
Tham khảo thêm: