近期,YashanDB个人版正式开放下载,也有很多老师分享了如何安装YashanDB数据库。
但对于只关心数据库本身的同学而言,可能想跳过安装步骤,直接上手体验,那该如何是好?
好消息!墨天轮云市场,上架了【YashanDB在线实训环境】,直达链接:https://www.modb.pro/market/1755433
让我们一起来快速体验一下吧!
1分钱,买不到吃亏,买不到上当
登录墨天轮云市场,点击【YashanDB在线实训环境】页面,【立即购买】,只需支付 0.01 元,即可拥有私享【YashanDB在线环境】。
进入到实训环境后,【点击进入实训环境】,这里需要等待一小会,后台会自动初始化。
看到 【Welcome to 墨天轮】画面,就代表已经初始化成功,可以正常使用了,此时,YashanDB已经拉起,可以直接进行下一步实操。
上手实操
一、连接环境
查看后台进程,可以看到 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
[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 的客户端工具,有几种常用方法:
- 查看 yasql 版本
[root@modb ~]# yasql -v
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
- 连接 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>
- 直接执行某个 SQL
[root@modb ~]# yasql sys/yasdb_123 -c 'desc kewei.t1'
NAME NULL? DATATYPE
---------------------------------------------------------------- --------- ---------------------------------
ID INTEGER
- 直接执行某个 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
- 连接 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实训环境中的所有实验环节,并在本文后半段记录了一些思考和知识点补充。