Oracle Data Guard là một tính năng của hệ thống quản lý cơ sở dữ liệu Oracle Database, được thiết kế để đảm bảo sự sẵn sàng và bảo vệ dữ liệu trong môi trường cơ sở dữ liệu Oracle. Data Guard cung cấp các giải pháp cho việc sao lưu, phục hồi, và chuyển đổi giữa các máy chủ chính (primary) và máy chủ sao lưu (standby)
Cài đặt Oracle Data guard sử dụng Oracle Enterprise Manager cloud control OEM
Có các loại Standby database như sau:
Physical Standby Databases
Standby is identical copy of primary database
• Redo changes
- transported from primary to standby
- applied on standby (Redo Apply)
• Can switch operations to standby
- Planned (switchover / switchback)
- Unplanned (failover)
Logical Standby Databases
• Redo copied from primary to standby
• Changes converted into logical change records (LCR)
• Logical change records applied on standby (SQL Apply)
• Standby database can be opened for updates
- Can modify propagated objects
- Can create new indexes for propagated objects
• May need larger system for logical standby
- LCR apply can be less efficient than redo apply
- Array updates on primary become single row updates on standby
Snapshot Standby Databases
A snapshot standby database is a type of updatable standby database that provides full data protection for a primary database. A snapshot standby database receives and archives, but does not apply, redo data from its primary database. Redo data received from the primary database is applied when a snapshot standby database is converted back into a physical standby database, after discarding all local updates to the snapshot standby database.
Các chế độ bảo vệ dữ liệu:
Download bộ cài Oracle tương ứng tại:
https://edelivery.oracle.com/osdc/faces/SoftwareDelivery
Mục tiêu: Máy chủ nguồn source và máy chủ đích (dự phòng) target
Items | DB HN – primary | DB HCM – standby |
hostname | hn.localdomain | hcm.localdomain |
ip | 192.168.68.11 | 192.168.68.12 |
db name | oradb | oradb |
instance_name | oradb | oradb |
db_unique_name | oradb | oradbs |
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 |
Chi tiết | đã cài đặt oracle database software + khởi tạo database oradb | chỉ cài đặt oracle database software |
OEM server:
- ip: 192.168.68.10
- hostname: oem.localdomain
- Failover: chuyển đổi dự phòng tự động khi mà primary gặp sự cố không thể khôi phục
- Switchover: chuyển đổi chủ động
Máy chủ ở HN là máy chủ primary, HCM là standby database
Chúng ta chuẩn bị 03 server như sau:
S01: server primary ở HN, cài đặt oracle linux và oracle database, đã tạo database rồi
Xem chi tiết cài đặt ở đây: 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
S2: các bạn cài đặt oracle database software only:
Xem chi tiết ở đây: 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
S03: là server OEM đã cài đặt database oracle và OEM rồi => xem ở đây để cài đặt chi tiết:
Hướng dẫn cài đặt Oracle Enterprise Manager Enterprise Manager OEM 13c
TIẾP THEO
Đặt lại hostname cho các node:
## kiểm tra thông tin hostname ## nếu thông tin chưa đúng thì thực hiện lệnh bên dưới đây để đổi hostname nhé, nếu đúng rồi thì bỏ qua bước này ##HN hostnamectl set-hostname hn.localdomain ##HCM hostnamectl set-hostname hcm.localdomain ##OEM hostnamectl set-hostname oem.localdomain
Chỉnh sửa file /etc/hosts trên cả 03 server, thêm vào cuối file hiện tại: thực hiện bằng user root
su - vi /etc/hosts
192.168.68.11 hn.localdomain hn 192.168.68.12 hcm.localdomain hcm 192.168.68.10 oem.localdomain oem
Trên Primary- HN
1. Create Primary Database
2. Setup Primary Database in ARCHIVELOG mode
3. Enable FORCE LOGGING
5. Set DB_UNIQUE_NAME
Bật chế độ archivelog và force logging cho CSDL: user oracle
su oracle cd . .bash_profile sqlplus / as sysdba startup mount select name,log_mode,force_logging from v$database; alter database archivelog; alter database open; alter system switch logfile; alter database force logging; select name,db_unique_name, log_mode,force_logging from v$database;
kiểm tra name, instance name, db unique name, service name của DB
show parameter name
unlock user dbsnmp
alter user dbsnmp account unlock; alter user dbsnmp identified by oracle;
Khởi động lại DB và OS để hệ thống apply thông tin mới
sqlplus / as sysdba shut immediate; exit OS: reboot
Trên cả 2 server HN và HCM:
tạo thư mục để phục vụ add host agent vào trong OEM, bằng user oracle
su oracle cd . .bash_profile mkdir -p /u01/app/oracle/oemagent
cd $ORACLE_HOME/network/admin ls -l
Tạo listener và tnsnames trên cả 3 server => các bạn tự tạo theo thông tin bên dưới hoặc có thể sử dụng netca để tạo cho nhanh, sử dụng user oracle
su oracle cd . .bash_profile netca
hoặc sử dụng thông tin bên dưới copy vào file listener và tnsnames
listener trên primary:
vi $ORACLE_HOME/network/admin/listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hn)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
listener trên standby:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hcm)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
listener trên OEM:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oem)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
TNSnames.ora cho cả 3 host:
vi $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. HN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = hn.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oradb.localdomain) ) ) HCM = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = hcm.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hcm.localdomain) ) ) OEM = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oem.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = duodb.localdomain) ) )
Bật listener trên cả 3 DB
lsnrctl start lsnrctl status
Trên cả 3 host: thực hiện bằng user root
su - cd
Disable firewalld:
systemctl stop firewalld.service systemctl disable firewalld.service
Disable dịch vụ selinux:
vi /etc/selinux/config ## tìm dòng bên dưới và sửa thành disabled SELINUX=disabled
Tiến hành ping kiểm tra kết nối giữa 3 host:
su oracle cd . .bash_profile ping hn -c 5 ping hcm -c 5 ping oem -c 5 tnsping hn tnsping hcm tnsping oem
Bật DB trên DB node 1 primary HN:
su oracle cd . .bash_profile sqlplus / as sysdba startup
Trên server OEM startup database và OMS lên:
su oracle cd . .bash_profile sqlplus / as sysdba startup exit
Tiến hành khởi động OMS:
/u01/app/oracle/oem/bin/emctl start oms
– khi startup oms thì các agent sẽ tự động khởi động => login vào như sau
- https://192.168.68.10:7803/em
- user/pass: sysman/oracle111
Cài đặt OEM Agent vào host HN, HCM
Trên giao diện web OEM thực hiên như sau:
Setup/ Add Target / Add target manually
Chọn Install Agent on Host
Add Manually
Nhập thông tin hostname của 2 host mà chúng ta cần add vào oem như bên dưới, chọn Platform là giống nhau cho cả 2 host nhé Linux x86_64
- hn.localdomain
- hcm.localdomain
Nhập vào thông tin như sau:
Installation Base Directory: /u01/app/oracle/oemagent
Instance Directory: nhấn TAB thì tự động điền
Click vào dấu + để tạo credential cho Named và Root như thông tin hình bên dưới
- user oracle, mk oracle
- user root, mk oracle
và đặt tên tương ứng từng role credential cho dễ nhớ để sử dụng về sau
tương tự đối với root credential:
kiểm tra lại thông tin rồi Next
kiểm tra lại thông tin rồi nhấn Deploy Agent
hệ thống sẽ check thông tin và tiến hành Deploy agent
hệ thống thông báo thành công => chúng ta nhấn Done
Tiếp theo chúng ta sẽ add database instance của HN vào OEM
Setup/ Add target / Add targets Manually
Vào Add using Guided Process
Chọn oracle database, listener….Add
Chọn tìm kiếm trong ô
Chọn node là hn.localdomain => select
Next
kiểm tra thông tin và sửa lại cho đúng
ở đây chúng ta có thể sử dụng user sys với quyền sysdba cũng được nhé, trong hình là đang sử dụng user dbsnmp
Nhấn Configure để đặt lại các tham số cho đúng với thông tin hiện tại
Nhập vào thông tin hiện tại của node HN như bên dưới
- Target name: tên của instance hiển thị trên oem
- target type: database instance
- database system: user hệ thống sử dụng database trên OS
- Listener machine: tên hostname của máy HN, lưu ý nhập cho đúng nhé
Nhấn tiếp Configure ở chỗ Listener để chỉnh sửa thông tin của listener:
Nhấn test connection:
OK để hoàn thành
Next để tiếp tục ra màn hình này nhấn SAVE để lưu lại thông in
Tương tự như vậy chúng ta add listener của node HCM vào oem, vì HCM chưa có database nên chỉ add listener vào trước mà thôi
chọn hcm.localdomain
tới đây chúng ta xem lại thông tin thì nó đang bị sai so với thiết kế ban đầu của chúng ta => chúng ta sẽ sửa lại thông tin như sau:
Vì node HCM chỉ mới cài đặt database software nên chưa có database instance nên chúng ta chỉ có thể add listener vào oem thôi là được nhé
click chọn listener vào ô vuông xanh => configure => nhập lại thông tin cho đúng theo như bên dưới (machine name) sau đó lưu lại thông tin
Anh em chú ý đoạn này làm đúng thông tin ko là nhầm nhé
Nhấn Next để tiếp tục
Save để lưu lại thông tin
như vậy là chúng ta đã hoàn thiện add database instance + listener của HN, listener của HCM vào trong OEM
TIẾP THEO CHÚNG TA SẼ TẠO DATA GUARD CHO HN TRÊN HCM
danh sách liệt kê ra các database instance đã được add vào hệ thống => chúng ta chọn thông tin của oradb.localdomain
chúng ta thấy là Data guard chưa được cấu hình cho HN ở đây
Chúng ta vào cấu hình data guard cho HN
nhập vào thông tin login vào database HN, sử dụng user sys và sysdba cho toàn quyền
chọn thông tin add sau đó Continue
chọn online backup sau đó Next (bước này sẽ thực hiện duplicate online nên anh em đảm bảo đường mạng nhé)
xem lại các thông tin này chuẩn chưa rồi next
Xem lại thông tin tạo standby ở bên dưới, chú ý nếu thông tin không đúng thì chúng ta tiến hành sửa lại thông tin, click vào icon search để thay hostname nếu bị sai:
Kiểm tra các thông tin và xác nhận sau đó Next
sửa lại thông tin unique_name oradbs là của standby, check vào use SYSDBA monitoring… như bên dưới
review lại các thông tin rồi Finish để tiến hành tạo data guard
hệ thống tạo job để thực hiện
vào View job để xem thông tin tiến trình đang chạy
thông báo thực hiện thành công
Check thông tin database:
xem thông tin host
targets/hosts
xem thông tin database
targets/databases
ở đây chúng ta sẽ có 2 database: 1 là database của node HN chúng ta đã add vào từ trước có tên là oradb.localdomain, 2 là database của HCM chính là data guard mà chúng ta đã khởi dựng từ node HN trong oem và có tên là oradbs
Chúng ta xem database nào thì click vào nó nhé, ở đây tôi check thông tin node HN trước
Xem thông tin data guard performance
xem thông tin data guard administration
TEST DỊCH VỤ
Mở Mobaxterm lên thực hiện SSH vào server
login vào HN kiểm tra trạng thái của database
su oracle cd . .bash_profile sqlplus / as sysdba select name, open_mode from v$database;
login vào HCM kiểm tra trạng thái của database:
su oracle cd . .bash_profile sqlplus / as sysdba select name, open_mode from v$database;
=> như vậy là khi data guard đang chạy => primary sẽ là read write còn standby sẽ là mounted, đây là mặc định sau khi dựng hệ thống data guard thành công.
Thêm data vào HN:
Tên HN thực hiện tạo tablespace, user, tabe => sau đó insert data vào để làm dữ liệu test hệ thống:
sqlplus / as sysdba create tablespace DUONG datafile size 100m autoextend on next 10m maxsize unlimited; alter tablespace DUONG add datafile size 100m autoextend on next 10m maxsize unlimited; create user duo identified by oracle default tablespace DUONG temporary tablespace TEMP quota unlimited on DUONG; create table duo.tab (id number, data varchar(100)); alter table duo.tab add primary key (id); select count(*) from duo.tab;
Thực hiện insert data vào bảng
insert into duo.tab values (1,'duo nguyen 1'); insert into duo.tab values (2,'duo nguyen 2'); insert into duo.tab values (3,'duo nguyen 3'); commit;
check data:
set lines 999; select * from duo.tab; select count(*) from duo.tab;
Thực hiện insert thêm data vào bảng:
insert into duo.tab values (4,'duo nguyen 4'); insert into duo.tab values (6,'duo nguyen 6'); insert into duo.tab values (7,'duo nguyen 7'); insert into duo.tab values (8,'duo nguyen 888'); insert into duo.tab values (9,'duo nguyen 999'); insert into duo.tab values (10,'duo nguyen 101010'); insert into duo.tab values (11,'duo nguyen 11111'); insert into duo.tab values (12,'duo nguyen 12'); insert into duo.tab values (13,'duo nguyen 13'); commit;
Kiểm tra thông tin của HN và HCM:
select name, db_unique_name, database_role, switchover_status, open_mode from v$database;
Chúng ta chuyển node HCM đang ở MOUNTED thành READ ONLY để có thể truy vấn thông tin, còn trong mounted thì chúng ta không xem được thông tin:
kiểm tra trạng thái hiện tại:
select open_mode, status,instance_name,database_role from v$instance,v$database; select max(sequence#) from v$archived_log;
Standby- HCM: check status, sau đó huỷ tiến trình đồng bộ redo log MRP, Open database:
select process,status,sequence# from v$managed_standby; alter database recover managed standby database cancel; alter database open; select status,instance_name,database_role,open_mode from v$database,v$instance;
Standby – HCM: thực hiện ACTIVE tiến trình MRP để hệ thống đồng bộ redo log từ Primary:
alter database recover managed standby database disconnect from session; select process,status,sequence# from v$managed_standby; select open_mode, status,instance_name,database_role from v$instance,v$database;
kiểm tra lại trạng thái hiện tại => đã chuyển thành read only
select open_mode, status,instance_name,database_role from v$instance,v$database; select max(sequence#) from v$archived_log;
Kiểm tra thông tin bên HCM standby trên OEM
Targets/databases => chọn database oradbs
sau đó thực hiện như sau để xem thông tin tablespace (nếu chúng ta ko open read only database thì sẽ không xem được thông tin này)
Đã có tablespace DUONG chính là tablespace chúng ta đã tạo ở bên trên trong node HN primary => nó đã được đồng bộ sang HCM standby rồi đó các bạn
Vào Schema kiểm tra user thì đã có thông tin rồi. user DUO chúng ta tạo ở bên trên
Vào table kiểm tra thì có thông tin table đã tạo ở HN primary đã được đồng bộ sang HCM standby, đó chính là table TAB, thuộc user DUO, nằm trong tablespace DUONG
Xem nội dung của table đã có rồi nhé:
=> Như vậy nghĩa là standby đã hoạt động => data từ bên HN primary đã được đồng bộ sang HCM standby
Chúng ta thêm data vào table bên HN primary xem bên HCM standby thay đổi thế nào?
Thực hiện trong Mobaxterm ssh nhé:
insert into duo.tab values (14,'duo nguyen 14'); insert into duo.tab values (15,'duo nguyen 15'); commit;
Xem thông tin thì ngay lập tức dữ liệu được đồng bộ sang HCM standby:
THỰC HIỆN THỦ TỤC SWICHOVER, FAILOVER PRIM <=> STAND VÀ NGƯỢC LẠI:
SWICHOVER: là trường hợp chúng ta chuyển máy chủ HN hiện tại là primary thành standby và HCM hiện tại sẽ thành primary
FAILOVER: là trường hợp máy chủ HN gặp sự cố không thể khôi phục thì hệ thống sẽ thực hiện chuyển HCM standby thành Primary và hoạt động bình thường => sau đó DBA dựng lại hệ thống data guard mới, trong đó HCM giờ đây giữa vai trò là primary
Thực hiện:
vào targets/databases chọn máy Primary
trong cửa sổ hiện ra ta chọn Availability/Data guard administration/ Switchover
hệ thống hỏi xác nhận thông tin: => Countinue
Xác nhận thông tin rồi YES
hệ thống bắt đầu tiến hành thực hiện lệnh
hệ thống thông báo thực hiện switchover thành công
Role của database đã thay đổi:
Chúng ta kiểm tra xem HN và HCM hiện tại đang ở open_mode nào:
sqlplus / as sysdba select open_mode, status,instance_name,database_role from v$instance,v$database;
Thực hiện insert data trên HCM primary rồi check thông tin apply bên HN standby:
insert into duo.tab values (16,'duo nguyen 16'); insert into duo.tab values (17,'duo nguyen 17'); commit;
đã có data trên HN standby hiện tại
Thực hiện Switchback trở lại thì thế nào?
HCM hiện tại là primary sẽ quay về thành standby và ngược lại HN là standby sẽ thành Primary như ban đầu:
Targets/databases/oradbs và thực hiện theo hướng dẫn bên dưới
Availability/ Data guard adminstration/ switchover
Continue
continue
Chọn thông tin như hình và YES
hệ thống bắt đầu thực hiện chuyển đổi
hệ thống thực hiên switchover thành công
Kiểm tra thông tin sau khi switchover, switch back
sqlplus / as sysdba select open_mode, status,instance_name,database_role from v$instance,v$database;
Vậy là chúng ta đã thực hiện thành công bài thực hành này.
Chúc anh em thực hiện tốt bài thực hành này nhé.