Flink Oracle CDC 環境配置與驗證

一、Oracle 數據庫核心配置詳解
1. 啟用歸檔日志(Archiving Log)

Oracle CDC 依賴歸檔日志獲取增量變更數據,需按以下步驟啟用:

非CDB數據庫配置:

-- 以DBA身份連接數據庫  
CONNECT sys/password AS SYSDBA;  -- 配置歸檔目標路徑和大小  
ALTER SYSTEM SET db_recovery_file_dest_size = 10G;  
ALTER SYSTEM SET db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' SCOPE=SPFILE;  -- 重啟數據庫并啟用歸檔模式  
SHUTDOWN IMMEDIATE;  
STARTUP MOUNT;  
ALTER DATABASE ARCHIVELOG;  
ALTER DATABASE OPEN;  -- 檢查歸檔模式是否啟用  
ARCHIVE LOG LIST;  
-- 輸出應顯示:Database log mode: Archive Mode  

CDB數據庫配置(多租戶架構):

-- 連接CDB根容器  
CONNECT sys/password@//localhost:1521/ORCLCDB AS SYSDBA;  -- 配置歸檔路徑(與非CDB類似)  
ALTER SYSTEM SET db_recovery_file_dest_size = 10G;  
ALTER SYSTEM SET db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' SCOPE=SPFILE;  
SHUTDOWN IMMEDIATE;  
STARTUP MOUNT;  
ALTER DATABASE ARCHIVELOG;  
ALTER DATABASE OPEN;  -- 進入PDB容器(如ORCLPDB1)  
ALTER SESSION SET CONTAINER = ORCLPDB1;  
2. 啟用補充日志(Supplemental Logging)

補充日志用于捕獲數據變更的前后狀態,需為目標表或數據庫啟用:

-- 為指定表啟用補充日志(捕獲所有列變更)  
ALTER TABLE inventory.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;  -- 為整個數據庫啟用補充日志  
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;  
3. 創建專用用戶并授權
-- 創建表空間(非CDB)  
CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/SID/logminer_tbs.dbf' 
SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;  -- 創建用戶并授予基礎權限(非CDB)  
CREATE USER flinkuser IDENTIFIED BY flinkpw 
DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs;  
GRANT CREATE SESSION, SET CONTAINER, SELECT ON V_$DATABASE TO flinkuser;  
GRANT FLASHBACK ANY TABLE, SELECT ANY TABLE TO flinkuser;  
GRANT SELECT_CATALOG_ROLE, EXECUTE_CATALOG_ROLE TO flinkuser;  
GRANT SELECT ANY TRANSACTION, LOGMINING, ANALYZE ANY TO flinkuser;  -- 授予LogMiner相關權限  
GRANT EXECUTE ON DBMS_LOGMNR TO flinkuser;  
GRANT EXECUTE ON DBMS_LOGMNR_D TO flinkuser;  -- 授予視圖查詢權限(關鍵:讀取日志元數據)  
GRANT SELECT ON V_$LOG, V_$LOG_HISTORY TO flinkuser;  
GRANT SELECT ON V_$LOGMNR_LOGS, V_$LOGMNR_CONTENTS TO flinkuser;  
GRANT SELECT ON V_$LOGMNR_PARAMETERS, V_$LOGFILE TO flinkuser;  
GRANT SELECT ON V_$ARCHIVED_LOG, V_$ARCHIVE_DEST_STATUS TO flinkuser;  

CDB數據庫特殊配置:

