首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OceanBase 数据库(Oracle 模式)从零开始:部署、管理、开发与迁移实战

OceanBase 数据库(Oracle 模式)从零开始:部署、管理、开发与迁移实战

原创
作者头像
IT大佬 jzit-top
发布2026-07-26 16:20:21
发布2026-07-26 16:20:21
1230
举报

OceanBase 数据库(Oracle 模式)从零开始:部署、管理、开发与迁移实战

一款真正能扛起核心业务负载的分布式数据库,如何快速上手?


一、OceanBase 与 Oracle 模式:你不得不知的背景

1.1 什么是 OceanBase?

OceanBase 是蚂蚁集团自主研发的原生分布式关系数据库,具备高可用、高扩展、高兼容等特性。它打破了传统单机数据库的容量和性能瓶颈,已在支付宝、网商银行等核心金融场景中经受住了双 11 峰值考验。

1.2 为什么要关注 Oracle 模式?

OceanBase 提供两种兼容模式:

  • MySQL 模式:高度兼容 MySQL 语法和协议
  • Oracle 模式:兼容 Oracle 的 SQL 语法、PL/SQL、数据类型、系统包等

对于存量 Oracle 用户,Oracle 模式极大降低了迁移成本和代码改造成本。即使你是从零开始的新项目,也可以利用 Oracle 模式丰富的 SQL 特性和成熟的开发体验。

本文聚焦 Oracle 模式,带你从环境搭建到生产级特性进行全流程实操。


二、环境准备:部署一个单机版 OceanBase

学习阶段,推荐使用单机部署(即集群只有一个节点)。生产环境可扩展为多节点集群,部署逻辑一致。

2.1 硬件与操作系统要求

  • CPU:2 核以上(推荐 4 核)
  • 内存:至少 8 GB(推荐 16 GB)
  • 硬盘:50 GB 以上 SSD
  • 操作系统:CentOS 7 / RedHat 7 / Ubuntu 20.04(本文以 CentOS 7 为例)

2.2 使用 OBD(OceanBase Deployer)快速安装

OBD 是官方推荐的自动化部署工具,支持一键安装单机版。

步骤 1:安装 OBD

代码语言:javascript
复制
# 安装必要依赖
yum install -y yum-utils

# 添加 OceanBase 官方 yum 源
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo

# 安装 OBD
yum install -y ob-deploy

步骤 2:使用 OBD 部署单机版

创建配置文件 ob-single.yaml

代码语言:javascript
复制
oceanbase-ce:
  servers:
    - name: ob1
      ip: 127.0.0.1
  global:
    home_path: /home/admin/oceanbase
    data_dir: /data/obdata
    redo_dir: /redo/obredo
    mysql_port: 2881     # 业务端口(MySQL 协议)
    rpc_port: 2882       # 内部 RPC 端口
    zone: zone1
    cluster_id: 1
    memory_limit: 4G
    system_memory: 1G
    stack_size: 512K
    cpu_count: 4
    enable_syslog_recycle: true
    max_syslog_file_count: 4

执行部署:

代码语言:javascript
复制
obd cluster deploy ob_single -c ob-single.yaml
obd cluster start ob_single

步骤 3:验证服务

代码语言:javascript
复制
obd cluster list
# 应显示 ob_single 状态为 running

2.3 连接 OceanBase

OceanBase 默认使用 MySQL 协议,所以可用 mysql 命令行或官方客户端 obclient 连接。

安装 obclient(推荐):

代码语言:javascript
复制
yum install -y obclient

连接方式(使用 root 用户,密码默认为空):

代码语言:javascript
复制
obclient -h127.0.0.1 -P2881 -uroot@sys -p -c -A
# 密码为空,直接回车

注意:-uroot@sys 表示连接 sys 租户(系统租户)的 root 用户。


三、租户体系与基础管理

OceanBase 的多租户架构类似于 Oracle 的 CDB/PDB。我们首先创建业务租户。

3.1 创建资源单元与资源池

在创建租户前,需要定义资源规格:

代码语言:javascript
复制
-- 创建资源单元,分配 CPU 和内存
CREATE RESOURCE UNIT unit_2c2g
MAX_CPU = 2,
MIN_CPU = 2,
MEMORY_SIZE = '2G';

-- 创建资源池,指定使用的单元数和所属节点
CREATE RESOURCE POOL pool_1
UNIT = 'unit_2c2g',
UNIT_NUM = 1,
ZONE_LIST = ('zone1');

3.2 创建租户(Oracle 模式)

代码语言:javascript
复制
-- 创建租户 test_tenant,指定 Oracle 模式
CREATE TENANT test_tenant
RESOURCE_POOL_LIST = ('pool_1')
SET
    ob_compatibility_mode = 'oracle',  -- 关键:指定 Oracle 模式
    ob_tcp_invited_nodes = '%',        -- 允许所有 IP 连接
    parallel_servers_target = 10;

-- 查看租户创建状态
SELECT * FROM oceanbase.DBA_OB_TENANTS;

3.3 连接业务租户

代码语言:javascript
复制
# 使用租户的 root 用户(初始密码为空)
obclient -h127.0.0.1 -P2881 -uroot@test_tenant -p
# 回车

登录后,我们就进入了 Oracle 模式的租户环境。


四、Oracle 模式下的 DDL 与 DML 体验

4.1 创建用户(Schema)

Oracle 模式下,用户即 Schema,与 Oracle 一致。

代码语言:javascript
复制
-- 创建用户(需要具有 CREATE USER 权限)
CREATE USER app_user IDENTIFIED BY 'Abc123456';

-- 授予基础权限
GRANT CONNECT, RESOURCE, CREATE SESSION TO app_user;
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE TO app_user;

-- 授予无限表空间(若使用表空间)
GRANT UNLIMITED TABLESPACE TO app_user;

4.2 表空间管理

OceanBase 支持表空间,简化与 Oracle 的迁移:

代码语言:javascript
复制
-- 创建表空间
CREATE TABLESPACE tbs_app
DATAFILE 'tbs_app.dbf' SIZE 10G
AUTOEXTEND ON NEXT 1G MAXSIZE 100G;

-- 为用户指定默认表空间
ALTER USER app_user DEFAULT TABLESPACE tbs_app;

4.3 创建表及约束

代码语言:javascript
复制
-- 切换到 app_user 会话
CONNECT app_user/Abc123456@127.0.0.1:2881/test_tenant;

-- 创建表(Oracle 标准语法)
CREATE TABLE employees (
    emp_id        NUMBER(10) PRIMARY KEY,
    emp_name      VARCHAR2(100) NOT NULL,
    hire_date     DATE DEFAULT SYSDATE,
    salary        NUMBER(10,2),
    dept_id       NUMBER(10),
    status        CHAR(1) DEFAULT 'A',
    CONSTRAINT chk_salary CHECK (salary >= 0)
);

-- 创建序列
CREATE SEQUENCE seq_emp_id
START WITH 1001
INCREMENT BY 1
CACHE 20;

-- 插入数据
INSERT INTO employees (emp_id, emp_name, hire_date, salary, dept_id)
VALUES (seq_emp_id.NEXTVAL, '张三', SYSDATE, 8500.50, 10);

-- 查询(Oracle 特有的 ROWNUM 和 ROWID 均支持)
SELECT ROWNUM, ROWID, emp_name, salary
FROM employees
WHERE ROWNUM <= 10;

4.4 PL/SQL 支持

OceanBase 的 Oracle 模式支持存储过程、函数、包、触发器,语法与 Oracle 几乎一致。

代码语言:javascript
复制
-- 创建存储过程(打印员工信息)
CREATE OR REPLACE PROCEDURE get_emp(p_emp_id IN NUMBER) IS
    v_name VARCHAR2(100);
BEGIN
    SELECT emp_name INTO v_name FROM employees WHERE emp_id = p_emp_id;
    DBMS_OUTPUT.PUT_LINE('员工姓名:' || v_name);
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('未找到该员工');
END get_emp;
/

