以前文章《从ORACLE/MySQL到OceanBase序列》介绍了从 ORACLE/MySQL 到 OceanBase 中使用问题,还缺一个兼容性评估工具介绍。OceanBase 发布了工具 OMA (OceanBase Migration Assessment)填补了这一环。本文分享 ORACLE 迁移到 OceanBase 的兼容性评估工具的使用。需要评估 ORACLE 迁移到 OceanBase 兼容性大概成本的朋友可以看看,工具暂时官网没有放出,可以联系我获取。

软件包

软件包很简单,就是一个使用文档《OceanBase 迁移评估 V2.2.0 产品手册 20201201.pdf》和一个压缩文件。直接解压缩可用。工具还在迭代开发中,不同版本功能会有些差异,文件名也不一样。

$ls -lrth Oracle2OB-2.2.0.tar.gz
-rw-r--r-- 1 obpilot users 61M Dec 6 09:07 Oracle2OB-2.2.0.tar.gz
$tar zxvf Oracle2OB-2.2.0.tar.gz

使用方法

[root@ocp /root/Oracle2OB-2.2.0]
#sh bin/OracleToOb.sh analyze-object --help

$sh bin/OracleToOb.sh --help
get version from META-INF.
Welcome to Oceanbase Migration Assessment Tool 2.2.0
Usage: OracleToOb.sh [options] [command] [command options]
Options:
-h, --help
参数说明
Default: false
Commands:
dump Dump数据库对象成为ddl文件
Usage: dump [options]
Options:
--blacklist
待评估数据库对象黑名单
-c, --config
配置文件,注意其参数会被对应命令行参数覆盖
-d, --dialect
生成DDL语句的语法方言
Possible Values: [AS_SOURCE, AS_TARGET]
--docker-conn
docker宿主机连接方式
-f, --file
待评估的sql文件目录
-e, --file-encoding
配置文件字符编码,默认UTF-8
Default: UTF-8
--file-type
待评估文件类型OMA|SQLAREA|MABATIS
--help
参数说明
Default: false
-h, --host
待评估数据库地址
--image
镜像名称
--image-path
镜像路径
-t, --object-types
待评估数据库对象类型
-p, --password
待评估数据库密码
-P, --port
待评估数据库端口
--scanner
scanner类型
Default: NOT_SCAN
Possible Values: [FILEREADER, CRAWLER, NOT_SCAN]
-s, --schema
待评估的数据库schema
--schemas
待评估的数据库schema列表, 会与-s/--schema的参数叠加
--service
待评估Oracle数据库service name
--sid
待评估Oracle数据库sid
--source-db-connectionTimeout
待评估数据库连接超时参数
Default: -1
--source-db-type
待评估数据库类型
--source-db-version
待评估数据库版本
--target-db-connectionTimeout
目标OceanBase数据库连接超时参数
Default: 0
--target-db-host
目标OceanBase数据库地址
--target-db-password
目标OceanBase数据库用户密码
--target-db-port
目标OceanBase数据库端口
--target-db-schema
目标库schema,
注意pl对象中的语句可能包含对源schema的引用,将不会被转换,可能会导致dump出的pl对象创建语句无法在目的库成功执行
--target-db-service
目标oracle service name
--target-db-sid
目标oracle sid
--target-db-type
目标OceanBase数据库租户类型 OBORACLE|OBMYSQL
--target-db-user
目标OceanBase数据库用户名
--target-db-version
目标OceanBase数据库版本
-u, --user
待评估数据库用户名
--whitelist
待评估数据库对象白名单
-D
其它辅助参数
Syntax: -Dkey=value
Default: {}

