RUNBOOK TRIỂN KHAI MIGRATION ORACLE → POSTGRESQL |
Low-downtime / one-way CDC
1 PHẠM VI, VAI TRÒ VÀ CỔNG KIỂM SOÁT
|
Pha |
Công việc |
Chủ trì |
Đầu ra bắt buộc |
Exit / Gate |
|
P0 |
Khởi động & thiết kế |
PM/Architect |
Scope, inventory app, downtime, RTO/RPO, security, support matrix,
RACI |
G0: Charter + RACI + CAB duyệt |
|
P1 |
Khảo sát nguồn |
Oracle DBA/App |
Assessment, dependency, data profile, SQL/PLSQL, workload baseline |
G1: Không còn đối tượng chưa phân loại |
|
P2 |
Dựng PostgreSQL |
PG DBA/Infra |
HA, backup/PITR, monitoring, security, capacity, extensions |
G2: Restore/HA/failover thử đạt |
|
P3 |
Chuyển đổi |
DB Dev/App |
Schema, data type, PL/pgSQL, SQL ứng dụng, driver/ORM |
G3: Compile 100%; unit test critical 100% |
|
P4 |
Tải nền |
Migration DBA |
Snapshot S0, COPY parallel, post-load index/FK/statistics/sequence |
G4: Row/hash/control-total đạt |
|
P5 |
Kiểm thử |
QA/Business/SRE |
Functional, reconciliation, performance, security, HA/DR, rollback
rehearsal |
G5: UAT + performance + rollback ký |
|
P6 |
CDC & cutover |
GG DBA/Change Mgr |
Catch-up, write freeze, final reconcile, connection switch |
G6: Go/No-Go; owner ký từng gate |
|
P7 |
Hypercare/đóng |
Ops/Owners |
Theo dõi, backup, tuning, decommission sau retention |
G7: Nghiệm thu + PIR + handover |
2 KHẢO SÁT ORACLE — CHẠY READ-ONLY, LƯU SPOOL LÀM BẰNG CHỨNG
|
Miền |
Câu lệnh / nguồn |
Bằng chứng và quyết định phải chốt |
|
Nền tảng |
select banner_full from v$version;
select db_unique_name,open_mode,log_mode,force_logging,current_scn from
v$database; |
Version/edition/options; CDB/PDB/RAC/DG; charset/timezone; archive
retention; size & growth 12 tháng |
|
Dung lượng/khối lượng |
select
owner,segment_type,round(sum(bytes)/1024/1024/1024,2) gb,count(*) n from
dba_segments where owner in (<SCHEMAS>) group by owner,segment_type; |
Top tables/LOB/partitions; rows; daily DML/redo; cửa sổ batch; băng
thông; ETA tải |
|
Đối tượng/phụ thuộc |
select
owner,object_type,status,count(*) from dba_objects where owner in
(<SCHEMAS>) group by owner,object_type,status; |
TABLE/VIEW/MVIEW/SEQ/INDEX/TRIGGER/TYPE/SYNONYM/DBLINK/DIRECTORY/JOB/AQ;
invalid & dependency graph |
|
Khóa & CDC |
select t.owner,t.table_name from
dba_tables t where t.owner in (<SCHEMAS>) and not exists (select 1 from
dba_constraints c where c.owner=t.owner and c.table_name=t.table_name and
c.constraint_type='P'); |
PK/UK dùng định danh; keyless → thiết kế KEYCOLS/khóa; kiểu không hỗ
trợ, LOB, LONG, XMLTYPE, UDT, Spatial |
|
PL/SQL & tính năng Oracle |
select owner,type,name,line,text from
dba_source where owner in (<SCHEMAS>) order by owner,type,name,line; |
PACKAGE/state, autonomous txn, DBMS_*, cursor, dynamic SQL, bulk
collect, pipelined, AQ, scheduler, hints, CONNECT BY |
|
Workload/app |
AWR/ASH/Statspack + listener/app logs;
inventory JDBC/ODP.NET/ORM, pool, SQL literals/binds, txn/isolation,
batch/API |
Baseline TPS/QPS, p50/p95/p99, top SQL/waits, concurrency; NULL/empty
string, case-folding, DATE/timezone, sequence semantics |
|
Ora2Pg assessment |
|
|
GO / NO-GO G1 |
GO khi 100%
object và bảng được phân loại {AUTO | MANUAL | REDESIGN | EXCLUDE}; có
owner/ETA; mọi bảng CDC có khóa xác định; flashback/redo/trail retention >
thời gian full load + buffer; phiên bản Oracle–OGG–PostgreSQL–OS nằm trong ma
trận hỗ trợ. Còn UDT/LOB/keyless/chức năng Oracle chưa có phương án = NO-GO. |
3 DỰNG POSTGRESQL ĐÍCH VÀ CHUẨN BỊ
TRIỂN KHAI
|
Nhóm |
Tiêu chuẩn hoàn thành |
|
Nền tảng |
Chọn PostgreSQL version/LTS theo chính sách; HA 2–3 node; load
balancer/VIP; đồng bộ thời gian; storage IOPS/latency; capacity ≥ data +
index + WAL + 30–40% headroom. |
|
An toàn |
TLS, pg_hba.conf allowlist, SCRAM, role tách
owner/runtime/readonly/migration/monitor; secret store; audit theo yêu cầu;
mã hóa backup; không dùng superuser cho app. |
|
Khả dụng |
Base backup + WAL archive/PITR; retention phủ toàn cutover/hypercare;
restore thử; replica lag alert; diễn tập switchover/failover và xác nhận
connection retry. |
|
Vận hành |
Prometheus/Grafana hoặc công cụ chuẩn; alert
CPU/RAM/disk/WAL/replication/locks/connections/autovacuum;
pg_stat_statements; log_min_duration_statement; runbook incident. |
|
Thông số |
Đo rồi chỉnh: shared_buffers, effective_cache_size, work_mem ×
concurrency, maintenance_work_mem, max_connections + pooler, wal_level,
max_wal_size, checkpoint_timeout, autovacuum. Không sao chép tham số Oracle. |
|
Tiện ích |
Chỉ cài extension đã duyệt (ví dụ pg_stat_statements, pgcrypto,
uuid-ossp, PostGIS/oracle_fdw nếu thật sự cần); pin version; kiểm tra
license/security/backup compatibility. |
4 CHUYỂN SCHEMA VÀ PL/SQL — TRIỂN
KHAI LẶP, LUÔN CHẠY TỪ SOURCE CONTROL
Lệnh mẫu — xác nhận lại option theo Ora2Pg version đã pin |
|
Oracle |
PostgreSQL gợi ý |
Quy tắc ra quyết định |
|
|
VARCHAR2/NVARCHAR2/CHAR |
varchar/text/char |
Kiểm tra BYTE vs CHAR, collation, trailing spaces, empty string:
Oracle '' = NULL; PostgreSQL '' ≠ NULL. |
|
|
NUMBER(p,0) |
smallint/int/bigint/numeric |
Chọn theo range thực tế; không ép NUMBER không precision thành bigint
nếu có scale/overflow. |
|
|
NUMBER(p,s)/FLOAT |
numeric(p,s)/double precision |
numeric chính xác cho tiền; floating có sai số — đối soát với
tolerance được phê duyệt. |
|
|
DATE |
timestamp(0) without time zone |
Oracle DATE có cả giờ; chỉ dùng date khi chứng minh phần thời gian
luôn 00:00:00. |
|
|
TIMESTAMP WITH TZ |
timestamptz |
PostgreSQL lưu instant, hiển thị theo session timezone; kiểm thử DST
và client timezone. |
|
|
CLOB/NCLOB/BLOB/RAW |
text/bytea |
Profile max/avg; kiểm tra NUL, encoding, checksum byte; OGG LOB
support/size theo release. |
|
|
LONG/LONG RAW/XMLTYPE/UDT/Spatial |
text/bytea/xml/jsonb/composite/PostGIS |
Không chuyển máy móc; redesign và test riêng. GTT/package state/DB
link/AQ cần pattern thay thế. |
|
|
SEQUENCE/IDENTITY |
sequence/generated identity |
Giữ cache/ordering nếu business cần; setval sau full load và ngay trước
mở ghi. |
|
|
Chủ đề |
Cách xử lý và tiêu chí review |
||
|
PACKAGE |
Tách thành function/procedure trong schema; state package → bảng/session
context/app cache; đặc tả public → API contract. |
||
|
EXCEPTION/transaction |
Map SQLSTATE; không COMMIT/ROLLBACK tùy tiện trong function; PRAGMA
AUTONOMOUS_TRANSACTION → queue/dblink/service riêng có kiểm soát. |
||
|
SQL khác biệt |
NVL→coalesce; DECODE→case; SYSDATE→clock_timestamp/current_timestamp
theo semantics; ROWNUM→limit/window; (+)→ANSI join; MERGE/CONNECT BY phải kiểm
thử. |
||
|
Bulk/dynamic/cursor |
BULK COLLECT/FORALL → set-based/COPY; EXECUTE IMMEDIATE → EXECUTE
format(...), quote_identifier/literal; REF CURSOR/API contract cần regression
test. |
||
|
Job/DBMS/AQ/DB link |
Chuyển sang pg_cron/enterprise scheduler, extension hoặc service; ghi
rõ retry/idempotency/transaction/alert. Không giữ stub “compile được nhưng
sai nghiệp vụ”. |
||
5 TẢI DỮ LIỆU NỀN NHẤT QUÁN TẠI S0
|
Bước |
Thực hiện / bằng chứng |
|
1. Chốt S0 |
Freeze DDL; GoldenGate đã REGISTER trước. Lấy S0 > registration
SCN; giữ redo/archive/trail. Dùng một SCN cho toàn snapshot; ghi SCN, UTC
time, config hash, table list. |
|
2. Export/Load |
ora2pg -c <conf> -t COPY --scn <S0> -P
<parallel_tables> -J <parallel_jobs> -o data.sql; load theo nhóm
dung lượng. Replicat CDC vẫn STOP, Extract RUNNING. |
|
3. Tối ưu an toàn |
Tải vào bảng chưa có FK/secondary index/trigger business; không tắt
durability trên PROD nếu không có phê duyệt/rủi ro được chấp nhận; log từng
table rows/bytes/start/end/error. |
|
4. Hậu tải |
Tạo PK/UK → index → FK/check → view/mview → trigger → grant; ANALYZE;
kiểm tra invalid; setval sequence ≥ max(key); bật lại job/trigger theo lịch
cutover, không bật sớm. |
|
5. Đối soát |
100% bảng: row count; bảng tài chính/critical:
SUM/MIN/MAX/null/duplicate + hash theo chunk/PK; LOB: byte length/checksum; mọi
mismatch có ticket và disposition. |
|
GO / NO-GO G4 |
GO khi load
không lỗi, object compile hợp lệ, sequence đúng, đối soát đạt ngưỡng đã ký và
PostgreSQL còn đủ dung lượng/WAL. Không dùng HANDLECOLLISIONS để che lỗi
instantiation; mọi duplicate/missing row phải tìm được nguyên nhân. |
6 KIỂM THỬ VÀ CHUẨN CHẤT LƯỢNG
|
Lớp |
Tiêu chí pass bắt buộc |
|
Schema |
So count/DDL/dependency/owner/grant/default/nullability/PK-UK-FK-check/index/partition/view/trigger/sequence;
0 lỗi apply, 0 object “chưa quyết định”. |
|
Dữ liệu |
Row count 100% bảng; control totals critical 100%; hash chunk; LOB
checksum; timezone/Unicode/null-empty/precision; sai lệch cho phép = <TBD,
mặc định 0 với dữ liệu nghiệp vụ>. |
|
Chức năng |
Unit PL/pgSQL + API/integration/E2E + batch/report;
positive/negative/idempotency/concurrency/deadlock/retry; 100% P0/P1 pass,
không còn Sev1/Sev2. |
|
Hiệu năng |
Replay workload; TPS/QPS, p95/p99, CPU/IO/WAL/locks/connections; mục
tiêu <TBD> (gợi ý p95 không xấu hơn 10%, throughput ≥ baseline);
EXPLAIN ANALYZE top SQL. |
|
Phi chức năng |
TLS/RBAC/audit/vulnerability; backup/PITR restore; HA failover; monitoring/alert/on-call;
connection failover; capacity soak ≥ <TBD> giờ; rollback rehearsal có
biên bản. |
7 GOLDENGATE CDC ORACLE → POSTGRESQL
|
Điều kiện & instantiation |
Oracle source / Extract |
PostgreSQL target / Replicat / monitor |
|
Prereq & boundary |
SQL> ALTER DATABASE ADD SUPPLEMENTAL
LOG DATA; |
OGG> DBLOGIN USERIDALIAS pg_tgt |
8 KỊCH BẢN CUTOVER VÀ ROLLBACK
|
Mốc |
Hành động / điều kiện |
|
T−7d → T−24h |
CAB/war-room/on-call; backup Oracle+PG+OGG config; restore test; UAT
sign; dry-run; freeze DDL; pre-stage app config/secret; xác nhận rollback
authority. |
|
T−2h |
Health check Oracle/PG/OGG/network/storage; Replicat catch-up; đối
soát; pause batch/job; thông báo; Go/No-Go #1. Trigger rollback nếu
prerequisite fail hoặc ETA vượt cửa sổ. |
|
T0 |
Đóng/readonly ingress; chờ transaction active = 0; ghi SCN/CSN;
Extract/Replicat lag = 0; final reconcile; stop writer Oracle;
backup/checkpoint; Go/No-Go #2. |
|
T+ |
Set sequence; bật trigger/job PG theo thứ tự; đổi DSN/service; canary
→ tăng traffic; smoke P0; theo dõi error/p95/locks/WAL; business sign; mở
toàn bộ. |
|
Rollback A |
Trước khi PG nhận ghi: đóng ingress, trỏ DSN lại Oracle, mở writer/job
Oracle, smoke/monitor, ghi bằng chứng. Target giữ nguyên để RCA/re-run. |
|
Rollback B |
Sau khi PG đã nhận ghi: STOP THE WORLD; không trỏ thẳng về Oracle. Chạy
reverse-CDC/dual-write đã diễn tập hoặc export delta PG→Oracle; reconcile
100%; owner dữ liệu ký; sau đó mới trỏ lại. Không có đường ngược đã test =
NO-GO mở ghi PG. |
|
Hypercare |
Theo dõi 24×7 trong <TBD 3–7 ngày>; daily reconcile; PITR/backup
verify; PIR. Chỉ decommission Oracle sau retention <TBD>, audit/legal
hold, rollback window và CAB phê duyệt. |
9 CHECKLIST NGHIỆM THU — KÝ THEO BẰNG
CHỨNG, KHÔNG KÝ THEO CẢM NHẬN
|
✓ |
Điều kiện nghiệm thu |
Chủ ký |
Bằng chứng |
Kết quả |
|
□ |
Scope/object mapping 100%; exclusions được business phê duyệt |
Architect/App |
<link/ticket> |
□Pass □Fail |
|
□ |
Schema/PLpgSQL/SQL app: compile + P0/P1 tests 100% |
DB Dev/QA |
<report> |
□Pass □Fail |
|
□ |
Data reconciliation, LOB, sequence, timezone/Unicode đạt |
DBA/Data Owner |
<report> |
□Pass □Fail |
|
□ |
GoldenGate 0 abend; lag/heartbeat/trail retention đạt |
GG DBA |
<report> |
□Pass □Fail |
|
□ |
Performance/capacity/concurrency đạt SLA đã duyệt |
SRE/App |
<report> |
□Pass □Fail |
|
□ |
Security, backup/PITR, HA/failover, monitoring/alert đạt |
SecOps/PG DBA |
<evidence> |
□Pass □Fail |
|
□ |
Cutover + rollback A/B (nếu cam kết) đã diễn tập |
Change Mgr |
<minutes> |
□Pass □Fail |
|
□ |
SOP vận hành, KT, CMDB, license, support, DR và on-call bàn giao |
Ops/PM |
<sign-off> |
□Pass □Fail |
|
QUYẾT ĐỊNH |
GO khi toàn bộ mục
bắt buộc Pass, không còn Sev1/Sev2, người có thẩm quyền dữ liệu/ứng dụng/vận
hành/CAB ký. NO-GO nếu còn mismatch chưa giải thích, CDC không xác định đúng
boundary, rollback hậu ghi chưa khả thi nhưng lại được cam kết, hoặc
backup/restore/HA chưa thử. |
Nguồn chuẩn cần đối chiếu theo release triển khai: Ora2Pg documentation • Oracle
GoldenGate 26ai • PostgreSQL current
docs | Mọi lệnh OGG là template: checkprm + dry-run
+ support matrix quyết định cú pháp cuối.
TƯ VẤN: Click Here hoặc Hotline/Zalo 090.29.12.888
=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty