Hướng dẫn cài đặt Oracle data guard Physical standby Ver 19c với RMAN

Dưới đây là hướng dẫn chi tiết quá trình dựng node Oracle data guard Physical standby Ver 19c với RMAN

Hướng dẫn cài đặt Oracle data guard Physical standby Ver 19c với RMAN

THÔNG TIN CHI TIẾT 2 NODE:

Items Primary – SRV1 Standby – SRV2
hostname srv1 srv2
ip 192.168.68.11 192.168.68.12
db name duodb duodb
instance_name duodb duodb
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

do oracle data guard

Bắt đầu thôi:

Chuẩn bị hệ điều hành Linux để cài đặt:

Xem các bước cài đặt HĐH oracle Linux ở đây: https://datalinks.vn/huong-dan-cai-dat-oracle-linux-7-9-tren-vtbox/

Hoặc Download oracle linux 7.9 file .OVA có sẵn cho máy ảo Virtualbox mà không phải cài đặt:

https://drive.google.com/file/d/1SA3R5UY97qTSYtQGzpaz4LocUAZBBuGt/view?usp=sharing

Các bạn tải về và mở Virtualbox lên sau đó thực hiện Import vào => File => Import …

Cài đặt Oracle database 19c trên Linux ở bên trên:

Xem bài viết này nhé: https://datalinks.vn/cai-dat-oracle-database-19c-tren-linux-install-oracle-database-19c-on-linux/

Cài đặt Oracle database 19c trên Linux | Install oracle database 19c on Linux

Tiếp theo:

SRV1 – là server tôi đặt là Primary

SRV2 – là server tôi đặt là Standby

Chúng ta tạo Data Guard dạng Physical Standby nghĩa là nó sẽ apply Redolog sang Standby từ Primary.

Prim: cài đặt hoàn thiện phần mềm và khởi tạo CSDL oracle database 19c, tên CSDL là duodb

Stand: chỉ cài đặt oracle Software và không tạo DB (chúng ta sẽ clone nó từ Prim)

Đặt tên hostname cho 2 node:

trên SRV1:
hostnamectl set-hostname srv1.localdomain

trên SRV2:
hostnamectl set-hostname srv2.localdomain

Trên cả 2 SRV:

Thêm vào cuối file hosts theo thông tin bên dưới:

vi /etc/hosts

192.168.68.11 srv1.localdomain srv1
192.168.68.12 srv2.localdomain srv2

SERVER PRIM SRV1:

trước khi thực hiện đảm bảo rằng trên SV1 đã cài đặt oracle software và tạo database rồi => thực hiên theo hướng dẫn ở bên trên

Kiểm tra và bật chế độ Archivelog:

su oracle
cd
. .bash_profile
sqlplus / as sysdba
startup
alter system set log_archive_dest_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=both;
select log_mode from v$database;
archive log list;

Nếu chưa bật thì Off database đi khởi động ở mount và bật lên:

shutdown immediate
startup mount
alter database archivelog;
alter database open;

Kiểm tra và bật chế độ Force Logging:

select force_logging from v$database;
alter database force logging;

Check redo log size:

select group#, thread#, bytes/1024/1024 mb from v$log;
select thread#, instance from v$thread ;

SQL> select group#, thread#, bytes/1024/1024 mb from v$log;

GROUP# THREAD# MB

---------- ---------- ----------

1 1 200

2 1 200

3 1 200

Tạo redo log cho standby node, chúng ta nên tạo standby redo logs giống như primary về kích thước file, số lượng group và log file (ở đây là 200MB và 3 logfile):

alter database add standby logfile thread 1 size 200m;
alter database add standby logfile thread 1 size 200m;
alter database add standby logfile thread 1 size 200m;

Kiểm tra kết quả sau khi tạo:

select group#, thread#, sequence#, bytes/1024/1024 mb, archived, status from v$standby_log;
select member from v$logfile where type = 'STANDBY';

Check db_unique_name:

show parameter db_unique_name

Set log_archive_config:

alter system set log_archive_config='DG_CONFIG=(DUODB,STAND)' scope=both;

Set log_archive_dest_2:

alter system set log_archive_dest_2='SERVICE=STAND ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STAND' scope=both;

Set fal_server:

show parameter fal_server ;
alter system set fal_server ='STAND' scope=both;

Set standby_file_management: AUTO

show parameter standby_file_management
alter system set standby_file_management='AUTO' scope=both;

Lấy thông tin đường dẫn: control_files, core_dump_dest, audit_file_dest:

select name, value from v$parameter where upper(value) like upper('%/duodb/%');

Kiểm tra và Enable flashback:

select flashback_on from v$database;
alter database flashback on;

Check the password file:

exit
ls /u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapw*

Tắt firewall trên node:

systemctl stop firewalld.service
systemctl disable firewalld.service

