0
点赞
收藏
分享

微信扫一扫

OceanBase 2.x 体验:示例数据库

左小米z 2022-05-11 阅读 77

本文主要面向开发同学介绍OceanBase安装好后怎么体验OceanBase的SQL。

安装示例数据库

OceanBase集群提供业务使用的是租户(也叫实例)。OceanBase租户根据SQL兼容类型分为MySQL租户和ORACLE租户两类。本文提供TPCC业务场景的数据库对象初始化语句和数据初始化语句,分别用在MySQL租户和ORACLE租户下。具体脚本在github上提供,地址是:​​https://github.com/obpilot/ob-samples​​

在使用脚本之前请先创建好MySQL租户和ORACLE租户。具体可以参考OCP帮助文档或者前文《​​OceanBase 2.x体验:手动搭建OceanBase集群​​》。

然后参照目录下的README.md里步骤执行脚本。脚本在创建数据库对象后会自动初始化一部分数据,大部分字符串列都是随机填充的。仅供参考。

OceanBase数据库客户端

命令行客户端 ​​obclient​​​

obclient 是一个交互式和批处理查询工具,需要单独安装。它是一个命令行用户界面,在连接到数据库时充当客户端。它支持OceanBase的ORACLE租户和MySQL租户。

​$ obclient -h127.1 -utpcc@t_oracle0_91#obdemo -P2883 -p123456 -c -A tpcc

说明:

  • -h后提供OceanBase数据库连接IP,通常是一个OBProxy地址。
  • -u 后提供租户的连接账户,格式有两种:用户名@租户名#集群名 或者 集群名:租户名:用户名 。ORACLE租户的管理员用户名默认是 sys 。
  • -P 后提供OceanBase数据库连接端口,也是OBProxy的监听端口,默认是2883,可以自定义。
  • -p 后提供账户密码,为了安全可以不提供,改为在后面提示符下输入,密码文本不可见。
  • -c 表示在mysql 运行环境中忽略注释。
  • -A 表示在 mysql 连接数据库时不去获取全部表信息,这样登录数据库最快。
  • tpcc 是访问的业务数据库。


连接成功后,默认会有命令行提示符

​MySQL [oceanbase]>

然后就可以发一些MySQL运维命令或者SQL语句等。要退出OceanBase命令行,输入 exit 然后 回车;或者按快捷键 ctrl + d 。

图形化客户端 ​​DBeaver​​​

DBeaver使用请参考前文《​​OceanBase 2.x体验:推荐用DBeaver工具连接数据库​​》。下面的示例SQL都可以在DBeaver的SQL编辑器里运行。

在DBeaver里运行查询步骤:

  • 1. 在左侧边栏的“数据库”或者“项目”文件夹中,找到此前新建的数据库连接(参考 通过DBeaver 连接OceanBase数据库),点击鼠标右键,选择“SQL编辑器”。
  • 2. 在右边编辑器里输入查询语句,以分号结尾。​​然后点击编辑器侧边工具栏中“运行图标”或者快捷键“CTRL+回车”。
  • 3. 下面“结果”栏目里显示了查询结果。
  • 4. 如果有多条查询语句,每个语句都以“;​​”结尾。​​同时选中多条查询语句,然后执行快捷键“ALT+X ”。
  • 5. 下面“结果”栏目会顺序显示多个查询结果。
  • 6. 默认结果集最多会展示200行记录,如果实际记录超过200,需要滚动结果集到最后一行时DBeaver会自动获取下一个200行记录。



OceanBase 2.x 体验:示例数据库_数据库


浏览OceanBase MySQL租户

通过obclient查看MySQL租户的数据库对象

#obclient -h127.1 -utpcc@t_mysql0_90#obdemo -P2883 -p123456 -A tpccdb

obclient> show tables;
+------------------+
| Tables_in_tpccdb |
+------------------+
| cust |
| dist |
| hist |
| item |
| load_hist |
| load_proc |
| nord |
| stok |
| ware |
+------------------+
9 rows in set (0.01 sec)

通过obclient查看表属性和数据

