文档结构
官方文档:https://www.oceanbase.com/docs/oceanbase-database-cn
1、概念简介
版本分为社区版和企业版,其中社区版只支持MySql数据库,企业版同时兼容MySQL 和Oracle数据库语法;
在OceanBase中,Oracle模式下,租户类似于Oracle数据库的一个实例,用户和租户不等同;
2、核心设计
-
存储层
-
复制层
-
均衡层
-
事务层
2.1、资源划分
租户
系统租户、用户租户、Meta租户;
说明:用户租户和meta租户一一对应;
resource unit(资源单元)
resource pool(资源池)
zone_list(区域列表)
tenant(租户)
3、操作实践
3.1、连接环境
驱动下载:https://www.oceanbase.com/softwarecenter-enterprise
-
jdbc连接
Class Name:com.oceanbase.jdbc.Driver
Url:jdbc:oceanbase://{host}:{port}[/{database}]
Port:1521 -
dbeaver连接(下载地址:https://dbeaver.io/files/)
1)驱动管理那里新增一个类型:Ob_Oracle然后添加官网的驱动;
2)驱动参数配置按照 上述 jdbc方式配置;
3.2、对象操作
3.2.0、定义获取
1)方式一
select dbms_metadata.get_ddl( '$object_type', '$object_name', '$schema_name' ) from dual;
2)方式二
desc schema_name.object_name;
3.2.1、表
表分为普通表或复制表; 创建语法如下:
create table schema_name.table_name
(
col_1 datatype,
col_2 datatype,
col_3 datatype,
...
col_n datatype
)
duplicate_scope= 'none|cluster';
说明:duplicate_scope
选项为 none
表示普通表,为 cluster
为复制表;
不支持通过
cteate table schema_name.new_table like schema_name.old_table
的语法创建新表;
- 行存列存
1)配置参数 default_table_store_format='row'
,默认创建的为行存表;
2)建表时加子句 with column group(all columns)
,会创建行存表;
3)建表时加子句 with column group(each column)
,会创建列存表;
4)建表时加子句 with column group(all columns, each column)
,会创建行存列存冗余表;
- 主键约束
1)OB语法
# 添加主键
alter table schema_name.table_name add primary key(col_1,col_2);
# 修改主键
alter table schema_name.table_name modify primary key(col_1,col_2);
# 删除主键
alter table schema_name.table_name drop primary key;
2)Oracle语法
# 添加主键
alter table schema_name.table_name add constraint pk_table_name primary key(col_1,col_2);
# 删除主键
alter table schema_name.table_name constraint pk_table_name;
说明:
1)在OB中表主键新增和删除的语法支持2种不同的写法;主键修改只有一种写法;
2)主键的新增和删除即可以按照 primary key
来,也可以按照 constraint
来;
3.2.2、表分区
目前OceanBase中支持的表分区分为如下4类:
1)range(范围分区)
2)list(列表分区)
3)hash(哈希分区)
对于模板化二级分区表,二级分区的命名规则为
${part_name}s${subpart_name}
。对于
非模板化二级分区表,二级分区的分区名即为#定义的分区名。
create table schema_name.table_name
(
col_1 datatype,
col_2 datatype,
...
col_n datatype
)
partition by hash(uuid) partitions ${part_num};
说明:此处不显示指定分区名称是,系统会按照 P0~Pn 来命名;
4)组合分区
- 分区调整
在OceanBase中支持通过alter 方式实现非分区表到分区表的转换;
1)非分区表–>一级分区表;
2)非分区表–>二级分区表;
alter table ${schema_name.table_name} modify partition by ${partition_option};
- 分区重命名
alter table schema_name.table_name rename partition p_202403 to p_202405;
alter table schema_name.table_name rename subpartition p_03 to p_05;
说明:OceanBase支持表的一级分区和二级分区重命名;
3.2.3、表组
表组是一个逻辑概念,可以实现类似分区或分布键的功能;
3.2.4、索引
在OB中默认索引和表在同一个schema下,不允许在建索引时指定索引的schema;
- 唯一索引
alter table schema_name.table_name add unique(col_3);
可以通过 dba_index_usage
来查询索引的监控结果;
3.3、数据同步
按照官方专家解释,目前OceanBase不支持通过ogg进行数据同步;但是在知乎上有人分享了通过ogg同步Oracle同步数据到 OceanBase的过程!
知乎教程:https://zhuanlan.zhihu.com/p/639617254
3.7、性能优化
在对象规划和sql语法逻辑上的优化;
1)基于规则的优化
原则:按照 sql 的性能维度考虑,向更合理的逻辑去调整 sql;
2)基于代价的优化
原则:按照 资源使用的维度考虑,想资源使用率更小的方向去调整执行计划;
3.8、系统对象
3.9、其他特性
- 系统时间
在 OceanBase中系统时间可以使用
sysdate
和current_timestamp(0)
来获取;
说明:在 dbeaver 中,sysdate
只显示日期部分,不显示时间部分;current_timestamp(0)
只显示时间戳类型,不显示具体的值;
- 版本查询
select * from v$version;
数据库对象之间的依赖关系在数据库中维护的并不是一个实时并且绝对准确的关系,引用对象被删除、重建时对应的依赖关系的更新依赖于下一次对依赖对象的查询或 DML 触发。
- 表空间
OceanBase 数据库的表空间是系统自动管理的,用户不需要显式创建和管理表空间。
在Oracle模式下,用户同样支持 connect、resource、dba 三类系统角色;
3.10、参数优化
show parameters where name in (‘ob_enable_batched_multi_statement’,’ _nlj_batching_enabled’);
alter system set ob_enable_batched_multi_statement=true;
alter system set _nlj_batching_enabled = true;
================================ over ================================