Bật đồng bộ thời gian cho node:

systemctl enable chronyd.service
systemctl restart chronyd.service
systemctl status chronyd
chronyc tracking
chronyc sources
chronyc -a 'burst 4/4'
chronyc -a makestep

Update yum:

yum update -y

Add to tnsnames.ora:

vi /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora

# Thêm nội dung đoạn này vào file:

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

DUODB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = srv1.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = duodb.localdomain)
    )
  )

STAND =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = srv2.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = stand.localdomain)
    )
  )

LISTENER_DUODB =
  (ADDRESS = (PROTOCOL = TCP)(HOST = srv1.localdomain)(PORT = 1521))

Thêm static listener:

vi /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora

# Thêm nội dung đoạn này vào file:

# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = duodb.localdomain)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
      (SID_NAME = duodb)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = srv1.localdomain)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

 

Ghi chú: có thể sử dụng netmgr, netca để tiến hành thiết lập listener và tnsnames cho node.

Tiến hành Reload the listener:

lsnrctl start
lsnrctl status
lsnrctl reload

CẤU HÌNH SERVER STANDBY:

trước khi thực hiện đảm bảo rằng trên SV1 đã cài đặt oracle software rồi => thực hiên theo hướng dẫn ở bên trên

Tắt firewall trên node:

systemctl stop firewalld.service
systemctl disable firewalld.service

Bật đồng bộ thời gian cho node:

systemctl enable chronyd.service
systemctl restart chronyd.service
systemctl status chronyd
chronyc tracking
chronyc sources
chronyc -a 'burst 4/4'
chronyc -a makestep

Update yum:

yum update -y

Tạo thông tin để khởi tạo DB, tên db là giống nhau ở cả 2 db (duodb), thông tin db_unique_name sẽ là khác nhau lần lượt là: DUODB, STAND (server: prim, stand):

Tạo db_name trong file pfile trên server:

Lệnh này sẽ tạo ra pfile tên initstand.ora trong thư mục dbs:

echo 'DB_NAME=DUODB' > $ORACLE_HOME/dbs/initstand.ora

Copy password file từ Prim sang Stand và đổi tên:

Srv2: Thực hiện Copy đúng thông tin file:

scp oracle@srv1:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwduodb /u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwstand

Kiểm tra xem trên Srv2 đã có file orapw hay chưa:

ls -al /u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwstand

SRV2: Copy tnsname.ora file từ Prim sang Stand:

scp oracle@srv1:/u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora

Add listener và reload nó:

vi /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora

# Thêm đoạn sau vào file:

# listener.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = stand.localdomain)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
      (SID_NAME = stand)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = srv2.localdomain)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

Start và Reload Listener:

lsnrctl start
lsnrctl status
lsnrctl reload

Tiến hành tnsping kiểm tra kết nối mạng:

ping srv1
ping srv1.localdomain
ping srv2
ping srv2.localdomain
tnsping duodb
tnsping stand

  • hệ thống hiển thị kết quả ping thành công

Tạo adump folder và oradata:

mkdir -p /u01/app/oracle/admin/STAND/adump
mkdir -p /u01/app/oracle/oradata
mkdir -p /u01/app/oracle/fast_recovery_area

Khởi động Stand DB trong nomount:

Thực hiện gán biến SID thành stand trước khi khởi động: (tên db là chữ thường, phân biệt chữ hoa/thường)

[oracle@srv2 ~]$ export ORACLE_SID=stand

Login vào sqlplus:
sqlplus / as sysdba
startup nomount
exit

DUPLICATE THE DATABASE

prim: DB open

stand: DB nomount

SRV1: Kết nối RMAN vào Prim và Stand cùng lúc: (trên Srv1)

rman TARGET sys/oracle@DUODB AUXILIARY sys/oracle@STAND

Nhân bản (Duplicate the database) DB:

DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER
SPFILE
SET DB_UNIQUE_NAME 'STAND' COMMENT 'Is standby'
SET LOG_ARCHIVE_DEST_2 'SERVICE=DUODB ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DUODB'
SET AUDIT_FILE_DEST '/u01/app/oracle/admin/STAND/adump'
SET CONTROL_FILES '/u01/app/oracle/oradata/STAND/controlfile/control01.ctl'
SET FAL_SERVER 'DUODB'
NOFILENAMECHECK;

  • Duplicate thành công

Kết nối vào Stand để check database: (Srv2)

sqlplus / as sysdba
select database_role from v$database;
show parameter db_name
show parameter db_unique_name

Stand: thực hiện apply redo:

alter database recover managed standby database disconnect from session;

Stand: thực hiện check apply redo:

select role, thread#, sequence#, action from v$dataguard_process;

Prim: thực hiện check apply redo và thực hiện switch logfile check quá trình tạo log:

select sequence#, first_time, next_time from v$archived_log order by sequence#;