-- 调用
CALL get_emp(1001);

五、与 Oracle 的兼容性差异

尽管兼容度高,但仍有一些差异需注意:

特性

Oracle

OceanBase Oracle 模式

数据类型

BLOB/CLOB

支持,但实现为分布式存储

外键约束

支持

支持,但跨分区外键有限制

物化视图

完全支持

支持,但暂不支持自动刷新

分区表

范围/列表/哈希/组合

完全支持,且支持非分区键索引

自增列

通过序列+触发器

支持 IDENTITY 列(Oracle 12c 特性)

全局索引

支持

支持,但需指定 GLOBAL 关键字

同义词

私有/公有

支持

闪回查询

AS OF

支持(AS OF TIMESTAMP/SCN)

包(Package)

支持

支持,但部分系统包未实现

官方文档提供了《OceanBase 与 Oracle 兼容性对照表》,迁移前务必仔细查阅。


六、从 Oracle 迁移到 OceanBase

6.1 迁移工具选型

  • OMS(OceanBase Migration Service):官方迁移工具,支持结构迁移、全量迁移、增量同步,推荐生产环境使用。
  • DataX:开源离线同步工具,适用于全量迁移。
  • 逻辑导出/导入:使用 expdp/impdp 风格的语法(OceanBase 提供 OBLOADER/OBDUMPER 命令行工具)。

6.2 使用 OBDUMPER/OBLOADER 进行迁移

导出源 Oracle 数据(示例为从 Oracle 导出为 CSV,再导入 OceanBase):

但更典型的是直接使用 OMS,这里简要介绍离线迁移方式:

  1. 从 Oracle 导出结构(使用 SQL Developer 或 expdp)
  2. 在 OceanBase 中手动调整 DDL(例如表空间语法可能略有不同)
  3. 使用 obloader 导入数据

安装 obloader

代码语言:javascript
复制
yum install -y ob-loader-dumper

导入 CSV 文件:

代码语言:javascript
复制
obloader -h 127.0.0.1 -P 2881 -u app_user -p Abc123456 -D test_tenant \
    --table employees \
    -f /data/export/employees.csv \
    --cut --field-terminated-by ',' \
    --batch 1000

6.3 增量同步

OMS 支持基于 Oracle LogMiner 或 XStream 的增量同步,实现不停机迁移。配置 OMS 需要单独部署。


七、性能调优与监控

7.1 关键参数调优

  • memory_limit:集群总内存,建议预留 1/4 给操作系统
  • system_memory:系统租户内存,建议 1~2G
  • cpu_count:根据实际 CPU 核数设定
  • parallel_servers_target:并行执行线程数,调大可提升大查询性能

在租户级别调整:

代码语言:javascript
复制
ALTER SYSTEM SET parallel_servers_target = 30;

7.2 执行计划分析

使用 EXPLAIN 查看执行计划,支持 Oracle 风格的 EXPLAIN PLAN FOR 或 OceanBase 特有的 EXPLAIN

代码语言:javascript
复制
EXPLAIN SELECT * FROM employees WHERE dept_id = 10;

输出包含分布式执行计划,可观察是否进行分区裁剪、并行度等。

7.3 常用监控视图

视图

作用

GV$OB_SQL_AUDIT

SQL 执行历史,可用于慢查询排查

DBA_OB_SERVER_JOB

查看后台任务

DBA_OB_TABLE_STATISTICS

表统计信息

GV$OB_SESSION

当前会话信息

示例:查看最近 10 条慢 SQL

代码语言:javascript
复制
SELECT * FROM GV$OB_SQL_AUDIT
WHERE elapsed_time > 1000000  -- 1ms
ORDER BY elapsed_time DESC
LIMIT 10;

八、高可用与备份恢复

8.1 集群高可用

生产环境部署多个 Zone(可用区),每个 Zone 包含若干 OBServer。OceanBase 使用 Paxos 协议 实现日志同步,故障自动切换,RPO=0,RTO<30s。

8.2 备份恢复(Oracle 模式)

