OBCP4X数据迁移集成技术知识点总结

数据迁移集成技术知识点总结
外表概述
外表的概念:通过SQL定义数据库外的文本文件的解析格式,实现SQL直接查询、统计分析文本文件的能力
使用场景
针对外表,可以查询、排序、聚合等读取操作
支持与其它表关联查询,包括外表和普通表
不支持针对外表创建索引或约束
不支持通过SQL修改外表的数据
可通过外表实现跨系统平台和异构数据源进行数据移动
通过外部表导入数据到实体表

数据库中的表数据存放在数据库的存储空间中,而外表的数据存储在外部存储服务中。
创建外表时,需要定义数据文件路径和数据文件的格式。
创建成功后,可以通过外表从外部存储服务中读取文件中的数据。
外表与普通表的差异如下:
外表的数据存储在外部文件中,普通表的数据存储在数据库中。
外表是只读的,可以在查询语句使用,但不能执行DML 操作。
外表不支持添加约束和创建索引。
外表的访问速度会慢于普通表。

外部表的文件可以存储在observer节点的本地磁盘,也可以存在远程目录上,目前支持OSS和COS两种,采用本地目录的时候需要设置安全目录,采用远程目录的时候不需要设置
设置安全目录的语句如下
#在需要设置租户对应的OBServer节点上,通过unix socket建立obclient连接
obclient -S ObServer安装目录下的run/sql.sock -u用户名@租户名-p
#配置安全目录
obclient> SET GLOBAL secure_file_priv = “/home/test”;

查看安全目录的设置是否生效通过下面的语句查询
show variables like ‘secure_file_priv’;

创建外部表的时候需要执行 location选项,改选项要求为安全目录的子目录,比如安全目录路径为 /home/admin 那么location目录需要设置为 /home/admin下面的子目录。比如/home/admin/extDir

CREATE EXTERNAL TABLE ext_t3
(id int, name char(10),score int)
LOCATION = ‘file:///home/admin/extDir/’
FORMAT = (
TYPE = ‘CSV’
FIELD_DELIMITER = ‘,’
FIELD_OPTIONALLY_ENCLOSED_BY =’"’
)
PATTERN = ‘data.csv’;

PATTERN:用于指定正则模式串,过滤LOCATION 目录下的文件。
对每个LOCATION 目录下的文件,如果能够匹配该模式串,
则外表就可以访问该文件,否则外表会跳过该文件。如果不指
定该参数,则默认可以访问LOCATION 目录下的所有文件。

在使用本地外表文件时,Oceanbase 支持分布式外表。当多台OBServer 节点上的secure_file_priv 目录均有匹配外表文件PATTERN 的文件时,一张外表会同时关联多个节点上的外表文件。

用户租户可以通过ALL_OB_EXTERNAL_TABLE_FILES 视图和DBA_OB_EXTERNAL_TABLE_FILES 视图来查看外表信息
外表创建后,如果外部目录新增了其他文件(该文件在LOCATION 中指定的路径下且匹配PATTERN),需要执行更新外表文件的操
作,才能通过外表访问新增的文件。
刷新外表数据,SQL语句:ALTER EXTERNAL TABLE table_name REFRESH

  1. 查询外表时,如果外表所访问的外部文件已删除,系统不会报错,会返回空行。
  2. 由于外表所访问的文件由外部存储系统进行管理,当外部存储不可用时,查询外表将会报错。

外表可以和普通表关联查询
可以把外表的数据通过select into 到普通表中
外表支持通过加HINT进行并行查询
外表支持select into outfile的方式对数据进行导出

OUTFILE 导出数据
SELECT INTO OUTFILE可通过SQL将查询结果集导出为文本文件
INTO OUTFILE file_route_option,导出文件路径(file_route_option)支持本地和远程(如:阿里云对象存储OSS)。
本地文件需要设置安全目标,且ObServer所在服务器的admin用户要有操作安全目录的权限

自定义导出文件格式,包括分隔符、换行符、字段包裹符
FIELDS|COLUMNS TERMINATED BY 指定列分割符
FIELDS|COLUMNS [OPTIONALLY] ENCLOSED BY 指定字段包裹符,如果使用了OPTIONALLY 关键字,则仅对字
符串类型的值使用指定字符包裹。
LINES TERMINATED BY 指定换行符

外表与普通表关联查询结果集,也可通过OUTFILE 导出数据。
外部表也可以通过outfile导出数据

服务器文件导入

load data可将外表文件加载到数据库表中
采用服务器端文件导入需要设置安全目录,并对导入用户设置文件操作权限。

本地和远程文件导入

本地目前只支持在对应的obsserver节点上的目录
远程导入支持OSS

