BLOGS

CDC ข้อมูลจาก Oracle ไป BigQuery ง่ายนิดเดียวด้วย Datastream (ฉบับจับมือสอน EP.2/3)

Thakorn.T • 24/08/2023
Google Cloud Solutions Specialist

จากบทความที่แล้วทุกคนคงพอมีความเข้าใจมากขึ้นในกระบวนการ CDC รวมถึงขั้นตอนในการทำ Data Pipeline จาก Oracle มายัง BigQuery สำหรับบทความนี้เราจะเริ่มจำลองตัว Oracle ขึ้นมาโดยการเตรียมลง Oracle บน Google Cloud กัน

ทบทวนขั้นตอนการทำ CDC จาก Oracle ไปยัง BigQuery

  1. ฝั่ง Oracle
    • เตรียม Oracle Database ให้พร้อม
    • Configure Archivelog บน Oracle Database เพื่อรองรับ CDC
  2. ฝั่ง Google Cloud
    • สร้าง Connection Profiles บน Datastream
      • Source Profile เป็น Oracle
      • Destination Profile เป็น BigQuery
    • สร้าง Streams บน Datastream
    • Start Streams และดูผลลัพธ์บน BigQuery

ในบทความนี้เราจะ Focus ที่ขั้นตอนฝั่ง Oracle ข้อที่ 1 ก่อนอื่นเราต้องตรวจสอบว่า Version ของ Oracle ของเราสามารถรองรับการทำ CDC บน Datastream หรือไม่ ? ซึ่ง Version ที่รองรับคือ Oracle 11g และ Version 11.2.0.4 ขึ้นไป (สามารถดู Support List ได้ที่ Datastream Source Oracle Database)

แต่สำหรับตัวอย่างนี้เราจะใช้ Oracle ที่ทุกคนเข้าถึงได้ง่ายก็คือ Oracle Database Free โดยปัจจุบัน ณ วันที่ 13 กรกฎาคม 2023 จะเป็นตัว Oracle Database 23c Free ซึ่งเราสามารถติดตั้งตาม Installation Guide ได้เลย โดยวันนี้จะพาไปติดตั้งเวอร์ชันนี้พร้อมกันบน Compute Engine

ติดตั้ง Oracle Database 23c Free บน Google Cloud

เนื่องจากบน Document ของ Oracle ระบุไว้ว่า Support Red Hat Enterprise Linux 8 Distributions for x86-64 ดังนั้น Image ที่เราใช้วันนี้จะเป็นตัว RHEL 8

สร้าง Instance บน Compute Engine

ไปที่หน้า Compute Engine บน Cloud Console แล้วกด CREATE INSTANCE ได้เลย

ตั้งชื่อให้เรียบร้อยแล้วเลือก Machine Types ใน Machine Configuration เริ่มเป็น N1 ก่อน

เลื่อนลงมายังหัวข้อ Boot Disk กด CHANGE เพื่อเปลี่ยน Images ที่ใช้ติดตั้ง โดยเลือก OS เป็น Red Hat Enterprise Linux และ version 8 ดังภาพ จากนั้นกด SELECT ได้เลย

เมื่อเรียบร้อยแล้วกดปุ่ม CRATE สีฟ้าเพื่อเริ่มสร้าง Instance ได้เลย

รอสักครู่จะปรากฎเป็น VM Instances พร้อมทั้ง IP ให้เรา

ติดตั้ง Oracle บน Linux RHEL 8

เข้าไปยัง Terminal ของ Instance นี้ ด้วยการคลิกที่ SSH หรือกดที่ Drop Down แล้วเลือก Open in Browser Window

หาก Windows เด้งขึ้นมาใหม่ให้เรายืนยันตัวตนดังภาพก็สามารถกด Authorize หรือ Login Account ของเราเพื่อยืนยันตัวตนให้เรียบร้อย จนปรากฎเป็นหน้า Terminal สีดำ

เมื่อเราเข้าสู่หน้า Terminal แล้ว สามารถพิมพ์ Command ต่อไปนี้ เพื่อ Load Package มาเก็บไว้ในเครื่อง