OceanBase 支持物理备份(全量+增量)和逻辑备份(exp/imp 风格)。

配置备份目录(需先创建外部存储,如 NFS 或 OSS):

sql

代码语言:javascript
复制
ALTER SYSTEM SET backup_dest = 'file:///data/backup';

执行全量备份:

代码语言:javascript
复制
ALTER SYSTEM BACKUP DATABASE PLUS ARCHIVELOG;

恢复示例:

代码语言:javascript
复制
ALTER SYSTEM RESTORE DATABASE FROM 'file:///data/backup';

九、常见问题与解决思路

Q1:连接时报“Access denied for user”

  • 检查租户名、用户名是否正确(格式:用户名@租户名
  • 确认密码正确,若初始密码为空,使用 -p 并直接回车

Q2:创建表时报“ORA-00600: internal error”

  • 可能是分区键类型不支持,检查是否使用了不支持的数据类型(如 LONG
  • 升级到最新版本

Q3:执行 PL/SQL 报错,提示未定义的包

  • 部分 Oracle 系统包(如 UTL_FILE)尚未完全支持,需查阅兼容性文档
  • 可改用自定义函数或外部工具替代

Q4:性能突然下降

  • 使用 GV$OB_SQL_AUDIT 查找消耗资源最多的 SQL
  • 检查是否缺少索引,或统计信息过期
  • 收集统计信息:CALL DBMS_STATS.GATHER_SCHEMA_STATS('APP_USER');

十、总结:OceanBase 的入门路径

阶段

任务

工具/命令

部署

单机或集群安装

OBD

管理

租户、用户、表空间

SQL + OBD

开发

DDL/DML/PL/SQL

obclient / SQLplus

迁移

从 Oracle 迁移

OMS / obloader

调优

慢查询、执行计划

GV$OB_SQL_AUDIT / EXPLAIN

运维

备份恢复、扩缩容

ALTER SYSTEM

最后一句:OceanBase 的 Oracle 模式正在快速发展,许多 Oracle 高级特性正在逐步补齐。对于希望摆脱传统 Oracle 高昂成本、同时需要保持高度兼容的团队,它无疑是一个极具竞争力的选择。

动手部署一个单机实例,花一天时间熟悉它的语法和工具,你会发现分布式数据库并没有想象中那么遥远

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • OceanBase 数据库(Oracle 模式)从零开始:部署、管理、开发与迁移实战
    • 一、OceanBase 与 Oracle 模式:你不得不知的背景
      • 1.1 什么是 OceanBase?
      • 1.2 为什么要关注 Oracle 模式?
    • 二、环境准备:部署一个单机版 OceanBase
      • 2.1 硬件与操作系统要求
      • 2.2 使用 OBD(OceanBase Deployer)快速安装
      • 2.3 连接 OceanBase
    • 三、租户体系与基础管理
      • 3.1 创建资源单元与资源池
      • 3.2 创建租户(Oracle 模式)
      • 3.3 连接业务租户
    • 四、Oracle 模式下的 DDL 与 DML 体验
      • 4.1 创建用户(Schema)
      • 4.2 表空间管理
      • 4.3 创建表及约束
      • 4.4 PL/SQL 支持
    • 五、与 Oracle 的兼容性差异
    • 六、从 Oracle 迁移到 OceanBase
      • 6.1 迁移工具选型
      • 6.2 使用 OBDUMPER/OBLOADER 进行迁移
      • 6.3 增量同步
    • 七、性能调优与监控
      • 7.1 关键参数调优
      • 7.2 执行计划分析
      • 7.3 常用监控视图
    • 八、高可用与备份恢复
      • 8.1 集群高可用
      • 8.2 备份恢复(Oracle 模式)
    • 九、常见问题与解决思路
      • Q1:连接时报“Access denied for user”
      • Q2:创建表时报“ORA-00600: internal error”
      • Q3:执行 PL/SQL 报错,提示未定义的包
      • Q4:性能突然下降
    • 十、总结:OceanBase 的入门路径
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档