alter system switch logfile;

Stand: kiểm tra log mới apply:

select sequence#, first_time, next_time, applied from v$archived_log order by sequence#;

Stand: Stop quá trình recovery process

alter database recover managed standby database cancel;

Stand: Enable flashback on the standby:

select flashback_on from v$database;
alter database flashback on;

Stand: Start the recovery process again on the standby

alter database recover managed standby database disconnect from session;

TEST DATABASE: THỰC HIỆN QUÁ TRÌNH SWITCHOVER VỚI SQLPLUS:

Prim: kiểm tra đồng bộ dữ liệu sẵn sàng thực hiện switchover

sqlplus / as sysdba
alter database switchover to STAND verify;

Prim: Kiểm tra GAPS: no gaps

select status, gap_status from v$archive_dest_status where dest_id = 2;

Prim: thực hiện lê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;

SRV1: check và kiểm tra thông tin:

select database_role from v$database;
select role, thread#, sequence#, action from v$dataguard_process;

  • SRV1 hiện tại đã thành Standby database và SRV2 thành Primary
  • Quá trình thực hiện switchover thành công

TEST DATABASE: THỰC HIỆN SWITCHBACK:

SRV2: verify thông tin sẵn sàng thực hiện switch:

alter database switchover to DUODB verify;

SRV2: thực hiện switchover.

alter database switchover to DUODB;

SRV1: Open database

alter database open;

SRV2: mount database và start recover redo logfile:

startup mount

alter database recover managed standby database disconnect;

SRV2: kiểm tra thông tin sau khi thực hiện switchover

select database_role from v$database;

  • quá trình switchover thành công

TROUBLESHOOTING

set linesize 200 pages 50
col value for a85
col name for a50

select name, value
from gv$parameter
where name in ('db_name','db_unique_name','log_archive_config',   
'log_archive_dest_1','log_archive_dest_2','log_archive_dest_3',
'log_archive_dest_state_1','log_archive_dest_state_2','log_archive_dest_state_3',
'remote_login_passwordfile','log_archive_format','log_archive_max_processes',
'fal_server','fal_client','db_file_name_convert',
'log_file_name_convert', 'standby_file_management')
order by 1;

Chú ý:

Khi bạn insert data vào trong primary mà muốn kiểm tra thông tin trên standy thì sẽ không thể check được do là standby đang ở chế độ mount => như vậy muốn xem được thông tin thì standby phải chuyển sang Open => nhưng nếu Open standby thì rất nguy hiểm vì lúc này nó sẽ không thể là thành phần của data guard nữa => chúng ta chỉ có thể chuyển standby về chế độ Open Read Only là an toàn

Khi bạn mở cơ sở dữ liệu (database) trên server standby (physical standby server), có thể có các trường hợp sau đây tùy thuộc vào chế độ bạn mở nó:

  1. Open ở chế độ read-only (READ ONLY WITH APPLY):
    • Trong trường hợp này, bạn có thể mở database trên standby để đọc dữ liệu nhưng không thể thực hiện các thao tác ghi (INSERT, UPDATE, DELETE). Lúc này, standby server vẫn có thể nhận và áp dụng các redo logs từ primary server để cập nhật dữ liệu.
    • Ảnh hưởng: Không có tác động tiêu cực lên quá trình đồng bộ hóa giữa primary và standby, vì standby vẫn tiếp tục nhận và áp dụng redo logs mà không làm gián đoạn hoạt động của primary server. Bạn có thể dùng standby cho mục đích báo cáo mà không ảnh hưởng đến hoạt động chính của hệ thống.
  2. Open ở chế độ read-write (READ WRITE):
    • Nếu bạn mở standby database ở chế độ read-write, nó sẽ trở thành một cơ sở dữ liệu độc lập (không còn là standby). Việc này sẽ làm ngắt quá trình đồng bộ giữa primary và standby.
    • Ảnh hưởng: Standby server sẽ không còn nhận redo logs từ primary nữa, điều này có thể làm mất tính nhất quán giữa hai server và bạn cần cấu hình lại nếu muốn quay về mô hình standby.

Thông thường, standby database được mở ở chế độ read-only để phục vụ cho mục đích đọc và phân tích dữ liệu, tránh làm gián đoạn quá trình đồng bộ với primary.

Xem thêm bài viết này để chuyển đổi thành Active data guard từ hệ thống data guard thông thường nhé. Primary sẽ dùng để làm data chính, Standby sẽ dùng để khai thác dữ liệu Read Only, hệ thống vẫn đồng bộ dữ liệu bình thường. https://datalinks.vn/oracle-data-guard-convert-physical-standby-thanh-active-data-guard-oracle-19c/

Oracle Data Guard convert Physical standby thành Active data guard Oracle 19c

Chúc các bạn thực hiện thành công!

4.5 2 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận