需要規劃一個可訪問數據源的賬号,用於後續數據管道過程中訪問數據源并進行數據提取、寫入的同步操作。
創建賬号操作詳情請參見: 創建 Oracle 賬号
需要參考本章内容進行操作的場景:
1)Oracle 10g、11g
2)12c、18c、19c、21c、Oracle RAC集群:非 PDB 架構都需要做
用戶根據實際的數據庫版本,參考下面文檔進行操作。
使用如下命令創建用戶帳戶并分配權限:
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,則數據連接如下圖所示:
創建用戶并賦予權限。
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 權限。
注: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_STATUSFROM required_sys_privileges r LEFT JOIN user_sys_privs p ON r.PRIVILEGE = p.PRIVILEGEUNIONSELECT r.ROLE_NAME, NVL2(p.USERNAME, 'OK', 'REQUIRED') AS PRIVILEGE_STATUSFROM required_role_privileges r LEFT JOIN user_role_privs p ON r.ROLE_NAME = p.GRANTED_ROLEUNIONSELECT r.PRIVILEGE, NVL2(p.GRANTEE, 'OK', 'REQUIRED') AS PRIVILEGE_STATUSFROM required_table_privileges r LEFT JOIN user_tab_privs p ON r.PRIVILEGE = p.TABLE_NAME;顯示代碼
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_STATUSFROM required_sys_privileges r LEFT JOIN user_sys_privs p ON r.PRIVILEGE = p.PRIVILEGEUNIONSELECT r.ROLE_NAME, NVL2(p.USERNAME, 'OK', 'REQUIRED') AS PRIVILEGE_STATUSFROM required_role_privileges r LEFT JOIN user_role_privs p ON r.ROLE_NAME = p.GRANTED_ROLEUNIONSELECT r.PRIVILEGE, NVL2(p.GRANTEE, 'OK', 'REQUIRED') AS PRIVILEGE_STATUSFROM required_table_privileges r LEFT JOIN user_tab_privs p ON r.PRIVILEGE = p.TABLE_NAME;
對於返回結果,若顯示爲 Required 則是未開啓 logminer 權限,顯示爲 OK 則是有權限。
對於缺乏的權限,需要進行開啓。
如果數據來源爲 PDB ,則無法直接讀取數據庫的 redolog ,需要借助 CDB 來讀取。
下面步驟判斷連接用戶是否爲 Common User 以及是否擁有 Set Container 權限。
1)在 sqlplus 下使用命令查看當前 PDB 狀态,如下圖所示:
show pdbs;
或者也可以在數據庫查詢界面使用命令
SELECT name, open_modeFROM v$pdbsORDER BY name;
2)此時可以看出 PDBORCL 和 ORCLPDB 均未啓動,此時需要将其開啓。
使用如下命令:
注: PDB 名稱需要根據數據庫實際情況修改。
ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;ALTER PLUGGABLE DATABASE PDBORCL OPEN;
然後再次查看 PDB 狀态,PDB 均開啓:
注:在 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';
此時可以正常建表。
在配置好數據庫後,即可完成數據源配置。
需要在使用數據管道進行實時同步任務配置前,在 FineDataLink 中配置好需要同步的源端和目标端數據庫數據連接,以便在同步任務配置過程中,通過選擇數據源名稱來控制同步任務,詳情參見:建立並管理資料源
此時需要注意的是,如果數據來源爲 PDB,則創建的數據連接所選數據庫需要是 PDB 模式數據庫,需要如下圖所示:
然後設置數據管道任務即可,詳情參見:配置實時管道任務
歸檔日志會占用較多的磁盤空間,若磁盤空間滿了會影響業務,請定期清理過期歸檔日志,詳情參見:清理Oracle歸檔日誌
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