客户端本地文件加载,obclient 带–local-infile启动,数据库版本为4.2.2及以上,且oblient版本为V2.2.4及以上

并行导入数据提升导入效率,/*+ parallel(N) */,N默认为4。

load data语句会在OBServer服务器下的log目录中生成obloaddata.log.的日志文件,详细记录报错的情况。
目录的路径为 :/home/admin/oceanbase/log/obloaddata.log

旁路导入概述

旁路导入适用于大批量数据导入的场景,如数据迁移和同步、ETL数据装载、文本文件导入数据
支持的语法:
LOAD DATA /*+ direct(need_sort,max_error)|APPEND parallel(N) / INFILE ‘file_name’ …
APPEND 等同于使用的direct(true, 0),同时实现在线收集统计信息(GATHER_OPTIMIZER_STATISTICS Hint)的功能
INSERT /
+ append enable_parallel_dml parallel(N) */ INTO table_name select_sentence
OBLoader(后续章节介绍)此处说明obdloder也是支持旁路导入的

注意事项:
旁路导入会把所有的已有的数据都写一遍。如果原表的数据比较大,导入的数据比较少,可能不适合使用旁路导入。
对于数据量较小的导入任务,不建议使用旁路导入。
不能两个语句同时写一个表,因为导入的过程中会先加表锁。
LOAD DATA 操作中采用了并行设计,每个子任务都作为一个独立的事务进行处理,并且执行顺序是随机的。
旁路导入属于DDL 语句,无法在多行事务(包含多个操作的事务)中执行,不能在Begin 中执行,会自动提交(Autocommit 必须设置为1)

DBCAT 是一款轻量级的命令行工具,可用于提供数据库之间DDL 转换(convert)和Schema 比对(compare)
等功能。
dbcat convert可将TiDB、PG、SYBASE、ORACLE、DB2、MySQL等与OBOracle或OBMysql之间进行对象转换,
也可将OB对象转换到MySQL或ORACLE
#mysql到obmysql模式转换
./dbcat convert -H192.168.111.54 -P3306 -uroot -p’’ -D test --from mysql80 --to obmysql40 --all
#mysql到oboracle模式转换
./dbcat convert -H192.168.111.54 -P3306 -uroot -p’
’ -D test --from mysql80 --to oboracle40 --all

dbcat表结构比对,支持MYSQL、ORACLE、SYBASE与OBMysql、OBOracle进行表结构对比

用法

./dbcat compare --config-file …/conf/dbcat.properties

修改dbcat.properties配置文件,设置源和目标的JDBC连接、用户、密码、版本等。

#比较结果在output下生成*verify.html

OMA迁移评估概述

OceanBase 迁移评估(OceanBase Migration Assessment,OMA)是OceanBase 提供的数据库迁移评估产品,支持
对常见的关系型数据库Oracle、MySQL、PostgreSQL、DB2等迁移到OceanBase时,涉及的数据库对象和SQL语句提供
兼容性评估、性能评估,并提供数据库画像分析和对象自动转换方案。
OMA 是连接待评估的数据库和目标库(通常为OceanBase 数据库)的中间工具。待评估数据库或负载信息采集对应的
对象详情和SQL 详情,内置的OB Parser 对采集的对象和SQL 进行兼容性分析,根据应用场景的不同,生成评估报告。
OMA 4.×.×版本需要Java1.8 版本的环境,运行的基本配置需要8C16G起,至少2GB的磁盘空间。
OMA运行只需要解压相应版本的oma-x.x.x.tar.gz,执行其中的start.sh 或start.bat脚本即可, --help获取参数帮助信息

OMS

OMS的底层组件包括了负责结构迁移的组件DBCat、增量拉取组件Store、全量导入组件Full-Import、增量同步
组件Incr-Sync、全量校验组件Full-Verification、组件监控管理Supervisor。

全量数据复制
将全量源端的存量数据全部迁移或同步到目标端。
全量数据读取采用JDBC读取,根据源端的元信息,
包括库、表、主键或非空唯一键、列等,选择合适
的数据切片方法进行数据分片,分别读取数据。
全量数据写入也是通过JDBC进行,支持按照最小
切片点进行断点续传。

数据校验
Full-Verification 组件负责从源端和目标端读取数
据,并根据映射关系(依赖索引信息)对两端的数
据进行全字段对比,对比结果包括差异数据文件和
订正SQL 文件。

增量数据复制
通过store组件读取源端CDC数据同步到目标端, Store 组件是基于日志的CDC,Store由Reader 和本地储存构成,不同的
数据源对应不同的Reader组件,包括Oracle Reader(基于Oracle LogMiner 来获取增量变更日志)、MySQL Reader(基于
Binlog)、OB Reader(基于Clog)、DB2 Reader(基于db2ReadLog API 读取日志记录)等。
数据读取时,解析store组件传递的消息,将消息转换成框架适配的RecordBatch。
数据写入时,以主键/唯一键索引作为关键字,将Incr-Sync 程序内存中的消息形成一张链式列表,保持原有事务的序。
增量数据复制支持断点续传,依赖Incr-Sync 维护框架内最小写入消息的Checkpoint 并定期存储实现。

