• OceanBase 2.x体验:推荐用DBeaver工具连接数据库


    此前曾经在文章《推荐一款数据库通用客户端(也支持OB)》里介绍过DBeaver可以连接OceanBase数据库,准确的说只能连接OceanBase的MySQL租户。OceanBase 从2.0开始新增兼容ORACLE的租户,DBeaver也可以通过新增数据库java驱动方式支持OceanBase的ORACLE租户。DBeaver不愧是一款优秀的通用的SQL客户端(有社区版,可以免费下载:https://dbeaver.io
     )!

    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
    )


    点击【测试链接】,会有“已连接”的提示!

    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;

     

    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">



    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的图形化客户端工具。

  • 相关阅读:
    PAT 1017 Queueing at Bank
    一句有意思的代码
    PAT 1031 Hello World for U
    PAT 1024 Palindromic Number
    PAT 1032 Sharing
    各显神通
    ZJU PAT 1023
    静夜,乱思
    PAT 1024 Palindromic Number
    虚函数表
  • 原文地址:https://www.cnblogs.com/hushaojun/p/15922754.html
Copyright © 2020-2023  润新知