③讀取數據變更記錄

  • 文檔創建者:Nikozhan
  • 編輯次數:1
  • 1. 概述

    需要規劃一個可訪問數據源的賬号,用於後續數據管道過程中訪問數據源并進行數據提取、寫入的同步操作。

    創建賬号操作詳情請參見: 創建 Oracle 賬号

    2. 場景一:非PDB必做

    icon提示:

    需要參考本章内容進行操作的場景:

    1)Oracle 10g、11g

    2)12c、18c、19c、21c、Oracle RAC集群:非 PDB 架構都需要做

    2.1 創建用戶賬戶并分配權限

    用戶根據實際的數據庫版本,參考下面文檔進行操作。

    2.1.1 Oracle 10g、11g版本

    使用如下命令創建用戶帳戶并分配權限:

    CREATE USER <user name> IDENTIFIED BY <password>;
    GRANT create session, alter session, execute_catalog_role, select any dictionary, select any transaction, select any table, unlimited tablespace to <user name>;

    此時即可在進行數據連接時使用該用戶賬号,例如上述使用的是Roxy,則數據連接如下圖所示:

    2.1.2 Oracle 12c、18c、19c、21c standard databases 版本

    創建用戶并賦予權限。

    1)以具有 DBA 權限的用戶身份登錄數據庫

    2)創建普通用戶:

    CREATE USER <user name> IDENTIFIED BY <password>;
    GRANT create session, alter session, select any dictionary, select any transaction,select any table,logmining, execute_catalog_role TO <username>;

    根據對表的權限需求,重複執行最後一個命令來賦予 select 權限。

    2.2 檢查用戶權限

    注:Oracle 11g 及以下版本不需要 LOGMINING 權限;但需要 DBMS_LOGMNR 和 DBMS_LOGMNR_D 這兩個權限,這兩個權限一般默認開啓,若用戶之前關閉過這兩個權限,自行百度開啓。

    輸入以下命令檢查判斷當前用戶是否有 LOGMINER 權限。

    WITH required_sys_privileges AS (
        SELECT column_value AS PRIVILEGE
        FROM TABLE (
            sys.odcivarchar2list(
                    'SELECT ANY TRANSACTION',
                    'CREATE SESSION',
                    'SELECT ANY DICTIONARY',
                    'SELECT ANY TABLE',
                    'LOGMINING'
                )
            )
    ),
         required_role_privileges AS (
             SELECT column_value AS ROLE_NAME
             FROM TABLE (
                 sys.odcivarchar2list(
                         'EXECUTE_CATALOG_ROLE',
                         'RESOURCE'
                     )
                 )
         ),
         required_table_privileges AS (
             SELECT column_value AS PRIVILEGE
             FROM TABLE (
                 sys.odcivarchar2list(
                         'DBMS_LOGMNR',
                         'DBMS_LOGMNR_D'
                     )
                 )
         )
    SELECT r.PRIVILEGE,
           NVL2(p.USERNAME, 'OK''REQUIRED') AS PRIVILEGE_STATUS
    FROM required_sys_privileges r
             LEFT JOIN user_sys_privs p
                       ON r.PRIVILEGE = p.PRIVILEGE
    UNION
    SELECT r.ROLE_NAME,
           NVL2(p.USERNAME, 'OK''REQUIRED') AS PRIVILEGE_STATUS
    FROM required_role_privileges r
             LEFT JOIN user_role_privs p
                       ON r.ROLE_NAME = p.GRANTED_ROLE
    UNION
    SELECT r.PRIVILEGE,
           NVL2(p.GRANTEE, 'OK''REQUIRED') AS PRIVILEGE_STATUS
    FROM required_table_privileges r
             LEFT JOIN user_tab_privs p
                       ON r.PRIVILEGE = p.TABLE_NAME;
    顯示代碼

    對於返回結果,若顯示爲 Required 則是未開啓 logminer 權限,顯示爲 OK 則是有權限。

    1769674135757617.png

    對於缺乏的權限,需要進行開啓。

    3. 場景二:PDB架構必做

    如果數據來源爲 PDB ,則無法直接讀取數據庫的 redolog ,需要借助 CDB 來讀取。

    下面步驟判斷連接用戶是否爲 Common User 以及是否擁有 Set Container 權限。

    3.1 啓動所有的 PDB

    1)在 sqlplus 下使用命令查看當前 PDB 狀态,如下圖所示:

    show pdbs;


    或者也可以在數據庫查詢界面使用命令

    SELECT name, open_mode
    FROM   v$pdbs
    ORDER BY name;

    2)此時可以看出 PDBORCL 和 ORCLPDB 均未啓動,此時需要将其開啓。

    使用如下命令:

    注: PDB 名稱需要根據數據庫實際情況修改。

    ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;
    ALTER PLUGGABLE DATABASE PDBORCL OPEN;

    然後再次查看 PDB 狀态,PDB 均開啓:

    1769674604398385.png

    3.2 創建賬号

    注:在 CDB 中創建公共用戶, PDBS 中也會創建相同用戶。若 CDB 下 GRANT 命令賦權時未指定container=all,則賦權只在 CDB 中生效,并不會在 PDB 中生效,這個用戶要能夠訪問PDB,需要切換到 PDB 再賦權。若賦權時指定 container=all,則賦權在 CDB 中生效,也在 PDB 中生效。

    1)創建用戶賬号

    CREATE USER "C##ROXY122" IDENTIFIED BY 123 CONTAINER=all; 

    注1:用戶名和密碼此處分别爲 C##ROXY122 和 123,用戶可根據實際情況修改。

    注2:當 Oracle 處於多租戶模式下時,用戶名需增加 C## 前綴。

    1769674641896688.png

    2)授予權限

    GRANT create session, alter session, select any dictionary, select any transaction,select any table,logmining, execute_catalog_role,set container TO "C##ROXY122" container=all;

    此處僅爲新增賬号的授權操作,數據庫權限需要參考本文 6.1 節開啓:

    ALTER USER "C##ROXY122" QUOTA UNLIMITED ON "USERS";
    SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;
    GRANT create session, alter session, select any dictionary, select any transaction,select any table,logmining, execute_catalog_role TO "C##ROXY122";


    最後授予用戶 V_$PDBS 的權限,如下圖所示:

    alter user "C##ROXY122" set container_data=all for sys.v_$pdbs container = current; 


    此時再查詢這個新增賬号的權限:

    SELECT USERNAME, OBJECT_NAME FROM CDB_CONTAINER_DATA WHERE USERNAME = 'C##ROXY122' AND OBJECT_NAME = 'V_$PDBS';

    可以查到對應的 v$pdbs 權限,如下圖所示:

    1769674735720068.png

    遠程 Oracle 所在服務器并切換到 sqlplus 模式下,執行賦予權限命令:

    grant restricted session TO "C##ROXY122" container=all;

    然後執行命令,賦予建表權限:

    GRANT CREATE TABLE TO <username> CONTAINER=ALL;

    執行後查詢是否還有建表權限:

    SELECT PRIVILEGE FROM USER_SYS_PRIVS WHERE PRIVILEGE = 'CREATE TABLE';


    此時可以正常建表。

    4. 後續步驟

    在配置好數據庫後,即可完成數據源配置。

    需要在使用數據管道進行實時同步任務配置前,在 FineDataLink 中配置好需要同步的源端和目标端數據庫數據連接,以便在同步任務配置過程中,通過選擇數據源名稱來控制同步任務,詳情參見:建立並管理資料源

    此時需要注意的是,如果數據來源爲 PDB,則創建的數據連接所選數據庫需要是 PDB 模式數據庫,需要如下圖所示:


    然後設置數據管道任務即可,詳情參見:配置實時管道任務

    5. 注意事項

    歸檔日志會占用較多的磁盤空間,若磁盤空間滿了會影響業務,請定期清理過期歸檔日志,詳情參見:清理Oracle歸檔日誌



    附件列表


    主題: 實時管道
    • 有幫助
    • 沒幫助
    • 只是瀏覽
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    滑鼠選中內容,快速回饋問題

    滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

    不再提示

    10s後關閉

    獲取幫助
    線上支援
    獲取專業技術支援,快速幫助您解決問題
    工作日9:00-12:00,13:30-17:30在线
    頁面反饋
    針對當前網頁的建議、問題反饋
    售前咨詢
    業務咨詢
    電話:0933-790886或 0989-092892
    郵箱:taiwan@fanruan.com
    頁面反饋
    *問題分類
    不能為空
    問題描述
    0/1000
    不能為空

    反馈已提交

    网络繁忙