当前位置:网站首页>金仓数据库 Oracle至KingbaseES迁移最佳实践(2. 概述)
金仓数据库 Oracle至KingbaseES迁移最佳实践(2. 概述)
2022-07-27 18:07:00 【沉舟侧畔千帆过_】
2. 概述
本章节包含以下内容:
2.1. Oracle兼容特性概览
通常,异构数据库移植的工作量繁重。这些工作量主要来源于:在数据类型、SQL语言、PL/SQL语言、甚至客户端应用编程接口等诸多方面对两个数据库所进行的、大量的语法或功能的对齐处理。
同样的,从Oracle向KingbasES移植的情况也如此。为降低移植工作量,KingbaseES在其内部实现了大量的Oracle兼容特性。这些特性 从语法或功能上对Oracle提供了原生支持。因此,在移植过程中,Oracle程序只需很少甚至不做任何改动就能在KingbaseES环境中运行。
此外,对未提供原生支持的Oracle功能,KingbaseES也给出了相应的移植建议。
2.1.1. 数据类型
数据类型是描述数据库系统底层信息资源模式的常用手段。通常,两个数据库系统数据类型的兼容好坏直接影响移植的难易程度。因此,KingbaseES对Oracle的特有数据类型提供了全面的原生支持。这些类型如Oracle的NUMBER、VARCHAR2、CHAR(n)和DATE等。不仅如此,KingbaseES对Oracle PL/SQL中使用的复杂数据类型也提供了兼容性支持,这些类型如Oracle的RECORD类型、%TYPE属性、%ROWTYPE属性、关联数组、可变数组和嵌套表等。
关于interval数据类型目前 V8.6 和Oracle有些差异,主要是精度和语法格式方面。精度方面,V8.6 interval默认精度为6位,Oracle默认精度为9位;语法格式方面,Oracle支持的语法 V8.6 基本都支持。所以在移植方面主要是精度有些差异,从Oracle移植到 V8.6 数据可能会被截断。
2.1.2. SQL语句
在KingbasES中,对大多数常用的Oracle特有SQL语句均提供了原生支持。这项措施使得Oracle应用程序在KingbaseES系统中通常只需很少的代码变动就可正常运行。
KingbaseES主要兼容如下Oracle的 SQL语句:
TRUNCATE语句
层次查询
DUAL伪表
SELECT INTO 的FOR UPDATE语句
UPDATE[前缀]多列更新
INSERT INTO TABLE([前缀]列)
DELETE [FROM]语句
支持WITH子句
支持DBLINK
支持CREATE FORCE VIEW
支持SEQUENCE访问子句
上述这些SQL语句均从语法和语义上实现了Oracle兼容。
2.1.3. PL/SQL语法
KingbaseES支持如下Oracle PL/SQL的常用语法:
赋值语句
IF-THEN-ELSE 语句
CASE 语句
多种循环语句,如LOOP 语句、WHILE-LOOP 语句和FOR LOOP 语句
GOTO 语句
%TYPE 属性和%ROWTYPE 属性
REF CUSOR 游标
%NOTFOUND、%FOUND、%ISOPEN 和 %ROWCOUNT 游标属性
RETURNING INTO 语句
EXECUTE IMMEDIATE 语句
支持 BULK COLLECT
PL/SQL 支持集合类型(关联数组、嵌套表、可变数组)
PL/SQL 异常处理
FORALL 语句
2.1.4. PL/SQL对象
KingbaseES支持如下Oracle PL/SQL对象:
内置标量函数
行级BEFORE触发器
行级AFTER触发器
INSTEAD OF触发器
匿名块
存储过程
函数
子类型
对象类型
包
2.1.5. 客户端SQL交互工具
在实际应用中,通常客户DDL脚本和报表是通过SQL交互工具移植的。针对这种情况,KingbaseES提供了如下SQL交互工具:
KSQL:命令行的SQL交互工具,类似Oracle的 SQL* PLUS。
数据库系统管理工具:图形化的SQL交互工具,类似Oracle的SQL Developer图形化工具。
通过上述工具,用户可连接数据库服务器,运行数据库实用程序,发送SQL语句,运行SQL脚本,或运行KingbaseES数据库管理命令实施数据库管理等。
2.2. 相关技术资源
本指南重点从语句兼容特性、迁移工具、迁移场景和应用程序移植等几方面描述Oracle移植的关键技术和实现方式。在每项技术和实现方式的描述上,本指南只提供有限的内容介绍,并未提供全面的细节说明。所以,用户若需了解某些技术的实现细节还请参照相关的技术资料。
边栏推荐
- Flask Mdict builds online MDICT Dictionary Service
- 数仓搭建——DWD层
- Redis 事物学习
- 软件测试面试题:已知一个字符串为“hello_world_yoyo”, 如何得到一个队列 [“hello“,“world“,“yoyo“]
- 用户和权限创建普通用户
- Ie11 method of downloading doc PDF and other files
- [RCTF2015]EasySQL-1|SQL注入
- Pytorch multiplication and broadcasting mechanism
- 做测试, 就得去大厂,内部披露BAT大厂招聘“潜规则”
- MYSQL设计优化生成列
猜你喜欢

OA项目之我的审批(查询&会议签字)

Swiftui view onReceive method receives "redundant" event resolution
![[rctf2015]easysql-1 | SQL injection](/img/69/aa1fc60ecf9a0702d35d876e8c3dda.png)
[rctf2015]easysql-1 | SQL injection

antdv: Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key

JVS私有化部署启动失败处理方案

MLX90640 红外热成像仪测温传感器模块开发笔记(七)

一周活动速递|深入浅出第8期;Meetup成都站报名进行中

C language -- array

A layered management method of application layer and hardware layer in embedded system

RK3399平台入门到精通系列讲解(导读篇)21天学习挑战介绍
随机推荐
Apple Mobile Bluetooth networking
Clickhouse implements materializedpostgresql
Software test interview question: if a string is known as "hello_world_yoyo", how to get a queue ["hello", "world", "yoyo"]
【毕设教程】YOLOv7 目标检测网络解读
It is said that Intel will stop the nervana chip manufactured by TSMC at 16nm
C language POW function (how to play exponential function in C language)
【深度学习】Pytorch Tensor 张量
Understand │ what is cross domain? How to solve cross domain problems?
Redis hash structure command
软件测试面试题:统计在一个队列中的数字,有多少个正数,多少个负数,如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
[RCTF2015]EasySQL-1|SQL注入
vi工作模式(3种)以及模式切换(转换)
Check the internship salary of Internet companies: with it, you can also enter the factory
CONDA common commands
A recently summarized universal violent cracking method
Software test interview question: how to output "0001" when a number is known to be 1
用户和权限创建普通用户
Mlx90640 infrared thermal imager temperature sensor module development notes (VII)
Anfulai embedded weekly report no. 275: 2022.07.18--2022.07.24
What is a multi-layer perceptron (what is a multi-layer perceptron)