analyze-object 评估数据库对象的兼容性
Usage: analyze-object [options]
Options:
--blacklist
待评估数据库对象黑名单
-c, --config
配置文件,注意其参数会被对应命令行参数覆盖
--docker-conn
docker宿主机连接方式
-f, --file
待评估的sql文件目录
-e, --file-encoding
配置文件字符编码,默认UTF-8
Default: UTF-8
--file-type
待评估文件类型OMA|SQLAREA|MABATIS
--help
参数说明
Default: false
-h, --host
待评估数据库地址
--image
镜像名称
--image-path
镜像路径
-t, --object-types
待评估数据库对象类型
-p, --password
待评估数据库密码
-P, --port
待评估数据库端口
--scanner
scanner类型
Default: NOT_SCAN
Possible Values: [FILEREADER, CRAWLER, NOT_SCAN]
-s, --schema
待评估的数据库schema
--schemas
待评估的数据库schema列表, 会与-s/--schema的参数叠加
--service
待评估Oracle数据库service name
--sid
待评估Oracle数据库sid
--source-db-connectionTimeout
待评估数据库连接超时参数
Default: -1
--source-db-type
待评估数据库类型
--source-db-version
待评估数据库版本
--target-db-connectionTimeout
目标OceanBase数据库连接超时参数
Default: 0
--target-db-host
目标OceanBase数据库地址
--target-db-password
目标OceanBase数据库用户密码
--target-db-port
目标OceanBase数据库端口
--target-db-schema
目标库schema,
注意pl对象中的语句可能包含对源schema的引用,将不会被转换,可能会导致dump出的pl对象创建语句无法在目的库成功执行
--target-db-service
目标oracle service name
--target-db-sid
目标oracle sid
--target-db-type
目标OceanBase数据库租户类型 OBORACLE|OBMYSQL
--target-db-user
目标OceanBase数据库用户名
--target-db-version
目标OceanBase数据库版本
-u, --user
待评估数据库用户名
--whitelist
待评估数据库对象白名单
-w, --with-evaluator
评估方式
Possible Values: [PARSER, DB, CRAWLER]
-D
其它辅助参数
Syntax: -Dkey=value
Default: {}

analyze-sql 评估sql语句(包含plsql)的兼容性
Usage: analyze-sql [options]
Options:
--blacklist
待评估数据库对象黑名单
-c, --config
配置文件,注意其参数会被对应命令行参数覆盖
--docker-conn
docker宿主机连接方式
-f, --file
待评估的sql文件目录
-e, --file-encoding
配置文件字符编码,默认UTF-8
Default: UTF-8
--file-type
待评估文件类型OMA|SQLAREA|MABATIS
--help
参数说明
Default: false
-h, --host
待评估数据库地址
--image
镜像名称
--image-path
镜像路径
-t, --object-types
待评估数据库对象类型
-p, --password
待评估数据库密码
-P, --port
待评估数据库端口
--scanner
scanner类型
Default: NOT_SCAN
Possible Values: [FILEREADER, CRAWLER, NOT_SCAN]
-s, --schema
待评估的数据库schema
--schemas
待评估的数据库schema列表, 会与-s/--schema的参数叠加
--service
待评估Oracle数据库service name
--sid
待评估Oracle数据库sid
--source-db-connectionTimeout
待评估数据库连接超时参数
Default: -1
--source-db-sql
定义查询语句执行以从数据库中获取采集到的sqlarea sql语句
--source-db-type
待评估数据库类型
--source-db-version
待评估数据库版本
--target-db-connectionTimeout
目标OceanBase数据库连接超时参数
Default: 0
--target-db-host
目标OceanBase数据库地址
--target-db-password
目标OceanBase数据库用户密码
--target-db-port
目标OceanBase数据库端口
--target-db-schema
目标库schema,
注意pl对象中的语句可能包含对源schema的引用,将不会被转换,可能会导致dump出的pl对象创建语句无法在目的库成功执行
--target-db-service
目标oracle service name
--target-db-sid
目标oracle sid
--target-db-type
目标OceanBase数据库租户类型 OBORACLE|OBMYSQL
--target-db-user
目标OceanBase数据库用户名
--target-db-version
目标OceanBase数据库版本
-u, --user
待评估数据库用户名
--whitelist
待评估数据库对象白名单
-w, --with-evaluator
评估方式
Possible Values: [PARSER, DB, CRAWLER]
-D
其它辅助参数
Syntax: -Dkey=value
Default: {}

