Oracle CDC 4 — Lab GoldenGate: Oracle → Oracle

13 thg 7, 2026 3 lượt xem
#oracle
#goldengate
#lab
#extract
#replicat

Giới thiệu

Bài này là một LAB thực hành đầy đủ: replicate dữ liệu từ một database Oracle nguồn sang một database Oracle đích bằng Oracle GoldenGate Microservices Architecture (MA) phiên bản 19c/21c. Chúng ta sử dụng cơ chế Integrated Extract (Extract đọc redo qua LogMiner server bên trong database, không tự phân tích redo file thô) và Integrated/Parallel Replicat bên đích.

Bài viết giả định bạn đã hoàn thành các bước ở Oracle CDC 2 — nghĩa là cả hai database đã bật ARCHIVELOG và đã bật supplemental logging ở mức tối thiểu. Nếu chưa, hãy quay lại làm trước, vì GoldenGate Integrated Extract bắt buộc phải có redo đầy đủ để dựng lại các thao tác DML/DDL.

Toàn bộ lệnh dưới đây là lab step — bạn gõ trong SQL*Plus (Oracle), trong shell Linux, hoặc trong adminclient / GGSCI của GoldenGate. Cú pháp GoldenGate MA có khác so với Classic Architecture cũ; khi không chắc chi tiết của một phiên bản cụ thể, hãy đối chiếu tài liệu chính thức Oracle GoldenGate Microservices Documentation cho đúng release của bạn.

Mô hình lab

  • Nguồn (source): DB ORCLSRC, PDB PDBSRC, schema HR.
  • Đích (target): DB ORCLTGT, PDB PDBTGT, schema HR.
  • Hai deployment GoldenGate riêng: srcdep (bên nguồn) và tgtdep (bên đích). Trong lab đơn giản, cả hai có thể nằm trên cùng một máy, chỉ khác cổng.

Đây là bản dựng để lab/học tập, không phải cấu hình production đã tinh chỉnh (chưa bàn tuning, security TLS đầy đủ, HA của Service Manager, v.v.).


Phần 1 — Chuẩn bị database

1.1 Kiểm tra tiền đề (cả nguồn và đích)

-- Kết nối SYSDBA vào CDB root
SELECT log_mode FROM v$database;                 -- phải là ARCHIVELOG
SELECT supplemental_log_data_min FROM v$database;-- phải là YES (hoặc IMPLICIT)
SELECT force_logging FROM v$database;             -- nên là YES

Nếu SUPPLEMENTAL_LOG_DATA_MIN chưa bật:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SWITCH LOGFILE;

1.2 Bật GoldenGate replication

Tham số ENABLE_GOLDENGATE_REPLICATION phải bật ở cả nguồn và đích để Integrated Extract/Replicat gọi được các API nội bộ (LogMiner server, apply server):

ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE = BOTH;
SHOW PARAMETER ENABLE_GOLDENGATE_REPLICATION;

1.3 Tạo user GoldenGate

