一、产品介绍
崖山数据库(YashanDB)是深圳计算科学研究院自主设计研发的新型数据库管理系统。在经典数据库理论基础上,融入原创的有界计算理论、近似计算理论、并行可扩展理论和跨模融合计算理论,以源头创新开启超融合数据计算革命。面向下一代云化基础设施,为解决超融合数据全新设计架构,支持大规模并发事务处理和混合事务-分析处理、在线实时分析、海量数据查询加速以及异构数据融合处理场景。
二、体验目的
1、为公司选型国产化数据库,尤其是兼容Oracle的关系型数据库,因我司研发的软件生态数据库大多数都是基于Oracle进行开发。(主要目的)
2、参加墨天轮产品官体验活动。(次要目的)
三、测试环境准备
1、操作系统环境
操作系统 | CentOS 7.9 |
CPU | X86_64,24核心 |
内存 | 32G |
硬盘 | 2T,普通机械盘 |
文件系统 | xfs |
网络 | 千兆以太网 |
2、数据库版本
yashandb-personal-23.1.1.100
四、安装部署
4.1操作系统参数设置
1、打开生成core文件的开关:
使用ulimit -c查看当前状态
# ulimit -c unlimited
没有开启进行开启,生产环境不建议开启。
# vi /etc/security/limits.conf后添加
soft core unlimited
hard core unlimited
2.关闭交换分区:
使用sysctl -a | grep swappiness
查看当前状态。
# sysctl -w vm.swappiness=0
# echo "vm.swappiness = 0">> /etc/sysctl.conf
3.调整自动分配本地端口范围:
下限值建议大于30000。
# sysctl -w net.ipv4.ip_local_port_range='32768 60999'
# echo "net.ipv4.ip_local_port_range = 32768 60999" >> /etc/sysctl.conf
4.调整进程的VMA上限:
使用sysctl -a|grep vm.max_map_count
查看当前上限值,建议大于2000000。
# sysctl -w vm.max_map_count=2000000
# echo "vm.max_map_count=2000000" >> /etc/sysctl.conf5.
5.调整资源限制值:
资源项 | 最小要求 | COMMAND |
---|---|---|
open files | 65536 | ulimit -n 65536 vi /etc/security/limits.conf后添加 * soft nofile 65536 * hard nofile 65536 |
max user processes | 65536 | ulimit -u 65536 vi /etc/security/limits.conf后添加 * soft nproc 65536 * hard nproc 65536 |
max memory size | unlimited | ulimit -m unlimited vi /etc/security/limits.conf后添加 * soft rss unlimited * hard rss unlimited |
stack size | 8192 | ulimit -s 8192 vi /etc/security/limits.conf后添加 * soft stack 8192 * hard stack 8192 |
6.关闭透明大页
查看透明大页是否开启
# cat /sys/kernel/mm/transparent_hugepage/enabled
若显示[always] madvise never
,则说明透明大页开启。
若显示always madvise [never]
,则说明透明大页关闭。
关闭透明大页
# vi /etc/default/grub
,在 GRUB_CMDLINE_LINUX
中添加或修改参数 transparent_hugepage=never
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
执行 grub2–mkconfig
指令重新配置 grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg
重启操作系统,使配置永久生效。
4.2创建安装用户
# useradd -d /home/yashan -m yashan
# passwd yashan
将yashan用户加入到YASDBA用户组
# groupadd YASDBA
# usermod -a -G YASDBA yashan
4.3创建安装目录
# cd /
# mkdir data
# cd data
# mkdir yashan
# chmod -R 777 /data/yashan
4.4上传安装介质
# su - yashan
$ mkdir /home/yashan/install
$ cd /home/yashan/install
上传安装介质到/home/yashan
减压安装介质:
$ tar -zxvf yashandb-personal-23.1.1.100-linux-x86_64.tar.gz -C /home/yashan/install/
4.5生成部署文件
执行yasboot package命令生成配置文件,命令详细参数可查阅yasboot。
其中,
--cluster指定为要部署的数据库集群名称,该名称也将作为集群中所有节点上初始创建数据库的名称(database name),
--port指定SSH服务端口,
--install-path指定数据库安装路径,
--data-path指定数据存放目录,
--begin-port指定数据库监听端口。
$ cd /home/yashan/install/
$ ./bin/yasboot package se gen --cluster yashandb -u yashan -p password --ip 172.16.60.174 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688
上一步骤执行完毕后,当前目录下将生成yashandb.toml和hosts.toml两个配置文件,yashandb.toml为数据库集群的配置文件,hosts.toml为主机的配置文件,可手动修改,但不建议删除文件中任何行,否则可能导致后续安装过程报错,或者所搭建的环境后续无法进行扩展配置。
[yashan@localhost install]$ ll *.toml
-rw------- 1 yashan yashan 494 12月 3 01:24 hosts.toml
-rw------- 1 yashan yashan 725 12月 3 01:24 yashandb.toml
[yashan@localhost install]$
依据企业实际需要调整yashandb.toml配置文件中的安装参数。其中,可在group级别设置YashanDB的所有建库参数,在node级别设置YashanDB的所有配置参数。
参数含义:
# 以下内容以实际展示结果为准
cluster = "yashandb" #安装后修改也不会生效,除非重新安装
create_simple_schema = false #为true部署完会执行示例的sql,若改为true需要在deploy时指定sys-password参数
uuid = "64f04f0e999c72db72bd565762e6a4ea" #系统自动生成,不建议修改
yas_type = "SE" #部署模式,安装后修改也不会生效,除非重新安装
[[group]]
group_type = "db" #安装后修改也不会生效,除非重新安装
name = "dbg1" #安装后修改也不会生效,除非重新安装
[group.config] #可配置所有建库参数,不配置时采用默认值
CHARACTER_SET = "utf8"
ISARCHIVELOG = true
REDO_FILE_NUM = 4
REDO_FILE_SIZE = "128M"
[[group.node]]
data_path = "/home/yashan/yasdb_data" #为DATA目录,安装后修改也不会生效,除非重新安装
hostid = "host0001" #安装后修改也不会生效,除非重新安装
role = 1 #数据库主备角色,安装后修改也不会生效,除非重新安装
[group.node.config] #可配置所有数据库参数,不配置时采用默认值,安装后修改可以生效(只读参数不可修改)
LISTEN_ADDR = "192.168.1.2:1688"
REPLICATION_ADDR = "192.168.1.2:1689"
RUN_LOG_FILE_PATH = "/home/yashan/yasdb_home/yashandb/23.1.0.2/log/yashandb/db-1-1/run"
RUN_LOG_LEVEL = "INFO"
SLOW_LOG_FILE_PATH = "/home/yashan/yasdb_home/yashandb/23.1.0.2/log/yashandb/db-1-1/slow"
生成参数内容如下:
[yashan@localhost install]$ cat hosts.toml
uuid = "656b682e917c7066819e974c82a76ca2"
cluster = "yashandb"
yas_type = "SE"
secret_key = "d45e0a1f2ecfd330"
add_yasdba = true
[om]
hostid = "host0001"
[om.config]
LISTEN_ADDR = "172.16.60.174:1675"
[[host]]
hostid = "host0001"
group = "yashan"
user = "yashan"
password = "password"
ip = "172.16.60.174"
port = 22
path = "/data/yashan/yasdb_home"
jvm_path = ""
total_memory = 0
[host.yasagent]
[host.yasagent.config]
LISTEN_ADDR = "172.16.60.174:1676"
[yashan@localhost install]$ cat yashandb.toml
cluster = "yashandb"
create_simple_schema = false
uuid = "656b682e917c7066819e974c82a76ca2"
yas_type = "SE"
[[group]]
group_type = "db"
name = "dbg1"
[group.config]
CHARACTER_SET = "utf8"
ISARCHIVELOG = true
REDO_FILE_NUM = 4
REDO_FILE_SIZE = "128M"
[group.create_sql]
[[group.node]]
data_path = "/data/yashan/yasdb_data"
hostid = "host0001"
role = 1
[group.node.config]
LISTEN_ADDR = "172.16.60.174:1688"
REPLICATION_ADDR = "172.16.60.174:1689"
RUN_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.1.1.100/log/yashandb/db-1-1/run"
RUN_LOG_LEVEL = "INFO"
SLOW_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.1.1.100/log/yashandb/db-1-1/slow"
[yashan@localhost install]$
4.6执行安装
请修改hosts.toml配置文件密码,否则报如下错误:
172.16.60.174
ip:172.16.60.174 scan failed, 主机扫描失败:ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain
config check failed
[yashan@localhost install]$ ./bin/yasboot package install -t hosts.toml -i yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
checking install package...
install version: yashandb 23.1.1.100
host0001 100% [====================================================================] 3s
update host to yasom...
[yashan@localhost install]$
4.7数据库部署
[yashan@localhost install]$ ./bin/yasboot cluster deploy -t yashandb.toml
type | uuid | name | hostid | index | status | return_code | progress | cost
------------------------------------------------------------------------------------------------------------
task | f009ace6dbd70b84 | DeployYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 10
------+------------------+--------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
[yashan@localhost install]$
4.8设置环境变量
#部署命令成功执行后将会在$YASDB_HOME目录下的conf文件夹中生成<<集群名称>>.bashrc环境变量文件
$ cd /data/yashan/yasdb_home/yashandb/23.1.1.100/conf/
# 如~/.bashrc中已存在YashanDB相关的环境变量,将其清除
$ cat yashandb.bashrc >> ~/.bashrc
$ source ~/.bashrc
4.9修改sys用户口令
YashanDB不提供系统初始口令,请通过yasboot工具设置集群内所有节点sys用户的密码。
$ cd /home/yashan/install
$ ./bin/yasboot cluster password set -n newpasswd -c yashandb
[yashan@localhost instance]$ cd /home/yashan/install
[yashan@localhost install]$ ./bin/yasboot cluster password set -n XiaoCao@2023 -c yashandb
type | uuid | name | hostid | index | status | return_code | progress | cost
----------------------------------------------------------------------------------------------------------
task | f1cdfdab7a782687 | YasdbPasswordSet | - | yashandb | SUCCESS | 0 | 100 | 2
------+------------------+------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
[yashan@localhost install]$
或者
[yashan@localhost install]$ cd /data/yashan/yasdb_data/db-1-1/
archive/ backup/ config/ data/ dbfiles/ diag/ external/ instance/ local_fs/ log/ tmp/
[yashan@localhost install]$ cd /data/yashan/yasdb_data/db-1-1/instance/
[yashan@localhost instance]$ ll
总用量 1028
srwxrwxr-x 1 yashan yashan 0 12月 3 01:45 yasdb.ipc
-rwx------ 1 yashan yashan 4 12月 3 01:45 yasdb.pid
-rw-r----- 1 yashan yashan 1048576 12月 3 01:45 yasdb.pwd
[yashan@localhost instance]$ mv yasdb.pwd yasdbbak.pwd
[yashan@localhost instance]$ yaspwd file=yasdb.pwd
Enter password for SYS:XiaoCao@2023
[yashan@localhost instance]$
4.10验证安装是否成功
[yashan@localhost install]$ yasboot cluster status -c yashandb -d
使用yasboot工具连接数据库,查看实例状态。
[yashan@localhost install]$ yasboot sql -d sys/XiaoCao@2023@172.16.60.174:1688
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
YAS-00404 address 2023@172.16.60.174 is an invalid IPV4 URL/Ip address/hostname
please input user name: sys
sys
please input password: Hdty@2023
YAS-00404 address 2023@172.16.60.174 is an invalid IPV4 URL/Ip address/hostname
密码有特殊字符的回报如上错误,需要加单引号和双引号进行登录。
[yashan@localhost install]$ yasboot sql -d 'sys/"XiaoCao@2023"'@172.16.60.174: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> SELECT STATUS FROM V$INSTANCE;
SELECT STATUS FROM V$INSTANCE;
STATUS
-------------
OPEN
1 row fetched.
SQL> SELECT database_name FROM v$database;
SELECT database_name FROM v$database;
DATABASE_NAME
----------------------------------------------------------------
yashandb
1 row fetched.
SQL> select sysdate from dual;
select sysdate from dual;
SYSDATE
--------------------------------
2023-12-03
1 row fetched.
SQL>
五、创建表空间
创建测试表空间spc_test:
SQL> create tablespace spc_test datafile '/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test01.dbf' size 1g,'/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test02.dbf' size 1g;
create tablespace spc_test datafile '/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test01.dbf' size 1g,'/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test02.dbf' size 1g;
YAS-00311 failed to create file /data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test01.dbf, errno 2, error message "No such file or directory"
创建表空间如果目录不存在会报错,这个和Oracle一样,达梦是可以不创建目录直接创建表空间,只要上级文件夹有权限即可。
创建表空间目录:
[yashan@localhost ~]$ cd /data/yashan/yasdb_data/db-1-1/dbfiles/
[yashan@localhost dbfiles]$ ll
总用量 1122904
-rw-r----- 1 yashan yashan 25370624 12月 3 02:17 ctrl1
-rw-r----- 1 yashan yashan 25370624 12月 3 02:17 ctrl2
-rw-r----- 1 yashan yashan 25370624 12月 3 02:17 ctrl3
-rw-r----- 1 yashan yashan 67108864 12月 3 01:50 dwf
-rw-r----- 1 yashan yashan 134217728 12月 3 01:45 redo1
-rw-r----- 1 yashan yashan 134217728 12月 3 02:17 redo2
-rw-r----- 1 yashan yashan 134217728 12月 3 01:45 redo3
-rw-r----- 1 yashan yashan 134217728 12月 3 01:45 redo4
-rw-r----- 1 yashan yashan 67108864 12月 3 01:45 swap
-rw-r----- 1 yashan yashan 67108864 12月 3 01:50 sysaux
-rw-r----- 1 yashan yashan 67108864 12月 3 01:50 system
-rw-r----- 1 yashan yashan 67108864 12月 3 01:45 temp
-rw-r----- 1 yashan yashan 134217728 12月 3 01:45 undo
-rw-r----- 1 yashan yashan 67108864 12月 3 01:45 users
[yashan@localhost dbfiles]$ mkdir spc_test
[yashan@localhost dbfiles]$
创建表空间:
SQL> create tablespace spc_test datafile '/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test01.dbf' size 1g,'/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test02.dbf' size 1g;
create tablespace spc_test datafile '/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test01.dbf' size 1g,'/data/yashan/yasdb_data/db-1-1/dbfiles/spc_test/spc_test02.dbf' size 1g;
Succeed.
六、创建用户及授权
6.1创建用户test,并指定默认表空间:
SQL> create user testuser identified by testpwd default tablespace spc_test;
create user testuser identified by testpwd default tablespace spc_test;
Succeed.
6.2授权testuser创建会话权限、创建视图权限、resource角色及表空间使用权限:
SQL> grant create session,resource,unlimit tablespace,create view to testuser;
grant create session,resource,unlimit tablespace,create view to testuser;
YAS-02216 invalid privilege or role specified
可以发现其中有不支持的角色或者权限,下面单独进行授权测试:
SQL> grant create session to testuser;
grant create session to testuser;
Succeed.
SQL> grant resource to testuser;
grant resource to testuser;
Succeed.
SQL> grant create view to testuser;
grant create view to testuser;
Succeed.
SQL> grant unlimit tablespace to testuser;
grant unlimit tablespace to testuser;
YAS-02216 invalid privilege or role specified
可以发现没有unlimit tablespace权限
一次性授予多个角色或权限:
SQL> grant create session,create view,resource to testuser;
grant create session,create view,resource to testuser;
YAS-02216 invalid privilege or role specified
发现不支持,只能单个进行授权。
七、创建测试表
创建测试表test:
SQL> conn testuser/testpwd;
conn testuser/testpwd;
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux
SQL> create table a(id number,name varchar(2));
create table a(id number,name varchar(2));
Succeed.
SQL> insert into a values(1,'cs');
insert into a values(1,'cs');
1 row affected.
SQL> insert into a values(2,'中');
insert into a values(2,'中);
YAS-04008 NAME size exceeding limit 2
SQL> commit;
commit;
Succeed.
SQL> select * from a;
select * from a;
ID NAME
----------- -----
1 cs
1 row fetched.
可以发现在没有授权使用表空间的情况下,默认可以创建成功表。
通过插入数据测试可以看出数据库字段长度是以字节为单位,不是以字符为单位。
八、体验总结
由于交稿时间原因,目前只做了一个简单的测试,体验测试过程中如果有不恰当之处,欢迎大家批评指正,现就体验测试结果总结如下:
优点:
1、安装介质小
2、部署便捷
3、使用习惯基本符合Oracle使用习惯,全程操作下来比较舒服,适应较好。
4、测试了几个视图都是兼容Oracle的,做的还不错。
问题:
1、用户授权无法一次授予多个角色或权限,必须单个授权。
2、表空间没有授权使用,创建表时就可以直接使用,这个权限控制有问题。
3、sys用户登录连接普通用户之后,输入exit直接退出窗口,而不是直接惠东sys窗口。
4、数据库没有自己开发的客户端工具,这个其实最致命,国产化过程中需要提高效率,如果比原来效率低很多人都不乐意使用。
5、数据库字段长度是以字节为单位的,当然这个和Oracle一致,如果原来使用ZHS16GBK字符集的话迁移到yashandb所有表都需要扩容字段长度,这个工作量不小,可以学习一下达梦和金仓数据库可以在初始化数据库的时候指定字段是以字符为单位还是以字节为单位。
注:后续会继续测试数据库对象兼容性及数据库性能和易用性等方面的测试。