1. 概述
需要規劃一個可訪問數據源的賬号,用於後續數據管道過程中訪問數據源并進行數據提取、寫入的同步操作。
創建賬号操作詳情請參見: 創建 Oracle 賬号
2. 場景一:非PDB必做
需要參考本章内容進行操作的場景:
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 則是有權限。

對於缺乏的權限,需要進行開啓。
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 均開啓:

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## 前綴。

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 權限,如下圖所示:

遠程 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歸檔日誌