暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB 开源组件compat-tools

mogdb 2021-07-14
855

介绍

本项目是一个兼容工具集合,旨在为从其他异构数据库,迁移到 OpenGauss 之后的系统,创建必要的函数,以及系统视图的兼容。为后续的系统运维与应用改造提供便利。

脚本中带有版本控制,直接运行脚本时,会根据如下三种情况进行处理:

  1. 若待创建对象在目标数据库中不存在,则直接进行创建
  2. 若待创建对象版本高于目标数据库中的对象版本,则进行升级重建
  3. 若待创建对象版本不高于目标数据库中的对象版本,则跳过创建


软件架构

SQL文件:

  • runMe.sql: 总调度脚本
  • Oracle_Views.sql: Oracle数据库兼容性数据字典及视图
  • Oracle_Functions.sql: Oracle数据库兼容性函数
  • Oracle_Packages.sql: Oracle数据库管理包兼容
  • MySQL_Views.sql: MySQL数据库兼容性数据字典及视图 //TODO
  • MySQL_Functions.sql: MySQL数据库兼容性函数 //TODO


使用说明

直接在MogDB数据库中执行sql文本。

创建所有兼容性对象

创建所有兼容性对象,包括:视图,函数,管理包等。

# 本地用户,默认库登录
gsql -f runMe.sql
# 详细创建语法,注意 test 用户权限(需要具有 sysadmin 权限)
gsql -h 127.0.0.1 -p 5432 -U test -d postgres -f runMe.sql
复制

创建单一类兼容对象

以下以 Oracle 兼容性视图为例,其他兼容性对象脚本,也可以以此方式创建。

# 本地用户,默认库登录
gsql -f Oracle_Views.sql
# 详细创建语法,注意 test 用户权限(需要具有 sysadmin 权限)
gsql -h 127.0.0.1 -p 5432 -U test -d postgres -f Oracle_Views.sql
复制


Oracle 兼容视图

Oracle_Views.sql 包含如下几类 Oracle 兼容性视图:

管理视图: ALL*, DBA, USER_

ALL 视图当前与 DBA 视图一致,并未做权限检验,后期版本将会考虑权限校验。

  • [DBA,ALL,USER]_CATALOG
  • [DBA,ALL,USER]_CONS_COLUMNS
  • [DBA,ALL,USER]_CONSTRAINTS
  • [DBA,ALL,USER]_DATA_FILES
  • [DBA,ALL,USER]_DEPENDENCIES
  • [DBA,ALL,USER]_IND_COLUMNS
  • [DBA,ALL,USER]_IND_PARTITIONS
  • [DBA,ALL,USER]_IND_STATISTICS
  • [DBA,ALL,USER]_INDEX_USAGE
  • [DBA,ALL,USER]_INDEXES
  • [DBA,ALL,USER]_OBJECTS
  • [DBA,ALL,USER]_PART_INDEXES
  • [DBA,ALL,USER]_PART_TABLES
  • [DBA,ALL,USER]_PROCEDURES
  • [DBA,ALL,USER]_SEGMENTS
  • [DBA,ALL,USER]_SEQUENCES
  • [DBA,ALL,USER]_SOURCE
  • [DBA,ALL,USER]_SYNONYMS
  • [DBA,ALL,USER]_TAB_COL_STATISTICS
  • [DBA,ALL,USER]_TAB_COLS
  • [DBA,ALL,USER]_TAB_COLUMNS
  • [DBA,ALL,USER]_TAB_COMMENTS
  • [DBA,ALL,USER]_TAB_MODIFICATIONS
  • [DBA,ALL,USER]_TAB_PARTITIONS
  • [DBA,ALL,USER]_TAB_STATISTICS
  • [DBA,ALL,USER]_TABLES
  • [DBA,ALL,USER]_TABLESPACES
  • [DBA,ALL,USER]_TRIGGER_COLS
  • [DBA,ALL,USER]_TRIGGERS
  • [DBA,ALL,USER]_TYPES
  • [DBA,ALL,USER]_VIEWS
  • [DBA,ALL]_USERS
  • DBA_SOURCE_ALL

其他短名称视图

  • DICTIONARY
  • DICT
  • COLS
  • IND
  • OBJ
  • TAB
  • DUAL (For 2.0 and above)

动态性能视图: GV,V

  • [GV,V]$DATAFILE
  • [GV,V]$LOCK
  • [GV,V]$PARAMETER
  • [GV,V]$PARAMETER_VALID_VALUES
  • [GV,V]$SESSION
  • [GV,V]$SESSTAT
  • [GV,V]$SPPARAMETER
  • [GV,V]$SYSSTAT
  • [GV,V]$TABLESPACE
  • [GV,V]$VERSION

权限统一查询视图

  • DBA_DETAIL_PRIVILEGES
  • DBA_ALL_PRIVILEGES
  • DBA_ALL_PRIVILEGES_SQL


Oracle 兼容函数

字符函数

  • regexp_substr(text,text,int4)
  • regexp_substr(text,text,int4,int4,text,int4) -- 注意: 最后一个参数 p_subexpr 不支持
  • regexp_instr(text,text,int4,int4,text,int4)
  • regexp_replace(text,text,text,int4,int4,text)
  • regexp_count(text,text,int4,text)
  • replace(text,text)

时间函数

  • months_between(timestamp, timestamp)
  • trunc(timestamp, text)
  • trunc(timestamptz, text)
  • round(timestamptz,text)

数字函数

  • nanvl(numeric,numeric)

聚合函数

  • wm_concat(text)

NULL 值相关函数

  • nullif(anyelement, anyelement)
  • nvl2(anyelement, anyelement, anyelement)

其他函数

  • sys_guid()
  • ora_hash(anyelement,bigint,bigint)
  • show(text) -- 提供类似 Oracle 中 show xxx 查看相关参数的功能
  • show_parameter(text) -- 等同于 show(text)


Oracle 管理包

DBMS_METADATA

  • get_ddl(object_type, object_name, schema_name)

DBMS_OUTPUT

  • enable(size)
  • disable()
  • get_line(line, status)
  • get_lines(lines, numlines)
  • new_line()
  • put(text)
  • put_line(text)

DBMS_RANDOM

  • initialize(int4) -- deprecated in Oracle
  • normal()
  • random() -- deprecated in Oracle
  • seed(int4)
  • seed(text)
  • string(char,int4)
  • terminate() -- deprecated in Oracle
  • value()
  • value(numeric,numeric)

关于如何使用DBMS_RANDOM在MogDB数据库中生成随机数(数字、字符串和日期),请参见DBMS_RANDOM


MySQL 兼容函数

字符函数

  • find_in_set(text,text)
  • find_in_set(text,text[])

NULL值相关函数

  • ifnull (text, text)
  • ifnull (numeric, numeric)
  • ifnull (timestamp, timestamp)
  • ifnull (timestamptz, timestamptz)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论