oracle 数据迁移工具Logminer

@lucas  February 20, 2024

安装oracle11g

通过docker方式安装
  • 1、假如是Mac等apple系列芯片,首先安装Colima(X86架构芯片可跳过)

    #使用homebrew安装:
    brew install colima
    #假如安装过程中有类似报错:No such file or directory @ rb_sysopen... ,单独安装过对应依赖后再重新安装colima
    #查看是否安装成功:
    colima --version
    
    #启用Colima:架构为x86_64 内存为4G
    colima start --arch x86_64 --memory 4
    
    #使用limact工具查看虚拟机的情况
    limactl list
  • 接下来查看 https://blog.csdn.net/qq_18944765/article/details/131148472

安装logminer

  • 1、开启归档日志

    • 切换到oralce用户,su - oracle
    • 创建数据需要的目录,需要提前创建,否则启用日志归档会报错目录不存在
    • 以DBA身份连接到数据库,后续操作都是终端操作
    SQL>  sqlplus /nolog
    SQL>  conn /as sysdba
    • 启用日志归档,(这里的db_recovery_file_dest归档文件夹必须存在)
    # 可跳过归档日志目录设置
    SQL> alter system set db_recovery_file_dest_size = 50G;
    SQL> alter system set db_recovery_file_dest = '/home/oracle/oracle-data' scope=spfile;
    
    SQL> shutdown immediate;
    SQL> startup mount;
    SQL> alter database archivelog;
    SQL> alter database open;
    • 检查日志归档是否开启,"Database log mode: Archive Mode"
    archive log list;
  • 2、数据库启用补充日志记录

      # 验证数据库是否开启辅助日志和补充日志,当显示NO的时候表示没有开启,需要调整:
    SQL> select force_logging,supplemental_log_data_min from v$database;
    
      FOR SUPPLEME
      --- --------
      NO  NO
    #开启数据库的辅助日志和补充日志,开启强制日志后数据库会记录除临时表空间或临时回滚段外所有的操作,命令:
    SQL>  ALTER DATABASE FORCE LOGGING;
    # 开启辅助日志命令:
    SQL>  ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    # 开启主键附加日志命令:
    SQL>  ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
    # 开启全列附加日志命令:
    SQL>  ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  • 3、在使用 LogMiner 之前需要确认 Oracle 是否带有进行 LogMiner 分析包,一般来说 Windows 操作系统 Oracle10g 以上都默认包含。如果不能确认,可以 DBA 身份登录系统,查看系统中是否存在运行 LogMiner 所需要的 dbms_logmnr、 dbms_logmnr_d 包,如果没有需要安装 LogMiner 工具,必须首先要运行下面这样两个脚本:
SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql  

SQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql

使用logminer

  • 1、在服务器上创建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目录来存储数据库的字典信息,如下所示。

    mkdir -p /home/oracle/tools/oracle11g/oradata/orcl/LOGMNR
  • 2、配置LogMiner,以oracle用户身份登录服务器,并以DBA身份登录Oracle数据库,如下所示。
sqlplus /nolog
conn  / as sysdba
  • 3、接下来,创建字典文件夹配置,如下所示。
CREATE DIRECTORY utlfile AS '/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR';
alter system set utl_file_dir='/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR' scope=spfile;  

4、创建数据字典,切换到要同步数据的用户,以DBA身份登录,创建数据字典文件,如下所示。

conn sys/sys@helowin as sysdba;  

EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR'); 

5、加入需要分析的日志文件

EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/app/oracle/oradata/helowin/redo01.log',options=>dbms_logmnr.NEW);  
EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/app/oracle/oradata/helowin/redo02.log',options=>dbms_logmnr.ADDFILE);  
EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/app/oracle/oradata/helowin/redo03.log',options=>dbms_logmnr.ADDFILE);  

6、使用Lominer分析日志

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora');  

7、读取

SELECT sql_redo FROM v$logmnr_contents WHERE seg_name='TEST' AND seg_owner='LUCAS';

8、停止分析

EXECUTE DBMS_LOGMNR.END_LOGMNR;

Extra:赋予用户权限

GRANT CONNECT,RESOURCE,DBA TO lucas;
GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO lucas;
GRANT CREATE SESSION TO lucas;
 GRANT SELECT ON V_$DATABASE to lucas;
 GRANT FLASHBACK ANY TABLE TO lucas;
 GRANT SELECT ANY TABLE TO lucas;
 GRANT SELECT_CATALOG_ROLE TO lucas;
 GRANT EXECUTE_CATALOG_ROLE TO lucas;
 GRANT SELECT ANY TRANSACTION TO lucas;
 GRANT EXECUTE ON SYS.DBMS_LOGMNR TO lucas;
 GRANT SELECT ON V_$LOGMNR_CONTENTS TO lucas;
 GRANT CREATE TABLE TO lucas;
 GRANT LOCK ANY TABLE TO lucas;
 GRANT ALTER ANY TABLE TO lucas;
 GRANT CREATE SEQUENCE TO lucas;
 GRANT EXECUTE ON DBMS_LOGMNR TO lucas;
 GRANT EXECUTE ON DBMS_LOGMNR_D TO lucas;
 GRANT SELECT ON V_$LOG TO lucas;
 GRANT SELECT ON V_$LOG_HISTORY TO lucas;
 GRANT SELECT ON V_$LOGMNR_LOGS TO lucas;
 GRANT SELECT ON V_$LOGMNR_CONTENTS TO lucas;
 GRANT SELECT ON V_$LOGMNR_PARAMETERS TO lucas;
 GRANT SELECT ON V_$LOGFILE TO lucas;
 GRANT SELECT ON V_$ARCHIVED_LOG TO lucas;
 GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO lucas;

添加新评论

  1. 想想你的文章写的特别好https://www.237fa.com/

    Reply
  2. 不错不错,我喜欢看 https://www.ea55.com/

    Reply
  3. 看的我热血沸腾啊https://www.ea55.com/

    Reply
  4. 《南京大屠杀(录影带版)》记录片高清在线免费观看:https://www.jgz518.com/xingkong/146899.html

    Reply
  5. 你的文章让我感受到了生活的美好,谢谢! https://www.yonboz.com/video/5673.html

    Reply
  6. 你的文章充满了智慧,让人敬佩。 http://www.55baobei.com/vZ7KvLTaFe.html

    Reply
  7. 你的文章充满了欢乐,让人忍不住一笑。 http://www.55baobei.com/ljRSUJdFmW.html

    Reply
  8. 《巴哥正传》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/30381.html

    Reply
  9. 哈哈哈,写的太好了https://www.lawjida.com/

    Reply
  10. 以终为始的思考方式为行业指明方向。

    Reply