sudo -s

curl -L -o oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL8/developer/x86_64/getPackage/oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm 
curl -L -o oracle-database-free-23c-1.0-1.el8.x86_64.rpm https://download.oracle.com/otn-pub/otn_software/db-free/oracle-database-free-23c-1.0-1.el8.x86_64.rpm
ls

เมื่อ Download Package มาเรียบร้อยแล้วจะได้ผลลัพธ์ดังภาพ

ติดตั้ง Package ด้วย Command เหล่านี้ให้เรียบร้อย

dnf -y localinstall oracle-database-preinstall-23c-1.0-0.5.el8.x86_64.rpm dnf -y localinstall oracle-database-free-23c-1.0-1.el8.x86_64.rpm

หลังจากติดตั้งเสร็จแล้วก็ Configure ด้วย Command นี้และกำหนด Password User SYS

/etc/init.d/oracle-free-23c configure

รอการติดตั้งจนเสร็จสมบูรณ์เป็นการเสร็จขั้นตอนติดตั้ง Oracle

สร้าง Common User เพื่อเข้าถึงฐานข้อมูล

บน Oracle Free 23c จะมีฐานข้อมูลตัวใหญ่ชื่อว่า CDB (Container Database) และฐานข้อมูลอื่น ๆ ที่มาเชื่อมเรียกว่า PDB (Pluggable Databases) ดังนั้นเราจึงต้องสร้าง Common Uses ที่มี Session ทั้งบน CDB และ PDB ของเรา ในที่นี้ PDB ที่เราติดตั้งมาจะชื่อ FREEPDB1

# Change to user Oraclesu – oracle
#Set Environmentexport ORACLE_SID=FREEexport ORAENV_ASK=NO. /opt/oracle/product/23c/dbhomeFree/bin/oraenv
# Login to SYSDBAcd $ORACLE_HOME/bin./sqlplus / as sysdba

เมื่อรันคำสั่งข้างต้นจะเข้า SQL Shell ดังภาพ

สร้าง User c##tangerine และ Grant สิทธิ์ DBA ให้ โดยมี Password เป็น Test

CREATE USER C##tangerine IDENTIFIED BY test;
GRANT DBA TO C##tangerine;
GRANT CREATE SESSION TO C##tangerine;

ALTER SESSION SET CONTAINER = FREEPDB1;
CREATE USER C##tangerine IDENTIFIED BY test;
GRANT SYSDBA TO C##tangerine;
GRANT CREATE SESSION TO C##tangerine;
ALTER USER C##tangerine quota unlimited on users;

CREATE USER testdb IDENTIFIED BY test;
GRANT SYSDBA TO testdb;
GRANT CREATE SESSION TO testdb;
ALTER USER testdb quota unlimited on users;

เชื่อมต่อ Oracle ด้วย Database IDE

เมื่อเราติดตั้ง Oracle และสร้าง Users เรียบร้อยก็ถึงคราวที่ต้องลองเชื่อมต่อจากข้างนอกดู แต่ต้องพิจารณาถึง Network ด้วย ดังนั้นเรามาเริ่มกันที่ Allow Firewall กันก่อน โดยไปที่ Firewall Console กด CREATE FIREWALL RULE

ตั้งชื่อให้เรียบร้อย และ Test-allow-oracle ให้เรียบร้อย

เลือก Targets และกรอก Source IPv4 Ranges และ TCP Port ดังภาพแล้วกดปุ่ม CREATE