命令行的参数还是很丰富的。这里简单介绍一下,主要是要指定下列参数:

  • 指定是根据 SQL Parser 规则评估 还是连接到一个目标 OB 去评估。如果没有 OB 目标环境就选择 Parser 评估。通常使用目标 OB 环境去评估更精准。OB 安装部署方法可以参考以前文章。
  • 指定源库 ORACLE 的版本、连接账户密码(DBA 权限)、源 SCHEMA(需要评估的 SCHEMA)。
  • 指定目标 OB(如果有的话)连接账户密码(ORACLE 租户的 DBA 权限)、目标 SCHEMA(空的,没有数据库对象)。
  • 指定目标 OB 或要评估的 OB 版本号。

使用示例

找一个 ORACLE 环境。这里我网上下载了一个 ORACLE 镜像用来测试。源 SCHEMA 使用 ORACLE 的示例 SCHEMA HR 。

#docker images
REPOSITORY
reg.docker.alibaba-inc.com/oceanbase-platform/oracle-xe-11g 1.0.0 ad13c30ec346 22 months ago 2.13GB

#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab9c12e442c6 reg.docker.alibaba-inc.com/oceanbase-platform/oracle-xe-11g:1.0.0 "/bin/sh -c '/usr/sb…" 4 months ago Up About an hour 22/tcp, 8080/tcp, 0.0.0.0:1521->1521/tcp oracle-xe-11g

根据语法规则评估 ORACLE 的 HR 在 OB(ORACLE)上兼容性 (2 选 1)。

sh bin/OracleToOb.sh analyze-object --with-evaluator parser --source-db-type ORACLE --source-db-version 11g -h 172.17.0.2 -P 1521 --sid XE -p obdba --user obdba --schema HR --target-db-type OBORACLE --target-db-version 2.2.70

get version from META-INF.
Welcome to Oceanbase Migration Assessment Tool 2.2.0
Start to query source schema [HR]
Progress to query table [7/7]
Preprocessed objects: [4/65]
ANALYZE database jdbc:oracle:thin:@172.17.0.2:1521:XE schema HR finish analysis

根据目标 OB 评估 ORACLE 的 HR 在 OB(ORACLE)上兼容性 (2 选 1)。

sh bin/OracleToOb.sh analyze-object --with-evaluator db --source-db-type ORACLE --source-db-version 11g -h 127.0.0.1 -P 1521 --sid XE -u obdba -p obdba -s HR --target-db-type OBORACLE --target-db-version 2.2.70 --target-db-host 11.***.***.*39 --target-db-user obdba@oboracle#obtest --target-db-password obdba --target-db-port 2883 --target-db-schema hr

get version from META-INF.
Welcome to Oceanbase Migration Assessment Tool 2.2.0
Start to query source schema [HR]
Progress to query table [7/7]
Preprocessed objects: [65/65]
Evaluated objects: [5/20]


查看报告

报告在软件目录的 analysis 目录下

[obpilot@xxxxxx /home/obpilot/Oracle2OB-2.2.0]
$ls -lrth analysis/
total 40K
-rw-r--r-- 1 obpilot users 16K Dec 6 09:17 HR.20201206091727.html
-rw-r--r-- 1 obpilot users 3.4K Dec 6 09:17 HR.20201206091727.incompatible.txt
-rw-r--r-- 1 obpilot users 3.4K Dec 6 09:43 HR.20201206094318.incompatible.txt
-rw-r--r-- 1 obpilot users 16K Dec 6 09:43 HR.20201206094318.html

报告会把不兼容的对象的 ddl 单独列出,也有一个 html 文件用于看总报告。

从ORACLE/MySQL到OceanBase:ORACLE 兼容性评估_数据库

从ORACLE/MySQL到OceanBase:ORACLE 兼容性评估_docker_02

不兼容的部分可能有两个原因是 OB(ORACLE)对 ORACLE DDL 的一些细项功能还不支持,通常后续版本会支持。OceanBase 当前和后续版本重点发展方向之一就是 进一步丰富 ORACLE 兼容性 。你可以随时跟 OB 技术支持人员获取最新版本的 OB 或者 OMA 来评估你的 ORACLE 业务。问题反馈OceanBase 使用问题讨论

其他参考