-- 在CDB中創建用戶時指定CONTAINER=ALL  
CREATE USER flinkuser IDENTIFIED BY flinkpw 
DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs CONTAINER=ALL;  
GRANT CREATE SESSION, SET CONTAINER TO flinkuser CONTAINER=ALL;  
-- 其他權限同理添加CONTAINER=ALL后綴(如GRANT SELECT ANY TABLE TO flinkuser CONTAINER=ALL)  
二、Flink 環境集成配置
1. 添加Maven依賴(項目開發)
<dependency><groupId>com.ververica</groupId><artifactId>flink-sql-connector-oracle-cdc</artifactId><version>3.0.1</version><scope>provided</scope>
</dependency>
2. SQL Client部署(非Maven環境)
  1. 下載連接器JAR包:flink-sql-connector-oracle-cdc-3.0.1.jar
  2. 將JAR包放入$FLINK_HOME/lib/目錄
  3. 重啟Flink集群使依賴生效
三、Flink SQL 表定義與參數詳解
1. 完整建表示例(含元數據列)
-- 設置checkpoint間隔(可選)  
SET 'execution.checkpointing.interval' = '5s';  -- 創建Oracle CDC表(含元數據列)  
CREATE TABLE oracle_products (id INT,name STRING,description STRING,weight DECIMAL(10, 3),-- 元數據列:捕獲數據庫變更信息  db_name STRING METADATA FROM 'database_name' VIRTUAL,schema_name STRING METADATA FROM 'schema_name' VIRTUAL,table_name STRING METADATA FROM 'table_name' VIRTUAL,op_ts TIMESTAMP_LTZ(3) METADATA FROM 'op_ts' VIRTUAL,PRIMARY KEY(id) NOT ENFORCED
) WITH ('connector' = 'oracle-cdc','hostname' = '192.168.1.100','port' = '1521','username' = 'flinkuser','password' = 'flinkpw','database-name' = 'ORCLCDB','schema-name' = 'inventory','table-name' = 'products',-- 關鍵參數詳解  'debezium.log.mining.strategy' = 'online_catalog','debezium.log.mining.continuous.mine' = 'true','scan.startup.mode' = 'initial','scan.incremental.snapshot.enabled' = 'true'
);
2. 核心參數詳解
參數名必選默認值類型說明
connectorString固定為oracle-cdc
hostnameStringOracle服務器IP(若配置url,則可不填)
usernameString連接Oracle的用戶名(需具備前文授權的權限)
passwordString連接Oracle的密碼
database-nameString數據庫名(如ORCLCDB
schema-nameString模式名(如inventory
table-nameString表名(如products
port1521Integer數據庫端口號
url自動拼接StringJDBC連接串(優先級高于hostname+port),格式:jdbc:oracle:thin:@host:port/database
scan.startup.modeinitialString啟動模式:initial(快照+redo日志)、latest-offset(僅最新變更)
scan.incremental.snapshot.enabledtrueBoolean啟用增量快照(并行讀取,無需鎖),建議保持默認
debezium.log.mining.strategyonline_catalogString日志挖掘策略:online_catalog(在線目錄)、file_based(基于文件)
debezium.log.mining.continuous.minetrueBoolean持續挖掘日志(保持增量讀取)
四、環境驗證與測試流程
1. 準備測試數據(Oracle)
-- 創建測試表(假設已在inventory模式下)  
CREATE TABLE inventory.products (id INT PRIMARY KEY,name VARCHAR2(100),price NUMBER(10, 2),stock INT,update_time TIMESTAMP
);-- 插入測試數據  
INSERT INTO inventory.products VALUES (1, '筆記本電腦', 5999.00, 100, SYSDATE);  
INSERT INTO inventory.products VALUES (2, '智能手機', 3999.00, 200, SYSDATE);  
COMMIT;
2. 使用Flink SQL驗證數據同步
-- 查詢Oracle CDC表(首次查詢觸發快照讀取)  
SELECT * FROM oracle_products;  -- 觀察輸出:應顯示插入的兩條記錄  
-- 后續在Oracle中更新數據,Flink會實時捕獲變更  
UPDATE inventory.products SET price = 6499.00 WHERE id = 1;  
COMMIT;
3. DataStream API 驗證示例(并行模式)
import org.apache.flink.cdc.connectors.oracle.source.OracleSourceBuilder;
import org.apache.flink.cdc.debezium.JsonDebeziumDeserializationSchema;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;public class OracleCdcParallelExample {public static void main(String[] args) throws Exception {// 配置Oracle Source(并行增量快照模式)OracleSourceBuilder<String> sourceBuilder = OracleSourceBuilder.<String>builder().hostname("192.168.1.100").port(1521).database("ORCLCDB").schemaList("inventory").tableList("inventory.products").username("flinkuser").password("flinkpw").deserializer(new JsonDebeziumDeserializationSchema()).startupOptions(StartupOptions.initial()).splitSize(1000) // 快照分片大小.debeziumProperty("log.mining.strategy", "online_catalog");StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();env.enableCheckpointing(5000); // 5秒checkpointenv.fromSource(sourceBuilder.build(),WatermarkStrategy.noWatermarks(),"Oracle CDC Source").setParallelism(4) // 設置4并行度讀取.print();env.execute("Oracle CDC Test");}
}
五、常見問題與解決方案
  1. 歸檔日志未啟用錯誤

    ERROR: ORA-01232: archived log is disabled
    
    • 解決方案:確認已執行ALTER DATABASE ARCHIVELOG,并重啟數據庫使配置生效。
  2. 權限不足錯誤

    ERROR: ORA-01031: insufficient privileges
    
    • 解決方案:檢查用戶是否具備LOGMININGSELECT ANY TRANSACTION等關鍵權限,重新執行授權語句。
  3. 增量快照失敗(無主鍵表)

    ERROR: Table has no primary key, cannot split snapshot chunks
    
    • 解決方案:為表添加主鍵,或手動指定分片鍵:
      'scan.incremental.snapshot.chunk.key-column' = 'id'  -- 替換為實際列名
      
  4. CDB/PDB連接失敗

    • 解決方案:在Flink DDL中添加PDB名稱:
      'debezium.database.pdb.name' = 'ORCLPDB1'  -- 替換為實際PDB名
      
  5. 快照階段Checkpoint超時

    • 解決方案:調整Flink配置以避免大表快照時Checkpoint失敗:
      SET 'execution.checkpointing.interval' = '10min';
      SET 'execution.checkpointing.tolerable-failed-checkpoints' = '100';
      
六、生產環境優化建議
  1. 歸檔日志清理策略

    • 配置自動刪除過期歸檔日志:
      -- 創建歸檔日志刪除策略(保留7天)  
      EXEC DBMS_BACKUP_RESTORE.DELETEARCHIVELOG('OLDER THAN 7 DAYS', 'DELETE'
      );
      
  2. 連接池優化

    • 在Flink DDL中調整連接池大小:
      'connection.pool.size' = '30'  -- 根據并發需求調整
      
  3. 性能監控

    • 監控Oracle視圖V$LOGMNR_CONTENTS確認日志挖掘狀態,或通過Flink Web UI觀察任務并行度與吞吐量。

通過以上步驟,可完成Flink Oracle CDC的全流程配置與驗證。生產環境中需特別注意歸檔日志空間管理、CDB/PDB架構適配及大表快照的并行參數調優,以確保數據一致性和系統穩定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913484.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913484.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913484.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ssh: Could not resolve hostname d: Temporary failure in name resolution

關于不能本機上傳文件夾到服務器上的一個問題的記錄。 scp -r "D:\***\datasets" usernamexxxxxx:接收文件夾名 一直報錯&#xff1a;ssh: Could not resolve hostname d: Temporary failure in name resolution 反復嘗試發現無果之后想起來&#xff0c;在傳輸的時候…

2025年的前后端一體化CMS框架優選方案

以下是結合技術生態、開發效率和商業落地驗證&#xff0c;整理的2025年前后端一體化CMS框架優選方案&#xff1a;一、?主流成熟框架組合?1. ?React Node.js (Express/Next.js)??前端?&#xff1a;React生態成熟&#xff0c;配合Redux狀態管理&#xff0c;適合復雜后臺界…

《聲音的變形記:Web Audio API的實時特效法則》

用戶期待更豐富、更具沉浸感的聽覺體驗時&#xff0c;基于Web Audio API實現的實時音頻特效&#xff0c;就像是為這片森林注入了靈動的精靈&#xff0c;讓簡單的聲音蛻變為震撼人心的聽覺盛宴。回聲特效帶來空間的深邃回響&#xff0c;變聲效果賦予聲音全新的個性面貌。接下來&…

LLM場景下的強化學習【PPO】

適合本身對強化學習有基本了解 一、什么是強化學習 一句話&#xff1a;在當前狀態(State)下&#xff0c;智能體(Agent)與環境(Environment)交互&#xff0c;并采取動作(Action)進入下一狀態&#xff0c;過程中獲得獎勵(Reward&#xff0c;有正向有負向)&#xff0c;從而實現從…

Python爬蟲實戰:研究chardet庫相關技術

1. 引言 1.1 研究背景與意義 在互聯網信息爆炸的時代,網絡數據采集技術已成為信息獲取、數據分析和知識發現的重要手段。Python 作為一種高效的編程語言,憑借其豐富的第三方庫和簡潔的語法,成為爬蟲開發的首選語言之一。然而,在網絡數據采集中,文本編碼的多樣性和不確定…

回溯題解——全排列【LeetCode】

46. 全排列 一、算法邏輯&#xff08;逐步通順講解每一步思路&#xff09; 該算法使用了典型的 回溯&#xff08;backtracking&#xff09; 狀態數組 思路&#xff0c;逐層遞歸生成排列。 題目目標&#xff1a;給定一個無重復整數數組 nums&#xff0c;返回其所有可能的全排…

RICE模型或KANO模型在具體UI評審時的運用經驗

模型是抽象的產物,結合場景才好說明(數據為非精確實際數據,僅供參考,勿照搬)。 ??案例一:RICE模型解決「支付流程優化」vs「首頁動效升級」優先級爭議?? ??背景??:APP電商模塊在迭代中面臨兩個需求沖突——支付團隊主張優化支付失敗提示(減少用戶流失),設計…

緩存中間件

緩存與分布式鎖 即時性、數據一致要求不高的 訪問量大且更新頻率不高的數據 &#xff08;讀多&#xff0c;寫少&#xff09; 常用緩存中間件 redis Spring 如果用spring的情況下&#xff0c;由于redis沒有受spring的管理&#xff0c; 則我們需要自己先寫一個redis的配置類&…

大語言模型全方位解析:從基礎認知到RESTful API應用

文章目錄 前言一、初見大模型1.1 大語言模型基本知識了解&#xff08;一&#xff09;日常可能用到的大語言模型&#xff08;二&#xff09;大模型的作用&#xff08;三&#xff09;核心價值 1.2 大模型與人工智能關系1.3 大語言模型的“前世今生”與發展1.3.1 大語言模型的發展…

網安系列【11】之目錄穿越與文件包含漏洞詳解

文章目錄 前言一 目錄穿越漏洞1.1 什么是目錄穿越&#xff1f;1.2 目錄穿越的原理1.3 目錄穿越的常見形式1.3.1 基本形式1.3.2 編碼繞過1.3.3 絕對路徑攻擊 1.4 實戰案例解析1.4.1 案例1&#xff1a;簡單的目錄穿越1.4.2 案例2&#xff1a;編碼繞過 1.5 目錄穿越的危害 二、文件…

uri-url-HttpServletRequest

1. 使用HttpServletRequest UrlPathHelper 解析 出 url路徑 org.springframework.web.util.UrlPathHelper 是 Spring 框架中用于處理 HTTP 請求路徑的一個工具類&#xff0c;它幫助解析和處理與請求路徑相關的細節。特別是 getLookupPathForRequest(HttpServletRequest request…

Ubuntu22.04安裝p4顯卡 nvidia-utils-570-server 570.133.20驅動CUDA Version: 12.8

Ubuntu22.04安裝p4顯卡 nvidia-utils-570-server 570.133.20驅動CUDA Version: 12.8專業顯卡就是專業顯卡&#xff0c;盡管p4已經掉到了白菜價&#xff0c;官方的支持卻一直都保持&#xff0c;比如它可以裝上cuda12.8,這真的出乎我意料。NVIDIA Tesla P4顯卡的主要情況Pascal架…

工業日志AI大模型智能分析系統-前端實現

目錄 主要架構 前端項目結構 1. 核心實現代碼 1.1 API服務封裝 (src/api/log.ts) 1.2 TS類型定義 (src/types/api.ts) 1.3 Pinia狀態管理 (src/stores/logStore.ts) 1.4 日志分析頁面 (src/views/LogAnalysis.vue) 1.5 日志詳情組件 (src/components/LogDetail.vue) 2…

C++內存泄漏排查

引言 C內存泄漏問題的普遍性與危害內存泄漏排查大賽的背景與目標文章結構和主要內容概述 內存泄漏的基本概念 內存泄漏的定義與類型&#xff08;顯式、隱式、循環引用等&#xff09;C中常見的內存泄漏場景&#xff08;指針管理不當、資源未釋放等&#xff09;內存泄漏對程序性能…

20250706-4-Docker 快速入門(上)-常用容器管理命令_筆記

一、常用管理命令1. 選項&#xfeff;&#xfeff;1&#xff09;ls&#xfeff;功能&#xff1a;列出容器常用參數&#xff1a;-a&#xff1a;查看所有容器包含退出的-q&#xff1a;列出所有容器ID-l&#xff1a;列出最新創建的容器狀態使用技巧&#xff1a;容器很多時使用dock…

基于 Camunda BPM 的工作流引擎示例項目

項目介紹 這是一個基于 Camunda BPM 的工作流引擎示例項目&#xff0c;包含完整的后臺接口和前端頁面&#xff0c;實現了流程的設計、部署、執行等核心功能。 技術棧 后端 Spring Boot 2.7.9Camunda BPM 7.18.0MySQL 8.0JDK 1.8 前端 Vue 3Element PlusBpmn.jsVite 功能…

Day06_刷題niuke20250707

試卷01&#xff1a; 單選題 C 1. 在C中,一個程序無論由多少個源程序文件組成,其中有且僅有一個主函數main().說法是否正確&#xff1f; A 正確 B 錯誤 正確答案&#xff1a;A 官方解析&#xff1a; 在C程序設計中,一個完整的程序確實有且僅有一個main函數作為程序的入口點,這…

洛谷 P5788 【模板】單調棧

題目背景模板題&#xff0c;無背景。2019.12.12 更新數據&#xff0c;放寬時限&#xff0c;現在不再卡常了。題目描述給出項數為 n 的整數數列 a1…n?。定義函數 f(i) 代表數列中第 i 個元素之后第一個大于 ai? 的元素的下標&#xff0c;即 f(i)mini<j≤n,aj?>ai??{…

linux系統運行時_安全的_備份_還原_方法rsync

1.問題與需求 問題: 新部署的機器設備(主控RK3588), 沒有經過燒錄定制鏡像, 研發部署, 直接組裝發送到客戶現場需要通過frpc遠程部署: 安裝ros2 python包 docker鏡像 環境配置 自啟動配置 SN設備信息寫自動部署腳本, 實現一鍵部署升級無奈物聯網卡做了白名單限制, apt 和…

18套精美族譜Excel模板,助力家族文化傳承!

【資源分享】18套精美族譜Excel模板&#xff0c;助力家族文化傳承&#xff01; &#x1f3af; 本文分享一套完整的家族譜系資源&#xff0c;包含18個精心設計的Excel模板&#xff0c;從基礎模板到專業圖表&#xff0c;滿足各類家族的族譜制作需求。 一、為什么要制作族譜&…