​obclient> desc ordl;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| ol_w_id | int(11) | NO | PRI | NULL | |
| ol_d_id | int(11) | NO | PRI | NULL | |
| ol_o_id | int(11) | NO | PRI | NULL | |
| ol_number | int(11) | NO | PRI | NULL | |
| ol_delivery_d | date | YES | | NULL | |
| ol_amount | decimal(6,2) | YES | | NULL | |
| ol_i_id | int(11) | YES | | NULL | |
| ol_supply_w_id | int(11) | YES | | NULL | |
| ol_quantity | int(11) | YES | | NULL | |
| ol_dist_info | char(24) | YES | | NULL | |
+----------------+--------------+------+-----+---------+-------+
10 rows in set (0.02 sec)

obclient> show create table ordl\G
*************************** 1. row ***************************
Table: ordl
Create Table: CREATE TABLE `ordl` (
`ol_w_id` int(11) NOT NULL,
`ol_d_id` int(11) NOT NULL,
`ol_o_id` int(11) NOT NULL,
`ol_number` int(11) NOT NULL,
`ol_delivery_d` date DEFAULT NULL,
`ol_amount` decimal(6,2) DEFAULT NULL,
`ol_i_id` int(11) DEFAULT NULL,
`ol_supply_w_id` int(11) DEFAULT NULL,
`ol_quantity` int(11) DEFAULT NULL,
`ol_dist_info` char(24) DEFAULT NULL,
PRIMARY KEY (`ol_w_id`, `ol_d_id`, `ol_o_id`, `ol_number`)
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.0' REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 TABLEGROUP = 'tpcc_group'
partition by hash(ol_w_id) partitions 3

1 row in set (0.02 sec)

obclient> select * from ware\G
*************************** 1. row ***************************
w_id: 1
w_ytd: 1200.00
w_tax: 0.1868
w_name: n1P4zYo8OH
w_street_1: jTNkXKWXOdh
w_street_2: lf9QXTXXGoF04IZBkCP7
w_city: srRq15uvxe5
w_state: GQ
w_zip: 506811111
*************************** 2. row ***************************
w_id: 2
w_ytd: 1200.00
w_tax: 0.0862
w_name: L6xwRsbDk
w_street_1: xEdT1jkENtbLwoI1Zb0
w_street_2: NT0j4RCQ4OqrS
w_city: vlwzndw2FPrO
w_state: XR
w_zip: 063311111
2 rows in set (0.01 sec)
obclient>

浏览OceanBase ORACLE租户

通过obclient查看ORACLE租户的数据库对象

​$obclient -h11.166.87.134 -utpcc@t_oracle0_91#obdoc -P2883 -p123456 tpcc
obclient> select object_type,count(*) from user_objects group by object_type;
+-----------------+----------+
| OBJECT_TYPE | COUNT(*) |
+-----------------+----------+
| VIEW | 1 |
| TABLE | 11 |
| INDEX | 2 |
| TABLE PARTITION | 48 |
| PROCEDURE | 5 |
+-----------------+----------+

通过obclient查看表属性和数据

​obclient> desc ordl;
+----------------+-------------+------+-----+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+----------------+-------------+------+-----+---------+-------+
| OL_W_ID | NUMBER(38) | NO | PRI | NULL | NULL |
| OL_D_ID | NUMBER(38) | NO | PRI | NULL | NULL |
| OL_O_ID | NUMBER(38) | NO | PRI | NULL | NULL |
| OL_NUMBER | NUMBER(38) | NO | PRI | NULL | NULL |
| OL_DELIVERY_D | DATE | YES | NULL | NULL | NULL |
| OL_AMOUNT | NUMBER(6,2) | YES | NULL | NULL | NULL |
| OL_I_ID | NUMBER(38) | YES | NULL | NULL | NULL |
| OL_SUPPLY_W_ID | NUMBER(38) | YES | NULL | NULL | NULL |
| OL_QUANTITY | NUMBER(38) | YES | NULL | NULL | NULL |
| OL_DIST_INFO | CHAR(24) | YES | NULL | NULL | NULL |
+----------------+-------------+------+-----+---------+-------+
10 rows in set (0.01 sec)

obclient> show create table ordl\G
*************************** 1. row ***************************
TABLE: ORDL
CREATE TABLE: CREATE TABLE "ORDL" (
"OL_W_ID" NUMBER(38) NOT NULL,
"OL_D_ID" NUMBER(38) NOT NULL,
"OL_O_ID" NUMBER(38) NOT NULL,
"OL_NUMBER" NUMBER(38) NOT NULL,
"OL_DELIVERY_D" DATE,
"OL_AMOUNT" NUMBER(6,2),
"OL_I_ID" NUMBER(38),
"OL_SUPPLY_W_ID" NUMBER(38),
"OL_QUANTITY" NUMBER(38),
"OL_DIST_INFO" CHAR(24),
CONSTRAINT "ORDL_OBPK_1581557270705134" PRIMARY KEY ("OL_W_ID", "OL_D_ID", "OL_O_ID", "OL_NUMBER")
) COMPRESS FOR QUERY REPLICA_NUM = 3 BLOCK_SIZE = 16 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 TABLEGROUP = 'TPCC_GROUP'
partition by hash(ol_w_id) partitions 6

1 row in set (0.00 sec)

obclient> show create tablegroup TPCC_GROUP;
+------------+------------------------------------------------------------ ------------+
| TABLEGROUP | CREATE TABLEGROUP |
+------------+-------------------------------------------------------------------------+
| TPCC_GROUP | CREATE TABLEGROUP "TPCC_GROUP" partition by hash partitions 6 |
+------------+------------------------------------------------------------- -----------+
1 row in set (0.01 sec)
obclient>


obclient> select * from ordr where rownum<3;
+--------+--------+------+--------+--------------+----------+-------------+------------+
| O_W_ID | O_D_ID | O_ID | O_C_ID | O_CARRIER_ID | O_OL_CNT | O_ALL_LOCAL | O_ENTRY_D |
+--------+--------+------+--------+--------------+----------+-------------+------------+
| 2 | 1 | 2100 | 2360 | 10 | 8 | 1 | 2020-02-15 18:58:22 |
| 2 | 1 | 2101 | 2101 | NULL | 14 | 1 | 2020-02-15 18:58:22 |
+--------+--------+------+--------+--------------+----------+-------------+------------+
2 rows in set (0.01 sec)
obclient> select * from ordr where rownum<3\G
*************************** 1. row ***************************
O_W_ID: 2
O_D_ID: 1
O_ID: 2100
O_C_ID: 2360
O_CARRIER_ID: 10
O_OL_CNT: 8
O_ALL_LOCAL: 1
O_ENTRY_D: 2020-02-15 18:58:22
*************************** 2. row ***************************
O_W_ID: 2
O_D_ID: 1
O_ID: 2101
O_C_ID: 2101
O_CARRIER_ID: NULL
O_OL_CNT: 14
O_ALL_LOCAL: 1
O_ENTRY_D: 2020-02-15 18:58:22
2 rows in set (0.00 sec)

创建和查看存储过程

  • 创建表

​obclient> create table t1(id number not null primary key, name varchar2(50) not null, gmt_create date not null default sysdate, unique (name));
Query OK, 0 rows affected (0.09 sec)

obclient> create sequence seq_t1 start with 10000 increment by 1 cache 50 nocycle;
Query OK, 0 rows affected (0.01 sec)

  • 创建存储过程

delimiter //
CREATE OR REPLACE PROCEDURE sp_insert_t1( p_name varchar2 )
AS
BEGIN
INSERT INTO t1(id, name) values(seq_t1.nextval, p_name) ;
COMMIT;
dbms_output.put_line('Add a row which name is : ' || p_name );
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
dbms_output.put_line('Exception raised!');
END ;
//
delimiter ;

  • 查看存储过程

​obclient> show create procedure sp_insert_t1\G
*************************** 1. row ***************************
PROCEDURE: SP_INSERT_T1
SQL_MODE: PIPES_AS_CONCAT,STRICT_ALL_TABLES,PAD_CHAR_TO_FULL_LENGTH
CREATE PROCEDURE: CREATE OR REPLACE PROCEDURE "TPCC"."SP_INSERT_T1"
(
"P_NAME" IN varchar2
) IS
BEGIN
INSERT INTO t1(id, name) values(seq_t1.nextval, p_name) ;
COMMIT;
dbms_output.put_line('Add a row which name is : ' || p_name );
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
dbms_output.put_line('Exception raised!');
END
CHARACTER_SET_CLIENT: utf8mb4
COLLATION_CONNECTION: utf8mb4_bin
DATABASE COLLATION: utf8mb4_bin
1 row in set (0.01 sec)

  • 测试存储过程

​obclient> set serveroutput on ;
Query OK, 0 rows affected (0.22 sec)

obclient> select * from t1;
Empty set (0.01 sec)

obclient> call sp_insert_t1('A');
Query OK, 0 rows affected (0.05 sec)

Add a row which name is : A
obclient> select * from t1;
+-------+------+---------------------+
| ID | NAME | GMT_CREATE |
+-------+------+---------------------+
| 10000 | A | 2020-02-28 15:03:12 |
+-------+------+---------------------+
1 row in set (0.01 sec)

obclient> call sp_insert_t1('B');
Query OK, 0 rows affected (0.00 sec)

Add a row which name is : B
obclient> call sp_insert_t1('A');
Query OK, 0 rows affected (0.01 sec)

Exception raised!
obclient> select * from t1;
+-------+------+---------------------+
| ID | NAME | GMT_CREATE |
+-------+------+---------------------+
| 10000 | A | 2020-02-28 15:03:12 |
| 10001 | B | 2020-02-28 15:03:29 |
+-------+------+---------------------+
2 rows in set (0.01 sec)

创建和测试函数

  • 创建自定义函数

delimiter //
CREATE OR REPLACE FUNCTION f_maxid_of_t1 RETURN number
IS
i_id number := -1;
BEGIN
SELECT max(id) INTO i_id FROM t1 ;
RETURN i_id;
EXCEPTION
WHEN OTHERS THEN
NULL;
RETURN NULL;
END;
delimiter ;

  • 查看自定义函数

​obclient> show create function f_maxid_of_t1\G
*************************** 1. row ***************************
FUNCTION: F_MAXID_OF_T1
SQL_MODE: PIPES_AS_CONCAT,STRICT_ALL_TABLES,PAD_CHAR_TO_FULL_LENGTH
CREATE FUNCTION: CREATE OR REPLACE FUNCTION "TPCC"."F_MAXID_OF_T1"
RETURN number IS
i_id number := -1;
BEGIN
SELECT max(id) INTO i_id FROM t1 ;
RETURN i_id;
EXCEPTION
WHEN OTHERS THEN
NULL;
RETURN NULL;
END
CHARACTER_SET_CLIENT: utf8mb4
COLLATION_CONNECTION: utf8mb4_bin
DATABASE COLLATION: utf8mb4_bin
1 row in set (0.01 sec)

  • 测试自定义函数

​obclient> select * from t1;
+-------+------+---------------------+
| ID | NAME | GMT_CREATE |
+-------+------+---------------------+
| 10000 | A | 2020-02-28 15:03:12 |
| 10001 | B | 2020-02-28 15:03:29 |
| 10003 | C | 2020-02-28 15:21:01 |
| 10004 | D | 2020-02-28 15:22:04 |
| 10005 | E | 2020-02-28 15:22:04 |
+-------+------+---------------------+
5 rows in set (0.00 sec)

obclient> select f_maxid_of_t1() from dual;
+-----------------+
| F_MAXID_OF_T1() |
+-----------------+
| 10005 |
+-----------------+
1 row in set (0.00 sec)

obclient> truncate table t1;
Query OK, 0 rows affected (0.11 sec)

obclient> select f_maxid_of_t1() from dual;
+-----------------+
| F_MAXID_OF_T1() |
+-----------------+
| NULL |
+-----------------+
1 row in set (0.03 sec)


后记

更多OceanBase SQL使用方法请查看官方文档的SQL参考。


  • ​​OceanBase 2.x 试用版安装体验——OCP 2.3​​
  • ​​OceanBase 2.x体验:手动搭建OceanBase集群​​
  • ​​OceanBase实践入门技术序列​​



举报

相关推荐

0 条评论