跳到主要内容

Oracle LogMiner同步准备

准备动作1 - 开启LogMiner

非 RAC 模式 ORACLE

  • 1 使用 DBA 权限的账号登陆 ORACLE (e.g.,sqlplus)

  • 2 检查数据库日志模式

    • 如果 log_mode 返回 ARCHIVELOG 则忽略后续步骤
    • 如果 log_mode 返回 NOARCHIVELOG 那么继续
    select dbid,name,log_mode from v$database;
  • 3 关闭当前数据库

    shutdown immediate;
  • 4 启动并挂载数据库

    startup mount;
  • 5 开启归档日志,并打开数据库

    alter database archivelog;
    alter database open read write;

RAC 模式 ORACLE

  • 1 在 RAC ORACLE 的某一个节点的 shell 中,关闭、启动、挂载某一个数据库

    srvctl stop database -d <数据库名字>
    srvctl start database -d <数据库名字> -o mount
  • 2 使用 DBA 权限账号登陆该数据库(e.g.,sqlplus),并开启归档

    alter database archivelog;
  • 3 在 RAC ORACLE 的某一个节点的 shell 中, 重启数据库

    srvctl stop database -d <数据库名字>
    srvctl start database -d <数据库名字>
  • 4 使用 DBA 权限账号登陆该数据库(e.g.,sqlplus),检查该数据库是否是归档日志模式

    select log_mode from v$database;

准备动作2 - 开启补全日志(Supplemental Logging)

  • 1 检查数据库是否开启补全日志

    • 如果以下 SQL 4个字段值都返回 YES 或者 Implicit,则略过此准备动作
    select supplemental_log_data_min min, supplemental_log_data_pk pk,supplemental_log_data_ui ui, supplemental_log_data_all all_cols from v$database;
  • 2 开启库级别最小补全日志模式

    • 多租户数据库(PDB)
    alter session set container=cdb$root;

    alter database add supplemental log data;
    • 标准数据库(CDB)
    alter database add supplemental log data;
  • (选择一) 准备动作3中开启表补全日志

    alter table schema.表名 add supplemental log data (all,primary key,unique) columns;
  • (选择二) 开启库级别完整补全日志模式

    • 多租户数据库(PDB)
    alter session set container=cdb$root;

    alter database add supplemental log data (all,primary key,unique) columns;
    • 标准数据库(CDB)
    alter database add supplemental log data (all,primary key,unique) columns;

准备动作3 - 创建账号和授权

12c,18c,19c,21c 多租户数据库(pdb)

  • cdb$root 下创建一个普通用户,通常格式为 c##<你指定的名字>

    alter session set container=cdb$root;

    create user <你的用户名> identified by <你的密码> container=all;
  • 授予通用权限

    grant create session, select_catalog_role,logmining, execute_catalog_role to <你的用户名> container=all;
  • 授予 logminer 相关权限

    grant execute on sys.dbms_logmnr to <你的用户名>;
    grant execute on sys.dbms_logmnr_d to <你的用户名>;

    grant select on v_$logmnr_contents to <你的用户名>;
    grant select on v_$archived_log to <你的用户名>;
    grant select on v_$log to <你的用户名>;
    grant select on v_$logfile to <你的用户名>;
    grant select on v_$logmnr_logs to <你的用户名>;
  • 授予业务表权限

    alter session set container=<pdb名称>;

    grant select,alter on <schema>.<table> to <你的用户名>;
    ...将你要迁移同步的表进行select,alter(自动开补全日志)权限授予...

11g,12c,18c,19c,21c 标准数据库

  • 创建一个普通用户

    create user <你的用户名> identified by <你的密码>;
  • 授予通用权限

    grant create session, select_catalog_role, logmining, select any transaction, select any table to <你的用户名>;
  • 授予 logminer 相关权限

    grant execute on sys.dbms_logmnr to <你的用户名>;
    grant execute on sys.dbms_logmnr_d to <你的用户名>;

    grant select on v_$archived_log to <你的用户名>;
    grant select on v_$logmnr_contents to <你的用户名>;
    grant select on v_$log to <你的用户名>;
    grant select on v_$logfile to <你的用户名>;
    grant select on v_$logmnr_logs to <你的用户名>;
  • 授予业务表权限

    grant select,alter on <schema>.<table> to <你的用户名>;
    ...将你要迁移同步的表进行select,alter(自动开补全日志)权限授予...