Trong môi trường multitenant (CDB/PDB), Extract kết nối vào CDB root nên user quản trị phải là common user (C##). Replicat bên đích kết nối trực tiếp vào PDB nên có thể là user thường trong PDB. Ở đây ta dùng chung tên cho dễ nhớ.

Trên DB nguồn (CDB root):

-- Kết nối: sqlplus sys/password@ORCLSRC as sysdba
CREATE USER c##ggadmin IDENTIFIED BY "GGadmin#2024"
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp
  CONTAINER = ALL;

GRANT DBA TO c##ggadmin CONTAINER = ALL;   -- lab: cấp rộng cho gọn
ALTER USER c##ggadmin SET CONTAINER_DATA = ALL CONTAINER = CURRENT;

-- Cấp quyền GoldenGate qua package chuẩn
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE( -
     grantee => 'C##GGADMIN', -
     privilege_type => 'CAPTURE', -
     grant_select_privileges => TRUE, -
     do_grants => TRUE, -
     container => 'ALL');

Lưu ý cú pháp: trong SQL*Plus, ký tự nối dòng cho một câu lệnh PL/SQL là dấu - ở cuối dòng. Nếu bạn gõ một dòng thì bỏ các dấu -.

Trên DB đích (kết nối vào PDBTGT):

-- sqlplus sys/password@PDBTGT as sysdba
CREATE USER ggadmin IDENTIFIED BY "GGadmin#2024"
  DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT DBA TO ggadmin;   -- lab

EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE( -
     grantee => 'GGADMIN', -
     privilege_type => 'APPLY', -
     grant_select_privileges => TRUE, -
     do_grants => TRUE);

privilege_type => 'CAPTURE' cấp quyền cho Extract; 'APPLY' cấp quyền cho Replicat; dùng '*' để cấp cả hai. Package DBMS_GOLDENGATE_AUTH là cách được Oracle khuyến nghị thay cho việc GRANT từng quyền thủ công.

1.4 Bật supplemental logging ở mức bảng (nguồn)

Ngoài mức database tối thiểu, GoldenGate cần schema/table-level supplemental logging cho các bảng được capture. Việc này sẽ làm bằng lệnh ADD SCHEMATRANDATA trong GoldenGate (mục 3.4), nhưng bạn cũng có thể chuẩn bị schema HR với vài bảng test:

-- Trên PDBSRC
CREATE TABLE hr.employees_cdc (
  emp_id   NUMBER PRIMARY KEY,
  emp_name VARCHAR2(100),
  salary   NUMBER,
  updated  DATE DEFAULT SYSDATE
);

Tạo bảng tương ứng bên PDBTGT với cùng cấu trúc để Replicat có đích ánh xạ.


Phần 2 — Cài đặt GoldenGate Microservices

2.1 Cài phần mềm

Có hai cách phổ biến để dựng cho lab:

  1. OUI silent + response file: giải nén bộ cài fbo_ggs_Linux_x64_services_shiphome, rồi chạy trình cài đặt ở chế độ silent.
  2. Container image: dùng image GoldenGate đã có sẵn (nếu bạn theo hướng container).

Ví dụ cài silent bằng response file:

# Giải nén bộ cài
cd /home/oracle/soft
unzip -q V*.zip
cd fbo_ggs_Linux_x64_services_shiphome/Disk1

# Chạy OUI silent với response file mẫu (điều chỉnh biến trong file trước)
./runInstaller -silent -nowait \
  -responseFile /home/oracle/soft/oggcore.rsp \
  INSTALL_OPTION=ORA21c \
  SOFTWARE_LOCATION=/u01/app/ogg/21c

Trong oggcore.rsp bạn khai SOFTWARE_LOCATION (OGG_HOME) và INSTALL_OPTION tương ứng phiên bản DB (ORA19c, ORA21c...). Chi tiết các biến response file thay đổi theo release — hãy đối chiếu tài liệu cài đặt của đúng version.

2.2 Tạo Service Manager và Deployment

GoldenGate MA gồm Service Manager (điều phối) và một hay nhiều deployment, mỗi deployment chứa các microservice: Administration Service, Distribution Service, Receiver Service, Performance Metrics Service.

Dùng công cụ oggca.sh (GoldenGate Configuration Assistant) — có GUI, nhưng cũng chạy được silent bằng response file:

export OGG_HOME=/u01/app/ogg/21c
$OGG_HOME/bin/oggca.sh -silent \
  -responseFile /home/oracle/soft/srcdep.rsp

Trong response file của oggca bạn khai:

  • Tên Service Manager, cổng (vd 9100), có đăng ký như dịch vụ systemd không.
  • Tên deployment (srcdep), thư mục OGG_DATA_HOME / DEPLOYMENT_HOME.
  • Cổng của Administration/Distribution/Receiver/Metrics service.
  • Tài khoản admin của deployment (vd oggadmin + mật khẩu) — khác với user DB.

Lặp lại để tạo deployment thứ hai tgtdep (cổng khác) cho bên đích.

2.3 Truy cập

  • Web UI: mở trình duyệt tới https://<host>:<adminport> của deployment, đăng nhập bằng tài khoản deployment (vd oggadmin).
  • adminclient (CLI): công cụ dòng lệnh thay cho GGSCI trong MA.
export OGG_HOME=/u01/app/ogg/21c
$OGG_HOME/bin/adminclient

Trong prompt OGG>, kết nối vào Administration Service của deployment nguồn:

OGG (not connected) 1> CONNECT https://localhost:9101 DEPLOYMENT srcdep AS oggadmin PASSWORD ***** !

Cờ ! ở cuối bỏ qua kiểm tra chứng chỉ TLS tự ký (chỉ nên dùng trong lab).


Phần 3 — Cấu hình Extract (bên nguồn)

3.1 Tạo Credential Store và alias

GoldenGate MA không lưu USERID/mật khẩu thẳng trong param file mà dùng credential store với alias. Trong adminclient đã connect tới srcdep:

OGG (srcdep) 2> ADD CREDENTIALSTORE
OGG (srcdep) 3> ALTER CREDENTIALSTORE ADD USER c##ggadmin@ORCLSRC PASSWORD GGadmin#2024 ALIAS ggsrc DOMAIN OracleGoldenGate
OGG (srcdep) 4> INFO CREDENTIALSTORE

c##ggadmin@ORCLSRC dùng chuỗi kết nối tới CDB root (net service name ORCLSRC trỏ vào CDB, không phải PDB), vì Integrated Extract kết nối ở root. Kiểm tra kết nối:

OGG (srcdep) 5> DBLOGIN USERIDALIAS ggsrc
Successfully logged into database CDB$ROOT.

3.2 Bật schema-level supplemental logging cho bảng nguồn

Sau khi DBLOGIN vào root, chọn PDB rồi bật trandata:

OGG (srcdep as c##ggadmin@ORCLSRC/CDB$ROOT) 6> DBLOGIN USERIDALIAS ggsrc
OGG (srcdep) 7> ADD SCHEMATRANDATA PDBSRC.HR ALLCOLS
OGG (srcdep) 8> INFO SCHEMATRANDATA PDBSRC.HR
  • ADD SCHEMATRANDATA bật supplemental logging cho tất cả bảng trong schema (kể cả bảng tạo sau này).
  • ALLCOLS ghi bổ sung mọi cột — tiện cho lab (đảm bảo Replicat có đủ dữ liệu); production thường chỉ cần key columns.
  • Với bảng lẻ, dùng ADD TRANDATA PDBSRC.HR.EMPLOYEES_CDC.

3.3 Register Integrated Extract

Integrated Extract phải được đăng ký với database (tạo một capture/LogMiner process nội bộ) trước khi add:

OGG (srcdep) 9> DBLOGIN USERIDALIAS ggsrc
OGG (srcdep) 10> REGISTER EXTRACT EXTHR DATABASE CONTAINER (PDBSRC)

Lệnh này trả về một SCN — ghi nhớ; đó là SCN bắt đầu capture. Với multitenant, CONTAINER (PDBSRC) giới hạn capture trong PDB nguồn.

3.4 Tạo Extract và trail

OGG (srcdep) 11> ADD EXTRACT EXTHR, INTEGRATED TRANLOG, BEGIN NOW
OGG (srcdep) 12> ADD EXTTRAIL ea, EXTRACT EXTHR, MEGABYTES 100
  • INTEGRATED TRANLOG = Integrated Extract (khác TRANLOG của classic capture).
  • EXTTRAIL ea = local trail 2 ký tự tên (ea) đặt trong DEPLOYMENT_HOME/var/lib/data.
  • Trail sẽ tự đánh số: ea000000000, ea000000001...

3.5 Param file của Extract

Trong MA, param file được sửa qua Web UI hoặc bằng lệnh EDIT PARAMS:

OGG (srcdep) 13> EDIT PARAMS EXTHR

Nội dung param file EXTHR:

EXTRACT EXTHR
USERIDALIAS ggsrc DOMAIN OracleGoldenGate
-- ghi log source timestamp để tính LAG chính xác
TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 256)
-- capture DDL
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
-- trail đích của extract
EXTTRAIL ea
-- bảng cần capture (schema.* trong PDB)
SOURCECATALOG PDBSRC
TABLE HR.*;

Ghi chú:

  • SOURCECATALOG PDBSRC khai PDB làm catalog mặc định, nên TABLE HR.* được hiểu là PDBSRC.HR.*.
  • DDL INCLUDE MAPPED capture cả thay đổi cấu trúc bảng đã map (tùy nhu cầu).
  • INTEGRATEDPARAMS truyền tham số cho LogMiner server; MAX_SGA_SIZE ví dụ.

3.6 Khởi động Extract

OGG (srcdep) 14> START EXTRACT EXTHR
OGG (srcdep) 15> INFO EXTRACT EXTHR DETAIL
OGG (srcdep) 16> STATS EXTRACT EXTHR

INFO ... DETAIL cho thấy trạng thái RUNNING, trail đang ghi, và SCN checkpoint.


Phần 4 — Distribution Path (đẩy trail sang đích)

Trong MA, việc chuyển trail giữa hai deployment do Distribution Service đảm nhận qua một Distribution Path. (Nếu Extract và Replicat cùng một deployment, Replicat đọc trực tiếp local trail và bạn có thể bỏ qua phần này.)

4.1 Chuẩn bị credential nhận ở đích

Bên deployment đích cần một user để Receiver Service xác thực. Cách gọn nhất là tạo target-initiated path hoặc dùng user deployment. Trong lab, ta tạo một distribution path push từ srcdep sang tgtdep.

4.2 Tạo path bằng adminclient

Vẫn trong adminclient đã connect srcdep:

OGG (srcdep) 17> ADD DISTPATH phr, SOURCE ea, TARGET wss://<targethost>:9111/services/v2/targets?trail=ra
OGG (srcdep) 18> ALTER DISTPATH phr, TARGETAUTH ALIAS tgtrcv DOMAIN OracleGoldenGate
OGG (srcdep) 19> START DISTPATH phr
OGG (srcdep) 20> INFO DISTPATH phr
  • SOURCE ea = local trail của Extract.
  • TARGET wss://.../targets?trail=ra = URL của Receiver Service bên tgtdep, trail đích tên ra (remote trail).
  • tgtrcv là alias credential (đã ALTER CREDENTIALSTORE ADD USER oggadmin@... ALIAS tgtrcv) dùng để xác thực với deployment đích.

Trong Web UI, việc này tương đương với: Distribution Service → Add Path → chọn source trail, target host/port, protocol (wss/ws/ogg), và trail đích. UI thường dễ hơn để tránh gõ sai URL. Cú pháp ADD DISTPATH khác nhau nhẹ giữa các release — kiểm tra tài liệu Distribution Service của version bạn dùng.

Sau khi path chạy, bên tgtdep sẽ xuất hiện remote trail ra000000000... trong DEPLOYMENT_HOME/var/lib/data.


Phần 5 — Cấu hình Replicat (bên đích)

Mở một phiên adminclient mới (hoặc CONNECT lại) tới deployment đích:

OGG (not connected) 1> CONNECT https://localhost:9111 DEPLOYMENT tgtdep AS oggadmin PASSWORD ***** !

5.1 Credential store bên đích

OGG (tgtdep) 2> ADD CREDENTIALSTORE
OGG (tgtdep) 3> ALTER CREDENTIALSTORE ADD USER ggadmin@PDBTGT PASSWORD GGadmin#2024 ALIAS ggtgt DOMAIN OracleGoldenGate
OGG (tgtdep) 4> DBLOGIN USERIDALIAS ggtgt

Replicat kết nối trực tiếp vào PDB đích (PDBTGT), không phải root.

5.2 Tạo checkpoint table (khuyến nghị)

Checkpoint table giúp Replicat lưu tiến độ giao dịch một cách an toàn:

OGG (tgtdep) 5> ADD CHECKPOINTTABLE ggadmin.ggcheckpoint

5.3 Tạo Replicat

Dùng Parallel Replicat (khuyến nghị cho 19c/21c) hoặc Integrated Replicat:

-- Parallel Replicat (đọc remote trail 'ra')
OGG (tgtdep) 6> ADD REPLICAT REPHR, PARALLEL, EXTTRAIL ra, CHECKPOINTTABLE ggadmin.ggcheckpoint

Nếu muốn Integrated Replicat:

OGG (tgtdep) 6b> ADD REPLICAT REPHR, INTEGRATED, EXTTRAIL ra

5.4 Param file của Replicat

OGG (tgtdep) 7> EDIT PARAMS REPHR

Nội dung param file REPHR:

REPLICAT REPHR
USERIDALIAS ggtgt DOMAIN OracleGoldenGate
-- xử lý va chạm/lỗi ghi report thay vì abend ngay (tùy chọn lab)
DDL INCLUDE MAPPED
DDLERROR DEFAULT IGNORE
-- ánh xạ nguồn -> đích
MAP PDBSRC.HR.*, TARGET PDBTGT.HR.*;

Với Parallel Replicat bạn có thể thêm khối cấu hình song song trong Web UI (số apply threads, split by transaction). Trong lab, mặc định là đủ.

5.5 Khởi động Replicat

OGG (tgtdep) 8> START REPLICAT REPHR
OGG (tgtdep) 9> INFO REPLICAT REPHR DETAIL
OGG (tgtdep) 10> STATS REPLICAT REPHR

Phần 6 — Kiểm thử replication

6.1 Sinh DML bên nguồn

-- Trên PDBSRC, kết nối HR
INSERT INTO hr.employees_cdc (emp_id, emp_name, salary)
VALUES (1, 'Nguyen Van A', 1500);
INSERT INTO hr.employees_cdc (emp_id, emp_name, salary)
VALUES (2, 'Tran Thi B', 2200);
COMMIT;

UPDATE hr.employees_cdc SET salary = 1800 WHERE emp_id = 1;
COMMIT;

DELETE FROM hr.employees_cdc WHERE emp_id = 2;
COMMIT;

6.2 Kiểm tra bên đích

-- Trên PDBTGT
SELECT emp_id, emp_name, salary FROM hr.employees_cdc ORDER BY emp_id;
-- Kỳ vọng: chỉ còn emp_id = 1 với salary = 1800

6.3 Giám sát trên GoldenGate

-- bên srcdep
OGG (srcdep)> INFO ALL
OGG (srcdep)> STATS EXTRACT EXTHR, TOTAL
OGG (srcdep)> LAG EXTRACT EXTHR

-- bên tgtdep
OGG (tgtdep)> INFO ALL
OGG (tgtdep)> STATS REPLICAT REPHR, TOTAL
OGG (tgtdep)> LAG REPLICAT REPHR
  • INFO ALL liệt kê mọi process với trạng thái (RUNNING/STOPPED/ABENDED), lag và thời gian checkpoint gần nhất.
  • STATS ... TOTAL cho biết số insert/update/delete đã xử lý cho từng bảng — đối chiếu với DML bạn vừa chạy.
  • LAG cho biết độ trễ hiện tại.

Nếu số liệu STATS khớp và bảng đích đúng kết quả, replication đã hoạt động.


Phần 7 — Xử lý lỗi thường gặp

7.1 Thiếu supplemental logging

Triệu chứng: Replicat abend với lỗi không tìm được row để update/delete, hoặc Extract cảnh báo về key columns. Kiểm tra và sửa:

OGG (srcdep)> DBLOGIN USERIDALIAS ggsrc
OGG (srcdep)> INFO SCHEMATRANDATA PDBSRC.HR
OGG (srcdep)> ADD SCHEMATRANDATA PDBSRC.HR ALLCOLS

Lưu ý: bật trandata chỉ có hiệu lực cho các giao dịch sau thời điểm bật, nên DML cũ chưa có supplemental data.

7.2 Lỗi credential / DBLOGIN

Triệu chứng: DBLOGIN báo ORA-01017: invalid username/password hoặc alias không tồn tại.

OGG (srcdep)> INFO CREDENTIALSTORE
OGG (srcdep)> ALTER CREDENTIALSTORE ADD USER c##ggadmin@ORCLSRC PASSWORD <newpass> ALIAS ggsrc DOMAIN OracleGoldenGate

Kiểm tra thêm: net service name (ORCLSRC) có trong tnsnames.ora mà GoldenGate dùng (biến TNS_ADMIN trong deployment), và Extract đang trỏ đúng CDB root.

7.3 Extract không register được

Triệu chứng: REGISTER EXTRACT báo lỗi thiếu quyền hoặc ENABLE_GOLDENGATE_REPLICATION chưa bật.

SHOW PARAMETER ENABLE_GOLDENGATE_REPLICATION;   -- phải TRUE
-- cấp lại quyền CAPTURE nếu cần
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('C##GGADMIN','CAPTURE',TRUE,TRUE, container=>'ALL');

7.4 Replicat ABENDED vì ORA lỗi ghi

Ví dụ ORA-00001: unique constraint (trùng khóa) khi replay lại một transaction đã áp dụng. Xem chi tiết trong report filediscard file:

# report file của process (trong DEPLOYMENT_HOME/var/log của tgtdep)
ls -l /u01/.../tgtdep/var/log/
# hoặc xem qua adminclient:
OGG (tgtdep)> VIEW REPORT REPHR
OGG (tgtdep)> INFO REPLICAT REPHR DETAIL

Cấu hình discard file trong param Replicat để không mất bản ghi lỗi:

DISCARDFILE ./dirrpt/rephr.dsc, APPEND, MEGABYTES 50
REPERROR (DEFAULT, DISCARD)

REPERROR (DEFAULT, DISCARD) cho Replicat ghi bản ghi lỗi vào discard file và tiếp tục, thay vì abend — hữu ích khi debug lab. Sau khi tìm ra nguyên nhân, gỡ bỏ để trở lại hành vi an toàn (abend khi có lỗi).

7.5 Distribution Path không kết nối

Triệu chứng: path ở trạng thái không chạy, Receiver Service báo lỗi xác thực hoặc network.

  • Kiểm tra cổng của Receiver Service bên đích mở và đúng URL trong TARGET.
  • Kiểm tra alias TARGETAUTH khớp với user deployment đích.
  • Trong lab dùng ws:// (không TLS) cho đơn giản nếu chưa cấu hình chứng chỉ; production nên dùng wss://.

Tóm tắt

Bạn vừa dựng một pipeline CDC Oracle→Oracle hoàn chỉnh bằng GoldenGate Microservices: chuẩn bị database (ARCHIVELOG, supplemental logging, ENABLE_GOLDENGATE_REPLICATION, user C##GGADMIN với DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE); cài phần mềm và tạo Service Manager

  • deployment; tạo credential store; REGISTER + ADD Integrated Extract, bật SCHEMATRANDATA, ghi trail ea; đẩy trail qua Distribution Path sang remote trail ra; và ADD Parallel/Integrated Replicat apply vào PDB đích. Việc kiểm thử dựa vào DML thực tế cộng với INFO ALL, STATS, LAG, và khi có sự cố thì đọc report/discard file. Luôn đối chiếu cú pháp chi tiết với tài liệu chính thức của đúng release GoldenGate bạn triển khai.

Tự kiểm tra

  1. Vì sao Integrated Extract trong môi trường multitenant phải kết nối vào CDB root thay vì PDB?
  2. ADD SCHEMATRANDATA khác ADD TRANDATA ở điểm nào, và tại sao lab dùng ALLCOLS?
  3. Lệnh nào cần chạy trước ADD EXTRACT ... INTEGRATED TRANLOG và nó trả về giá trị gì quan trọng?
  4. Distribution Path chuyển dữ liệu giữa hai thành phần nào, và trail nguồn/đích tương ứng là gì trong lab?
  5. Khi Replicat ABENDEDORA-00001, bạn xem những file/lệnh nào để chẩn đoán và tùy chọn param nào giúp bỏ qua bản ghi lỗi khi debug?
  6. Hai tham số database nào phải bật ở cả nguồn và đích để Integrated Extract/Replicat hoạt động?

Đọc tiếp

Oracle CDC 5 — GoldenGate → Kafka

Bài viết liên quan

CSV/JSON/Parquet/Avro, lưu trữ theo hàng vs cột, nén, và OLTP vs OLAP.

13 thg 7, 2026 8

Data Engineering là gì, vai trò trong vòng đời dữ liệu, và bức tranh hệ sinh thái công cụ.

13 thg 7, 2026 5

Vì sao xử lý phân tán, mô hình Spark (RDD/DataFrame), lazy evaluation, shuffle và tối ưu.

13 thg 7, 2026 5

Đảm bảo chất lượng & minh bạch dữ liệu bằng dbt: data tests dựng sẵn (unique, not_null, relationships, accepted_values), singular test, unit test, và tài liệu tự sinh kèm lineage graph.

13 thg 7, 2026 5