OceanBase 2.x体验:推荐用DBeaver工具连接数据库
Original MQ4096 [OceanBase技术闲谈](javascript:void(0) 2020-01-15
OceanBase 2.2的版本近期已通过官网放出,里面除了OceanBase数据库软件和部署软件外,还会有个数据库驱动文件,名字是:oceanbase-client-1.0.9.jar 文件。该驱动完全兼容 MySQL JDBC 的使用方式并且可以自动识别 OceanBase 租户的兼容模式是 MySQL 还是 Oracle,在协议层兼容 2 种模式,且兼容 OB2.0 协#议。
DBeaver新增OceanBase驱动方法
I. 打开DBeaver,点击菜单【数据库(D)】-【驱动管理器】
II. 在【驱动管理器】里点击【新建(N)】。
III. 填写OceanBase驱动相关信息
类名:com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
URL模板:jdbc:oceanbase://<server>:<port>/<database>
默认端口:2883
这个默认端口是OBProxy的连接端口,默认都是2883. 当然也有的运维人员会把它设置为1521. 有关OBProxy简介请参考《从ORACLE/MySQL到OceanBase:数据访问代理》。
IV. 点击【添加文件】,找到驱动文件oceanbase-client-1.0.8.jar位置。
DBeaver新增ORACLE租户连接
I. 在DBeaver里点击【数据库】-【新建连接】或者点击图标
II.填写数据库连接相关信息
用户名:格式有两种:账户名@租户名#集群名 或者 集群名:租户名:账户名
密码:账户名对应密码
用户名反映了OceanBase集群的数据架构的分层特征。一个OceanBase集群将一组物理服务器聚合为一个超级大的资源池,然后从中分配出大小和类型不同的租户(即实例)。租户才是给到业务方使用的,也就是通常说的数据库。当租户兼容MySQL时,租户就像MySQL实例,下面有很多database,创建不同的用户访问不同的数据库;当租户兼容ORACLE时,租户就像ORACLE实例,下面有很多schema(跟用户一一对应)。
这里还需要在【驱动属性】里填写数据库IP和端口、以及默认数据库(或schema)
DBNAME 填上想用的数据库的用户名
点击【测试链接】,会有“已连接”的提示!
dbeaver批量执行sql
- 修改数据库驱动属性allowMultiQueries为true

- Ctrl + a,alt(option) + x
Java应用连接OceanBase的方法
Java应用也可以使用OceanBase Java驱动连接租户(实例)。
添加 Maven 依赖
<dependency>
<groupId>com.alipay.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<!--推荐版本18,经过测试14~18都可以-->
<version>18.0</version>
</dependency>
修改 JDBC 连接串
连接串的前缀需要设置为 jdbc:oceanbase ,其他部分的使用方式与原生的 MySQL 使用方式保持一致。
String url = "jdbc:oceanbase://10.***.***.83:2883/SYS?useUnicode=true&characterEncoding=utf-8";
String username = "scott@tnt_oracle#obdemo";
String password = "tiger";
Connection conn = null;
try {
Class.forName("com.alipay.oceanbase.obproxy.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, username, password);
PreparedStatement ps = conn.prepareStatement("select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;");
ResultSet rs = ps.executeQuery();
rs.next();
System.out.println("sysdate is:" + rs.getString(1));
rs.close();
ps.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != conn) {
conn.close();
}
}
对于 Druid 框架,如果没有使用 DriverManager,需要直接指定 DrvierClass,如下
<property name"driverClassName" value="com.alipay.oceanbase.obproxy.mysql.jdbc.Driver">
** 注意:**
如果提示 ORA-01882: timezone region 'UTC' not found
in VM Arguments section paste this
-Duser.timezone=Asia/Shanghai
具体参考:记一次JDBC连接Oracle出现“ORA-01882: timezone region not found“
OceanBase错误号
初次使用OceanBase时,经常会碰到各种错误,需要查看相应的错误号才能初步理解报错原因。
OceanBase MySQL租户的错误号都是负数,[-4000, -1]期间的跟MySQL错误号保持一致, 小于-4000的错误号为OceanBase新增的错误号。 详细错误号定义请查看帮助文档( https://tech.antfin.com/docs/2/YQ1174849)。
OceanBase ORACLE租户的错误号有些跟ORACLE错误号定义是一致的,有些是自己特有的。详细错误号定义请查看帮助文档(https://tech.antfin.com/docs/2/YQ1243092)。
其他
DBeaver可以一定程度方便初学者了解OceanBase,但图形化使用上跟OB驱动还不完全彼此兼容,所以体验还不是非常好。OceanBase开发团队也在开发适合OceanBase的图形化客户端工具。
ORACLE租户下SQL示例
OceanBase ORACLE租户下能运行一些常用的SQL语法,可以查询常用的视图。由于驱动本身没有实现所有接口,所以还不能使用DBEaver的图形化设计能力管理数据库对象(如表),但是可以使用一些SQL操作。并且ORACLE租户保留了一些MySQL租户的SHOW命令,很方便查看数据库对象。
用户权限管理
- 建用户
-- 用户管理
CREATE USER scott identified BY tiger;
GRANT ALL PRIVILEGES ON scott.* TO scott WITH GRANT option;
GRANT SELECT,CREATE ,DROP ON *.* TO scott;
- 查看用户
- 查看用户权限
表管理
- 建表
CREATE TABLE DEPT(
DEPTNO NUMBER(2) NOT NULL
,DNAME VARCHAR2(14)
,LOC VARCHAR2(13)
,CONSTRAINT PK_DEPT PRIMARY KEY(DEPTNO)
);
-- DROP TABLE EMP;
CREATE TABLE EMP(
EMPNO NUMBER(4)
,ENAME VARCHAR2(10)
,JOB VARCHAR2(9)
,MGR NUMBER(4) NULL
,HIREDATE DATE
,SAL NUMBER(7,2)
,COMM NUMBER(7,2)
,DEPTNO NUMBER(2) -- CONSTRAINT FK_DEPTNO REFERENCES DEPT
,CONSTRAINT PK_EMP PRIMARY KEY(EMPNO)
);
- 查看表结构
SHOW CREATE TABLE scott.dept;
查看索引结构
SELECT t1.owner, t1.table_name, t1.index_name, t1.index_type, t1.uniqueness, t2.column_name, t2.column_position, descend
FROM all_indexes t1 JOIN all_ind_columns t2 ON (t1.owner=t2.table_owner AND t1.table_name=t2.table_name AND t1.index_name=t2.index_name)
WHERE t1.owner ='SCOTT' AND t1.table_name='DEPT'
;
创建存储过程
-- obclient -h127.1 -utpcc@tnt_oracle#obdemo -P2883 -p123456
delimiter //
CREATE OR REPLACE PROCEDURE stocklevel (
ware_id INTEGER,
dist_id INTEGER,
threshold INTEGER,
low_stock OUT INTEGER
)
IS
BEGIN
SELECT count (DISTINCT s_i_id)
INTO low_stock
FROM ordl, stok, dist
WHERE ol_w_id = ware_id AND d_id = dist_id AND d_w_id = ware_id AND
d_id = ol_d_id AND d_w_id = ol_w_id AND
ol_i_id = s_i_id AND ol_w_id = s_w_id AND
s_quantity < threshold AND
ol_o_id BETWEEN (d_next_o_id - 20) AND (d_next_o_id - 1);
COMMIT;
END stocklevel;
//
delimiter ;
存储过程的创建在DBeaver里创建跟在命令工具obclient里有点不同,不需要借助delimiter 命令改变语句终结符。直接选中存储过程SQL,按快捷键CTRL+ENTER即可。
- 查看存储过程内容
SHOW CREATE PROCEDURE stocklevel;
OceanBase 2.x体验:推荐用DBeaver工具连接数据库的更多相关文章
- 【Java】15分钟快速体验阿里Java诊断工具Arthas
[墙裂推荐]15分钟快速体验阿里Java诊断工具Arthas : https://alibaba.github.io/arthas/arthas-tutorials?language=cn&i ...
- Windows环境下文件的彻底删除与恢复,推荐几个工具(整理)
1. 背景 在Windows(从XP到Win7)中删除文件时,无论是Delete或者是Shift+Delete,都不能真正的删除文件,它做的事情只是从文件分配表中删除了该文件的信息,而并未将文件从存储 ...
- [推荐] 网络侦查工具 NMAP 简单入门
[推荐] 网络侦查工具 NMAP 简单入门 # 前言 作为一只运维开发,总是避不开要和网络打交道的.尤其是当自身能力到达瓶颈,开始从事云计算以求突破.会有搭建多台虚拟机的需要,这时候如果在手工的查询 ...
- 利器推荐-Snipaste截图工具
利器推荐-Snipaste截图工具 一.引言 接触这个工具之前一直用QQ的ctrl+alt功能进行截图,但是有时候QQ没有登陆,或者没网的环境就没法使用:这时候可能会使用windows自带的截图工具, ...
- 大数据之路【第十四篇】:数据挖掘--推荐算法(Mahout工具)
数据挖掘---推荐算法(Mahout工具) 一.简介 Apache顶级项目(2010.4) Hadoop上的开源机器学习库 可伸缩扩展的 Java库 推荐引擎(协同过滤).聚类和分类 二.机器学习介绍 ...
- 推荐一些socket工具,TCP、UDP调试、抓包工具 推荐一些socket工具,TCP、UDP调试、抓包工具
还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有 ...
- 一款值得推荐的shell工具
1. 一款比较出色的shell工具 熟练的运用shell语言可以提高我们的工作效率,而一款好的shell工具能提高学习的效率,fish shell就是这样一款工具.并且是一款跨平台的工具, 同时可以在 ...
- 【工具推荐】截图工具 Snipaste
0. 说明 [官网介绍] Snipaste 是一个简单但强大的截图工具,也可以让你将截图贴回到屏幕上!下载并打开 Snipaste,按下 F1 来开始截图,再按 F3,截图就在桌面置顶显示了.就这么简 ...
- 推荐一些socket工具,TCP、UDP调试、抓包工具 (转载)
还记得我在很久很久以前和大家推荐的Fiddler和Charles debugger么?他们都是HTTP的神器级调试工具,非常非常的好用.好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 假如有 ...
随机推荐
- LeetCode刷题 树专题
树专题 关于树的几个基本概念 1 树的节点定义 2 关于二叉树的遍历方法 2.1 前序遍历 2.2 中序遍历 2.3 后序遍历 2.4 层序遍历 3 几种常见的树介绍 3.1 完全二叉树 3.2 二叉 ...
- 数据库炸了----我就重启了一下啊(Communications link failure)
重启数据库后,数据库大部分时间连不上了:连续请求不会报错,请求间隔时间稍微长一点就会报错报错如图: com.mysql.cj.jdbc.exceptions.CommunicationsExcepti ...
- Flask WTForm disable choice field
Flask disable choice field ChoiceField = { render_kw={'disabled':''} } form.my_field.render_kw = {'d ...
- 关于Python中用户输入字符串(与变量名相同)无法作为变量名引用的理解以及解决方案
在用户登录账号时,我需要在字典中查找是否存在其账号名称以及密码是否正确. 所以,我想将用户输入的账号赋值给变量,在字典中查找是否有此指值. 代码如下: 1 Ya = {'姓名': 'Ya', 'pas ...
- react之路由
功能:让用户从一个视图(组件)导航到另一个视图(组件) 前端路由是一套映射规则,在React中,是URL路径与组件的对应关系 使用React路由简单来说,就是配置路径和组件 路由的使用 1.安装路由 ...
- [loj3014]独特的城市
约定:一棵树的深度定义为其中到根最远的点到根的距离 考虑节点$x$的答案: 任取一条直径,根据直径的性质,到$x$较远的直径端点一定是到$x$最远的点之一 由此,不难证明对于$x$独特的点,一定在$x ...
- [noi706]Sabotage
先可以将所有出度为0的节点连向一个点,然后问题变为求到这个点的必经之点这其实是一道模板题,因为有一个东西叫做支配树容易发现一个点的必经之点都是一条链,其实可以把这条链上最浅的点作为这个点的父亲,那么一 ...
- [atAGC047F]Rooks
如果将$x$和$y$都离散,那么删除的点的$x_{i}$和$y_{i}$必然都组成了一个完整的区间(包括过程中) 将所有点按$x$排序,再令$f[i][j][0/1]$表示当删除完区间$[i,j]$且 ...
- [hdu6761]Minimun Index
$lyndon\ word$(以下简写为Lw):对于一个字符串s,其为Lw当且仅当其的最小后缀为自身 性质:若$u<v$为LW,那么$uv$也为Lw(反证法即可证) $lyndon$分解:将一个 ...
- Winform开发的快速、健壮、解耦的几点建议
在Winform开发领域开发过十多年的项目中,见证着形形色色的架构和官方技术的应用,从最早类似Winform模式的WebForm技术,到接着的JQuery+界面组件,再到Asp.net Core的技术 ...