เมื่อ Create Firewall เรียบร้อยแล้วเราจะทดสอบด้วยการต่อ Database IDE ไป ในที่นี้ผู้เขียนใช้ DBeaver Community (สามารถดาวน์โหลดได้ที่ https://dbeaver.io/download/)

จากนั้นเก็บ External IP เตรียมไปใส่ใน DBeaver ได้เลย

ไปที่ DBeaver กด New Database Connection เป็นสัญลักษณ์ซ้ายบนสุด เลือก Oracle

ใส่ IP ที่คัดลอกมาที่ Host แล้วกำหนด Username = c##tangerine และ Password = Test และรายละเอียดอื่น ๆ ดังภาพ

ลองกด Test Connection จะได้ผลลัพธ์ Connected ดังภาพ จากนั้นกด OK และ Finnish ตามลำดับ

ที่ Schema ชื่อ TESTDB คลิกขวาแล้วเลือก Import Data ดังภาพ

ดาวน์โหลดไฟล์ Customer_Churn_Modelling.csv และอัพโหลด แล้วเข้าไปแล้วกด Next และ Proceed

เมื่ออัพโหลดสำเร็จจะได้ผลลัพธ์ดังรูป พร้อมที่จะไป Config Feature CDC ต่อ

Configure Archivelog on Oracle

ขั้นแรกเราจะ Configure Archivelog ที่ Follow ตาม Document เนื่องจากตัว Oracle ที่เราติดตั้งเป็นแบบ Self-hosted Oracle Pluggable Database เราจะทำตาม Instruction นี้ แต่หาก Oracle ที่ใช้เป็นแบบอื่น ก็เลือกหัวข้อที่ตรงกับ Deployment ของตัวเองได้

พิมพ์ Command ตาม Document ใน Terminal ของ SQL Plus ดังภาพ

SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN;

Config Oracle Recovery Manager (RMAN) ต่อด้วยการออกจาก SQL Plus โดยกด Ctrl+D จากนั้นเข้าไปใน RMAN ด้วยคำสั่ง RMAN

rman
CONNECT TARGET
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

กลับไปที่ SQL Plus อีกครั้งโดยพิมพ์ ./sqlplus / as sysdba จากนั้นจึงใส่ Command เพื่อ Enable Supplemental Log Data

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

สุดท้าย Grant สิทธิ์ให้กับ Database หลักและ Database ที่มา Plug

GRANT CREATE SESSION TO c##tangerine;
GRANT SET CONTAINER TO c##tangerine;
GRANT SELECT ON SYS.V_$DATABASE TO c##tangerine;
GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO c##tangerine;
GRANT EXECUTE ON DBMS_LOGMNR TO c##tangerine;
GRANT EXECUTE ON DBMS_LOGMNR_D TO c##tangerine;
GRANT LOGMINING TO c##tangerine;
GRANT EXECUTE_CATALOG_ROLE TO c##tangerine;

ALTER SESSION SET CONTAINER = FREEPDB1;
GRANT CREATE SESSION TO c##tangerine;
GRANT SET CONTAINER TO c##tangerine;
GRANT SELECT ANY TABLE TO c##tangerine;
GRANT SELECT ON SYS.V_$DATABASE TO c##tangerine;
GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO c##tangerine;
GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO c##tangerine;

Configure Redo Log Files on Oracle

จากนั้นเราจะ Config Redo Log ตาม Document นี้ เริ่มกันที่ใส่ Command ต่อไปนี้บน SQL Plus เพื่อกำหนดเวลาในการ Rotate Log ประมาณ 60 วินาที

ALTER SYSTEM SET ARCHIVE_LAG_TARGET = 60;

Summary

มาถึงท้าย EP.2 พอจะเห็นภาพมากขึ้นถึงการติดตั้ง Oracle และการ Configure พวก Archivelog ให้รองรับความเป็น CDC แต่อย่างไรแล้ว EP.3 เราจะมาตั้งค่าบน Google Cloud เพื่อทำ Pipeline อัตโนมัติที่ดึงข้อมูลจาก Oracle ไปลง BigQuery กัน

หากสนใจบริการต่าง ๆ หรือต้องการคำปรึกษาเพิ่มเติมติดต่อเรา
ได้ที่ marketing@tangerine.co.th หรือเบอร์ 02-285-5511
เพื่อรับคำตอบจากผู้เชี่ยวชาญที่ได้รับการรับรองมาตรฐานและมีประสบการณ์

Get a Free Consultation
Contact Form_EN Sources (#25)