Oracle OpenLogReplicator 同步准备
CloudCanal 使用 OpenLogReplicator 实现 Oracle 增量数据同步。本文介绍数据同步前的准备工作。
准备动作 1 - 开启日志归档
-
使用 DBA 权限的账号登录 Oracle (e.g.,sqlplus)。
-
检查数据库日志模式。
- 如果 log_mode 返回
ARCHIVELOG则忽略后续步骤。 - 如果 log_mode 返回
NOARCHIVELOG则继续后续步骤。
SELECT DBID,NAME,LOG_MODE FROM V$DATABASE; - 如果 log_mode 返回
-
关闭当前数据库。
SHUTDOWN IMMEDIATE; -
启动并挂载数据库。
STARTUP MOUNT; -
指定归档日志路径。
-- mkdir -p /u01/app/oracle/fra
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = '5G' SCOPE = BOTH;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fra' SCOPE = BOTH; -
开启归档日志,并打开数据库。
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN READ WRITE; -
开启补全日志。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER SYSTEM ARCHIVE LOG CURRENT;
准备动作 2 - 授予账号权限
-
替换以下脚本中的
<your_account>和<your_password>, 并执行到数据库中CREATE USER <your_account> IDENTIFIED BY <your_password>;
GRANT CONNECT TO <your_account>;
GRANT RESOURCE TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.CCOL$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.CDEF$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.COL$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.DEFERRED_STG$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.ECOL$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.LOB$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.LOBCOMPPART$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.LOBFRAG$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.OBJ$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.TAB$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.TABCOMPART$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.TABPART$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.TABSUBPART$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.TS$ TO <your_account>;
GRANT SELECT, FLASHBACK ON SYS.USER$ TO <your_account>;
GRANT SELECT ON SYS.DBA_TAB_COLS TO <your_account>;
GRANT SELECT ON SYS.DBA_COL_COMMENTS TO <your_account>;
GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO <your_account>;
GRANT SELECT ON SYS.V_$DATABASE TO <your_account>;
GRANT SELECT ON SYS.V_$DATABASE_INCARNATION TO <your_account>;
GRANT SELECT ON SYS.V_$LOG TO <your_account>;
GRANT SELECT ON SYS.V_$LOGFILE TO <your_account>;
GRANT SELECT ON SYS.V_$PARAMETER TO <your_account>;
GRANT SELECT ON SYS.V_$STANDBY_LOG TO <your_account>;
GRANT SELECT ON SYS.V_$TRANSPORTABLE_PLATFORM TO <your_account>;
GRANT SELECT, FLASHBACK ON XDB.XDB$TTSET TO <your_account>;
ALTER USER <your_account> QUOTA UNLIMITED ON USERS;
DECLARE
CURSOR C1 IS SELECT TOKSUF FROM XDB.XDB$TTSET;
CMD VARCHAR2(2000);
BEGIN
FOR C IN C1 LOOP
CMD := 'GRANT SELECT, FLASHBACK ON XDB.X$NM' || C.TOKSUF || ' TO <your_account>';
EXECUTE IMMEDIATE CMD;
CMD := 'GRANT SELECT, FLASHBACK ON XDB.X$QN' || C.TOKSUF || ' TO <your_account>';
EXECUTE IMMEDIATE CMD;
CMD := 'GRANT SELECT, FLASHBACK ON XDB.X$PT' || C.TOKSUF || ' TO <your_account>';
EXECUTE IMMEDIATE CMD;
END LOOP;
END;
/