暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

「YashanDB个人版体验」YashanDB在线实训环境抢先体验及思考笔录

原创 沈克伟 2023-11-21
351

近期,YashanDB个人版正式开放下载,也有很多老师分享了如何安装YashanDB数据库。

但对于只关心数据库本身的同学而言,可能想跳过安装步骤,直接上手体验,那该如何是好?

好消息!墨天轮云市场,上架了【YashanDB在线实训环境】,直达链接:https://www.modb.pro/market/1755433

20231121_135708.png

让我们一起来快速体验一下吧!

1分钱,买不到吃亏,买不到上当

登录墨天轮云市场,点击【YashanDB在线实训环境】页面,【立即购买】,只需支付 0.01 元,即可拥有私享【YashanDB在线环境】。

2.png

进入到实训环境后,【点击进入实训环境】,这里需要等待一小会,后台会自动初始化。

20231121_135904.png

看到 【Welcome to 墨天轮】画面,就代表已经初始化成功,可以正常使用了,此时,YashanDB已经拉起,可以直接进行下一步实操。

20231121_140011.png

上手实操

一、连接环境

查看后台进程,可以看到 YashanDB 已经启动,

[root@modb ~]# ps -ef|grep yashan
root         1     0  0 13:59 ?        00:00:00 /bin/bash /opt/run_yashan.sh
root        20     1  3 13:59 ?        00:03:35 /home/yashan/app/bin/yasdb nomount
root       124    47  0 15:44 pts/0    00:00:00 grep --color=auto yashan
[root@modb ~]# 

连接 YashanDB:

bin/yasql sys/admin-123@127.0.0.1:1688

输出:

[root@modb ~]# bin/yasql sys/admin-123@127.0.0.1:1688
YashanDB SQL Enterprise Edition Release 23.1.1.100 aarch64

Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 aarch64 - X86 64bit Linux

二、数据库操作

创建一个数据库:

create database yashandb;

输出:

SQL> create database yashandb;


Succeed.

三、SQL基本操作

3.1、表空间操作

  • 创建表空间
CREATE TABLESPACE ts_yashan;

输出:

SQL> SQL> CREATE TABLESPACE ts_yashan;

Succeed.
  • 查看表空间
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;

输出:

SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;

TABLESPACE_NAME                                                  
---------------------------------------------------------------- 
SYSTEM                                                          
SYSAUX                                                          
TEMP                                                            
SWAP                                                            
USERS                                                           
UNDO                                                            
TS_YASHAN                                                       

7 rows fetched.
  • 修改表空间
-- 收缩ts_yashan表空间大小
ALTER TABLESPACE ts_yashan SHRINK SPACE;

输出:

SQL> -- 收缩ts_yashan表空间大小
ALTER TABLESPACE ts_yashan SHRINK SPACE;
SQL> 
Succeed.

删除表空间

DROP TABLESPACE ts_yashan;

输出:

SQL> DROP TABLESPACE ts_yashan;

Succeed.

3.2、表操作

  • 创建表
CREATE TABLE tb_yashan(c1 INT,c2 VARCHAR(10));
  • 查看表
SELECT TABLE_NAME,TABLE_TYPE FROM USER_TABLES;

输出:

SQL> SELECT TABLE_NAME,TABLE_TYPE FROM USER_TABLES;

TABLE_NAME                                                       TABLE_TYPE 
---------------------------------------------------------------- ---------- 
TB_YASHAN                                                        HEAP      
WRH$_SQLTEXT                                                     HEAP      
WRH$_SQLSTAT                                                     HEAP      
WRH$_OSSTAT                                                      HEAP      
WRH$_SYSSTAT                                                     HEAP      
WRH$_SYSTEM_EVENT                                                HEAP      
WRH$_SERVICE_WAIT_CLASS                                          HEAP      
WRH$_MEM_USED_COMP                                               HEAP      
SLOW_LOG$                                                        HEAP      
DAM_LAST_ARCH_TS$                                                HEAP      
SQL_MAP$                                                         HEAP      
MON_MODS_ALL$                                                    HEAP      
OL$NODES                                                         HEAP      
OL$HINTS                                                         HEAP      
OL$                                                              HEAP      
AUDIT_NG$                                                        HEAP      
AUD_POLICY$                                                      HEAP      
TABLE_PRIVILEGE_MAP$                                             HEAP      
SYSTEM_PRIVILEGE_MAP$                                            HEAP      
SIM$                                                             HEAP      
SCOL_DELETE_BITMAP$                                              HEAP      
GARBAGE_DATA$                                                    HEAP      
IND_AUX$                                                         HEAP      
XFMR_HIS$                                                        HEAP      
COL_SEG$                                                         HEAP      
TABXFMR$                                                         HEAP      
TABCHUNK$                                                        HEAP      
DISTCOL$                                                         HEAP      
DIST$                                                            HEAP      
SORTCOL$                                                         HEAP      
TABSORT$                                                         HEAP      
ACPART$                                                          HEAP      
ACCOL$                                                           HEAP      
AC$                                                              HEAP      
SEG$                                                             HEAP      
ARCH_DATA$                                                       HEAP      
RSRC_PLAN_DIRECTIVES$                                            HEAP      
RSRC_PLAN$                                                       HEAP      
RSRC_MAPPING_PRIORITY$                                           HEAP      
RSRC_CONSUMER_GROUPS$                                            HEAP      
RSRC_GROUP_MAPPINGS$                                             HEAP      
LINK$                                                            HEAP      
DATABUCKET$                                                      HEAP      
IND_RTREE$                                                       HEAP      
SUM_DETAIL$                                                      HEAP      
MV_REFTIME$                                                      HEAP      
MV_REFOP$                                                        HEAP      
MATERIALIZED_VIEW$                                               HEAP      
LIBRARY$                                                         HEAP      
STATS_PREFS$                                                     HEAP      
NTAB$                                                            HEAP      
PARAMETER$                                                       HEAP      
ATTRCOL$                                                         HEAP      
COLTYPE$                                                         HEAP      
TOID$                                                            HEAP      
COLLECTION$                                                      HEAP      
TYPEBODY$                                                        HEAP      
METHOD$                                                          HEAP      
ATTRIBUTE$                                                       HEAP      
TYPE$                                                            HEAP      
USER_HISTORY$                                                    HEAP      
PROFILE$                                                         HEAP      
RESOURCE_MAP$                                                    HEAP      
PROFNAME$                                                        HEAP      
ICOLDEP$                                                         HEAP      
EXTERNAL_UDF$                                                    HEAP      
PACKAGE_ITEMS$                                                   HEAP      
PACKAGE$                                                         HEAP      
SCHEDULER$_JOB                                                   HEAP      
AUD_OBJECT_OPT$                                                  HEAP      
TRIGGERDEP$                                                      HEAP      
TRIGGERCOL$                                                      HEAP      
TRIGGER$                                                         HEAP      
USERAUTH$                                                        HEAP      
USER_OBJROLES$                                                   HEAP      
ROLE_OBJPRIVS$                                                   HEAP      
ROLE_SYSPRIVS$                                                   HEAP      
ARGUMENT$                                                        HEAP      
PROCEDURE$                                                       HEAP      
RECYCLEBIN$                                                      HEAP      
COM$                                                             HEAP      
HISTGRM$                                                         HEAP      
HIST_HEAD$                                                       HEAP      
BACKUPSET$                                                       HEAP      
SYN$                                                             HEAP      
DEPENDENCY$                                                      HEAP      
VIEW$                                                            HEAP      
LOBFRAG$                                                         HEAP      
LOB$                                                             HEAP      
PARTSTORE$                                                       HEAP      
SUBPARTCOL$                                                      HEAP      
DEFSUBPART$                                                      HEAP      
INDPART$                                                         HEAP      
TABPART$                                                         HEAP      
PARTCOL$                                                         HEAP      
PARTOBJ$                                                         HEAP      
SEQ$                                                             HEAP      
CCOL$                                                            HEAP      
CDEF$                                                            HEAP      
GARBAGE_SEG$                                                     HEAP      
OBJ$                                                             HEAP      
USER$                                                            HEAP      
ICOL$                                                            HEAP      
IND$                                                             HEAP      
COL$                                                             HEAP      
TAB$                                                             HEAP      
WRM$_SNAPSHOT                                                    HEAP      
WRM$_DATABASE_INSTANCE                                           HEAP      
WRM$_WR_CONTROL                                                  HEAP      
AUD$UNIFIED                                                      HEAP      
SQL_TRACE$                                                       HEAP      
PLAN_STATISTICS$                                                 HEAP      

112 rows fetched.
  • 修改表
-- 重命名
ALTER TABLE tb_yashan RENAME TO tab_yashan;
-- 新增字段
ALTER TABLE tab_yashan ADD(c3 NUMBER);
-- 修改字段类型
ALTER TABLE tab_yashan MODIFY c3 FLOAT;

输出:

SQL> desc tab_yashan;
C1                                                                         INTEGER                           
C2                                                                         VARCHAR(10)                       
C3                                                                         FLOAT                             

SQL> NAME                                                             NULL?     DATATYPE                          
---------------------------------------------------------------- --------- --------------------------------- 

SQL> 
  • 删除表
DROP TABLE tab_yashan;

3.3、索引操作

  • 创建索引
-- 创建表
CREATE TABLE tb_index(c1 INT,c2 INT);
-- 创建索引
CREATE INDEX index1 ON tb_index(c1);
  • 查看索引
SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME FROM USER_INDEXES where INDEX_NAME = 'INDEX1';

输出:

SQL> SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME FROM USER_INDEXES where INDEX_NAME = 'INDEX1';

INDEX_NAME                                                       INDEX_TYPE                    TABLE_NAME                                                       
---------------------------------------------------------------- ----------------------------- ---------------------------------------------------------------- 
INDEX1                                                           NORMAL                        TB_INDEX                                                        

1 row fetched.
  • 删除索引
DROP INDEX index1;

3.4、数据操作

  • 插入数据
-- 创建表
CREATE TABLE insert_tb(c1 INT,c2 CHAR(10));
-- 插入一条数据
INSERT INTO insert_tb VALUES(4,'hello');
-- 插入多条数据
INSERT INTO insert_tb VALUES(1,'world'),(2,'nihao'),(3,'shijie');
-- 查询数据
SELECT * FROM insert_tb;

输出:

SQL> -- 创建表
CREATE TABLE insert_tb(c1 INT,c2 CHAR(10));
-- 插入一条数据
INSERT INTO insert_tb VALUES(4,'hello');
-- 插入多条数据
INSERT INTO insert_tb VALUES(1,'world'),(2,'nihao'),(3,'shijie');
-- 查询数据
SELECT * FROM inSQL> sert_tb;

Succeed.

SQL> SQL> 
1 row affected.

SQL> SQL> 
3 rows affected.

SQL> SQL> 
          C1 C2            
------------ ------------- 
           4 hello        
           1 world        
           2 nihao        
           3 shijie       

4 rows fetched.

SQL> 
  • 更新数据
-- 更新数据
UPDATE insert_tb SET c1=5 WHERE c1=1;
-- 查询数据
SELECT * FROM insert_tb;
-- 更新多条数据
UPDATE insert_tb SET (c1,c2) = (7,'newvalue') WHERE c1=3;
-- 查询数据
SELECT * FROM insert_tb;

输出:

SQL> -- 更新数据
UPDATE insert_tb SET c1=5 WHERE c1=1;
-- 查询数据
SELECT * FROM insert_tb;
-- 更新多条数据
UPDATE insert_tb SET (c1,c2) = (7,'newvalue') WHERE c1=3;
-- 查询数据
SELECT * FROM insert_tb;
SQL> 
1 row affected.

SQL> SQL> 
          C1 C2            
------------ ------------- 
           4 hello        
           5 world        
           2 nihao        
           3 shijie       

4 rows fetched.

SQL> SQL> 
1 row affected.

SQL> SQL> 
          C1 C2            
------------ ------------- 
           4 hello        
           5 world        
           2 nihao        
           7 newvalue     

4 rows fetched.

SQL> 
  • 删除数据
-- 删除数据
DELETE FROM insert_tb WHERE c1 = 7;
-- 查询数据
SELECT * FROM insert_tb;

输出:

SQL> -- 删除数据
DELETE FROM insert_tb WHERE c1 = 7;
-- 查询数据
SELECT * FROM insert_tb;
SQL> 
1 row affected.

SQL> SQL> 
          C1 C2            
------------ ------------- 
           4 hello        
           5 world        
           2 nihao        

3 rows fetched.