OMS数据迁移支持实时迁移其它数据源的数据至OceanBase 数据库,以及迁移OceanBase 数据库的数据至其它数据源。
对表是否有主键有一些限制,其中部分数据如MySQL、Oracle为源端时,支持无主键表,OMS会在迁移过程中自动创建隐
藏列及唯一索引;而对于TiDB、PostgreSQL 、DB2 LUW作为源端时,不支持无主键表。
在少数场景下不支持增量DDL,如Oracle-> OB_MySQL、TiDB → OB_MySQL、PostgreSQL → OB_MySQL、OB_Oracle → MySQL等。
并不是所有类型的DDL都支持,支持的DDL范围,可在选择同步类型页面查看

OMS数据同步支持OceanBase 数据库的两种租户和Kafka、RocketMQ、DataHub 之间进行实时数据同步,以及同步其它类型
数据库的数据至RocketMQ,并支持同步ODP/IDB逻辑表至OceanBase 数据库MySQL 租户的物理表和DataHub。
均不支持无主键表。
目标端为DataHub(Blob)、Kafka、OB_MySQL时,大多场景均支持增量DDL。
并不是所有类型的DDL都支持同步,支持同步的DDL范围,可在选择同步类型页面查看。
在MySQL/Oracle同步到DataHub时,不支持全量同步。

数据同步
当源端为 ob-mysql/ob-oracle的时候目标端支持Kafka、RocketMQ、DataHub
端源端为 mysql/oracle的时候 目标端支持DataHub

OBLoader / OBDumper

OBLoader功能概述
支持的存储介质包括:本地磁盘、HDFS、对象存储(阿里云OSS、亚马逊S3、腾讯云COS、华为云OBS)。
支持的导入数据文件格式包括:CSV、DDL、ORC、Cut、Parquet、Avro等包括普通文本、SQL以及大数据等格式文件。
支持多线程、数据逻辑切分、直接路径等方式提升导入速率。
支持自定义导入对象,包括:表、视图、库等。
支持对导入数据的轻量级自定义加工。
支持多种错误数据的处理机制。

OBDumper功能概述
支持的存储介质包括:本地磁盘、对象存储(阿里云OSS、亚马逊S3、腾讯云COS、华为云OBS)。
支持的导出数据文件格式包括:CSV、SQL、ORC、Cut、Parquet、Avro等。
支持自定义导出对象,包括:表、视图、库等。
支持对导出数据预处理、过滤处理、自定义SQL等操作。
支持从备副本、快照版本导出数据

obloader相比obdumper 支持介质上多了HDFS

OBLoader 自定义CSV格式

OBLoader针对CSV格式数据文件的导入提供多种选项用于灵活配置文件格式,
包括:
是否跳过文件头(–skip-header)
自定义字符串定界符(–column-delimiter 'column_delimiter_char’)
自定义行分割符(–line-separator 'line_separator_string’)
自定义列分割符(–column-separator 'column_separator_char’)
设置数据库连接串字符集(见下)
自定义需要替换为NULL的字符(–null-string 'null_replacer_string’)
自定义需要替换为空字符的字符(–empty-string
'empty_replacer_string’)
自定义数据文件的后缀名(–file-suffix 'suffix_name’)
设置CSV文件的字符编码(见下)等。
character-set && file-encoding的区别
–character-set用于指定数据库连接串字符集,与数据库编码一致
–file-encoding用于指定CSV文件的字符编码,用于文件读取解析

3 个赞

4X的OBCP题库的题非常多,知识点也出的非常的细,PPT一定要仔细的看,出题的范围就在PPT之内

2 个赞

感谢分享

2 个赞

可以可以

2 个赞

很棒的总结

2 个赞

正在看obcp的ppt,考点来自ppt,实操来自文档,特别是优化部分
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000305913

3 个赞

OBCP V4必须要背PPT了

3 个赞

感谢感谢

2 个赞

背是前提,重要的是要理解每个知识点

2 个赞

理解+实验,死记硬背不可取。我过了一遍pdf,考了68分

1 个赞

学习总结经验 :+1: :+1: :+1:

1 个赞

我考了79.5,改错了一道题,不然就过了

1 个赞

大佬,方便加微交流吗?

真的吗?

外表的数据就是存储在外部文件中,普通表的数据存储在数据库的数据文件中,我觉得这个没什么疑问啊

可以交流一下考试心得