SQL> 

3.5、事务操作

  • 提交事务
CREATE TABLE COM_TB(c1 INT);
INSERT INTO COM_TB VALUES(1),(2),(3);
-- 提交事务
COMMIT;
  • 回退事务
-- 插入数据
INSERT INTO COM_TB VALUES(6);
SELECT * FROM COM_TB;
-- 回退至修改前状态
ROLLBACK;
SELECT * FROM COM_TB;

输出:

SQL> -- 插入数据
INSERT INTO COM_TB VALUES(6);
SELECT * FROM COM_TB;
-- 回退至修改前状态
ROLLBACK;
SELECT * FROM COM_TB;
SQL> 
1 row affected.

SQL> 
          C1 
------------ 
           1
           2
           3
           6

4 rows fetched.

SQL> SQL> 
Succeed.

SQL> 
          C1 
------------ 
           1
           2
           3

3 rows fetched.

SQL> 

到此,实训任务已全部完成。但还有个困惑需要确认。

操作系统

在墨天轮的【控制台】中,可以看到【我的数据库】,YashanDB 的操作系统为【Debian GNU/Linux 10】。

而在实训环境中,确认了一下,是CentOS 7.9

20231121_135833.png

[root@modb ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (AltArch)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (AltArch)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7:server"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

[root@modb ~]# cat /etc/redhat-release 
[root@modb ~]# CentOS Linux release 7.9.2009 (AltArch)

[root@modb ~]# uname -a
Linux modb 4.18.0-80.7.2.el7.aarch64 #1 SMP Thu Sep 12 16:13:20 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
[root@modb ~]# 

启动脚本

此外,对照实训环境和个人安装包,发现实训环境中额外安装了YashanDB的启动脚本,或许这也是一门“武功秘籍”,要赶紧收藏。

[root@modb opt]# cat run_yashan.sh 
#!/bin/bash

source /etc/profile

export YASDB_HOME=/home/yashan/app
export YASDB_DATA=/home/yashan/data
export ANCHOR_PORT=1688
export PATH=$PATH:${YASDB_HOME}/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${YASDB_HOME}/lib

init_db(){

   mkdir -p ${YASDB_HOME}/client
   mkdir -p ${YASDB_DATA}/{config,dbfiles,log,instance,archive,diag,local_fs}
   mkdir -p ${YASDB_DATA}/log/{run,trace,audit,alert,listener}
   mkdir -p ${YASDB_DATA}/diag/{metadata,hm}
   touch ${YASDB_HOME}/client/yasc_env.ini
   touch ${YASDB_DATA}/config/yasdb.ini
   echo "DATA_BUFFER_SIZE=2G" >> ${YASDB_DATA}/config/yasdb.ini
   echo "LISTEN_ADDR=0.0.0.0:${ANCHOR_PORT}" >> ${YASDB_DATA}/config/yasdb.ini
   echo "VM_BUFFER_SIZE=2"G >> ${YASDB_DATA}/config/yasdb.ini

   if [[ -f /home/yashan/yasdb.ini ]]; then
      cp /home/yashan/yasdb.ini ${YASDB_DATA}/config/
   fi

   if [[ "${YAS_SYS_PASSWORD}" == "" ]]; then
       echo "sys user password not specified, for example: -e YAS_SYS_PASSWORD=admin_123"
       exit 1
   fi

   ${YASDB_HOME}/bin/yaspwd file=${YASDB_DATA}/instance/yasdb.pwd password=${YAS_SYS_PASSWORD}

}

if [[ ! -f ${YASDB_DATA}/instance/yasdb.pwd ]]; then
   init_db
fi

/home/yashan/app/bin/yasdb nomount
[root@modb opt]# 

思考:YashanDB 命令工具

实训环境中提供的训练脚本,涉及到了几个常用的命令工具,只是介绍了基础用法,那么完整用法都有哪些呢?

yasql

yasql 是连接 YashanDB 的客户端工具,有几种常用方法:

  1. 查看 yasql 版本
[root@modb ~]# yasql -v
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
  1. 连接 YashanDB
-- 正常连接
[root@modb ~]# yasql sys/yasdb_123
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64

Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux

SQL>

-- 指定系统角色连接 {SYSDBA | SYSOPER | SYSBACKUP}
[root@modb ~]# yasql / as sysdba
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64

Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux

SQL>

-- 指定IP和端口
[root@modb ~]# yasql sys/yasdb_123@127.0.0.1:1688
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64

Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux

SQL>
  1. 直接执行某个 SQL
[root@modb ~]# yasql sys/yasdb_123 -c 'desc kewei.t1'
NAME                                                             NULL?     DATATYPE
---------------------------------------------------------------- --------- ---------------------------------
ID                                                                         INTEGER
  1. 直接执行某个 SQL 文件
[root@modb ~]# cat /tmp/desc.sql
desc kewei.t1
[root@modb ~]# yasql sys/yasdb_123 -f /tmp/desc.sql
NAME                                                             NULL?     DATATYPE
---------------------------------------------------------------- --------- ---------------------------------
ID                                                                         INTEGER
  1. 连接 YashanDB 时执行某个文件
[root@modb ~]# yasql sys/yasdb_123 @/tmp/desc
NAME                                                             NULL?     DATATYPE
---------------------------------------------------------------- --------- ---------------------------------
ID                                                                         INTEGER


YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
SQL>

yasdb

yasdb 用于启动 YashanDB 数据库实例进程。

[root@modb ~]# yasdb -v
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 0e623bd

目前有三种启动状态,分别是: “nomount”, “mount”, “open”

我们注意到,还有4种启动类型,分别是: “standalone”, “mn”, “cn”, “dn”

但由于个人版只支持单机形态,所以该选项无效,如果输入则启动报错。

[root@modb ~]# nohup yasdb nomount -t cn &
[1] 58766
[root@modb ~]# nohup: ignoring input and appending output to ‘nohup.out’

[1]+  Exit 255                nohup yasdb nomount -t cn
[root@modb ~]# nohup yasdb mount -t standalone &
[1] 58870
[root@modb ~]# nohup: ignoring input and appending output to ‘nohup.out’

[1]+  Exit 255                nohup yasdb mount -t standalone

思考:YashanDB 参数设定

在实训平台提供的启动脚本中,修改了3个参数。

echo "DATA_BUFFER_SIZE=2G" >> ${YASDB_DATA}/config/yasdb.ini
echo "LISTEN_ADDR=0.0.0.0:${ANCHOR_PORT}" >> ${YASDB_DATA}/config/yasdb.ini
echo "VM_BUFFER_SIZE=2"G >> ${YASDB_DATA}/config/yasdb.ini

那么这三个参数都是什么意思,如何调整才合适呢?

DATA_BUFFER_SIZE

DATA_BUFFER_SIZE 是指数据缓存区的大小,该值对数据库的性能表现至关重要,合理的缓存区配置将有效降低IO的开销。

该参数设置过小可能会出现启动或建库失败,最小值近似公式:(UNDO_SEGMENTS * 99 + 1K)* DB_BLOCK_SIZE ,计算时 UNDO_SEGMENTS 最小取64。

DB_BLOCK_SIZE 是指组织数据的块大小,包括文件中以及Data Buffer中的块大小,YashanDB提供8K,16K,32K三种不同规格的块大小供设置。

可以计算出 DATA_BUFFER_SIZE 最小值为 (64*99+1)*8=50696

这里依据内存大小进行调整,设置为 2G

LISTEN_ADDR

LISTEN_ADDR 是当前节点的服务地址,设置为 0.0.0.0 可允许所有IP进行访问。

这里的 ANCHOR_PORT 是 1688,为 YashanDB 默认监听端口。

VM_BUFFER_SIZE

VM_BUFFER_SIZE 是指VM用于保存数据运算的中间结果,例如order by,group by。如对其配置过小,将容易导致频繁的VM换入换出(产生IO)。

这里依据内存大小进行调整,设置为 2G

不过注意到这里好像有点小问题, "VM_BUFFER_SIZE=2"G G跑到了引号外面。

总结

墨天轮云市场提供的实训环境,大幅缩减了安装YashanDB时间,真是“一键启动”,开箱即用,我们可以用此测试、验证更多YashanDB本身的功能和特性。

本文详细地记录了在墨天轮YashanDB实训环境中的所有实验环节,并在本文后半段记录了一些思考和知识点补充。

最后修改时间:2023-11-29 13:32:36
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论