背景
凡事预则立
听说我们的项目将来要部署到国产化平台上,数据库用的是达梦数据库,国产的这些组件也没有用过,就想着在虚拟机安装数据库服务(因为是在 CentOS7
上安装测试,所以图形化客户端无法使用,可以通过在远程/宿主 Windows
主机上选择仅安装客户端使用,eg:DM管理工具,DM数据迁移工具等),先研究下国产数据库的使用,包括基础的 CRUD
操作以及事务支持,方便将来的部署与维护。
由于本系列文章仅用于记录当时项目的国产化迁移过程,不涉及太多的理论内容,基本都是一系列的操作过程,所以行文上就直接上操作了。如果您有任何疑问,欢迎留言评论。
从前车马很慢,书信很远,一生只够爱一个人。
如今生活太快,时间太少,不要绕圈子,给我来个痛快的。
系统环境
在 CentOS7
上进行安装,虚拟主机信息如下:
[root@hadoop3 local]# uname -a Linux hadoop3 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@hadoop3 local]# cat /proc/version Linux version 3.10.0-1127.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020 [root@hadoop3 local]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)
下载
手机号、短信验证码登录。
下载 x86
下 CentOS7
下的 DM8
开发版。
解压, iso
解压,将 DMInstall.bin
上传至服务器,赋予可读、可写、可执行权限。
安装
执行安装文件
[root@hadoop3 local]# chmod +x DMInstall.bin [root@hadoop3 local]# ./DMInstall.bin 解压安装程序.......... Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-pi-gtk-3659 in java.library.path no swt-pi-gtk in java.library.path Can't load library: /tmp/swtlib-64/libswt-pi-gtk-3659.so Can't load library: /tmp/swtlib-64/libswt-pi-gtk.so /tmp/swtlib-64/libswt-pi-gtk-3659.so: libgtk-x11-2.0.so.0: 无法打开共享对象文件: 没有那个文件或目录 at org.eclipse.swt.internal.Library.loadLibrary(Library.java:267) at org.eclipse.swt.internal.Library.loadLibrary(Library.java:174) at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:22) at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63) at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54) at org.eclipse.swt.widgets.Display.<clinit>(Display.java:132) at org.eclipse.swt.widgets.Widget.isValidSubclass(Widget.java:988) at org.eclipse.swt.widgets.Decorations.checkSubclass(Decorations.java:164) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:258) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:253) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:204) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:140) at com.dameng.common.gui.util.SWTUtility.canInitGUI(SWTUtility.java:380) at com.dameng.install.ui.MainApplication.run(MainApplication.java:80) at com.dameng.install.ui.MainApplication.main(MainApplication.java:436) # 缺少相关的依赖,安装即可 yum install -y libXtst # 再次执行安装 [root@hadoop3 local]# ./DMInstall.bin 解压安装程序.......... Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-pi-gtk-3659 in java.library.path no swt-pi-gtk in java.library.path /tmp/swtlib-64/libswt-pi-gtk-3659.so: libgtk-x11-2.0.so.0: 无法打开共享对象文件: 没有那个文件或目录 Can't load library: /tmp/swtlib-64/libswt-pi-gtk.so at org.eclipse.swt.internal.Library.loadLibrary(Library.java:267) at org.eclipse.swt.internal.Library.loadLibrary(Library.java:174) at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:22) at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63) at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54) at org.eclipse.swt.widgets.Display.<clinit>(Display.java:132) at org.eclipse.swt.widgets.Widget.isValidSubclass(Widget.java:988) at org.eclipse.swt.widgets.Decorations.checkSubclass(Decorations.java:164) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:258) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:253) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:204) at org.eclipse.swt.widgets.Shell.<init>(Shell.java:140) at com.dameng.common.gui.util.SWTUtility.canInitGUI(SWTUtility.java:380) at com.dameng.install.ui.MainApplication.run(MainApplication.java:80) at com.dameng.install.ui.MainApplication.main(MainApplication.java:436) # 缺少相关的依赖,安装即可 yum install -y gtk2 [root@hadoop3 local]# ./DMInstall.bin 解压安装程序.......... 初始化图形界面失败,如果当前监视器窗口不支持图形界面,请进入安装文件所在文件夹并使用"./DMInstall.bin -i"进行命令行安装。 [root@hadoop3 local]# ./DMInstall.bin -i 请选择安装语言(C/c:中文 E/e:英文) [C/c]: 解压安装程序.......... core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 14989 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 14989 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 可打开文件数过少,建议至少设置为65536或更多。 欢迎使用达梦数据库安装程序 是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n 是否设置时区? (Y/y:是 N/n:否) [Y/y]:y 设置时区: [ 1]: GTM-12=日界线西 [ 2]: GTM-11=萨摩亚群岛 [ 3]: GTM-10=夏威夷 [ 4]: GTM-09=阿拉斯加 [ 5]: GTM-08=太平洋时间(美国和加拿大) [ 6]: GTM-07=亚利桑那 [ 7]: GTM-06=中部时间(美国和加拿大) [ 8]: GTM-05=东部部时间(美国和加拿大) [ 9]: GTM-04=大西洋时间(美国和加拿大) [10]: GTM-03=巴西利亚 [11]: GTM-02=中大西洋 [12]: GTM-01=亚速尔群岛 [13]: GTM=格林威治标准时间 [14]: GTM+01=萨拉热窝 [15]: GTM+02=开罗 [16]: GTM+03=莫斯科 [17]: GTM+04=阿布扎比 [18]: GTM+05=伊斯兰堡 [19]: GTM+06=达卡 [20]: GTM+07=曼谷,河内 [21]: GTM+08=中国标准时间 [22]: GTM+09=汉城 [23]: GTM+10=关岛 [24]: GTM+11=所罗门群岛 [25]: GTM+12=斐济 [26]: GTM+13=努库阿勒法 [27]: GTM+14=基里巴斯 请选择设置时区 [9]:21 安装类型: 1 典型安装 2 服务器 3 客户端 4 自定义 请选择安装类型的数字序号 [1 典型安装]: 所需空间: 1181M 请选择安装目录 [/opt/dmdbms]: 可用空间: 44G 是否确认安装路径(/opt/dmdbms)? (Y/y:是 N/n:否) [Y/y]: 安装前小结 安装位置: /opt/dmdbms 所需空间: 1181M 可用空间: 44G 版本信息: 有效日期: 安装类型: 典型安装 是否确认安装? (Y/y:是 N/n:否):y 2021-09-27 22:40:18 [INFO] 安装达梦数据库... 2021-09-27 22:40:18 [INFO] 安装 基础 模块... 2021-09-27 22:40:59 [INFO] 安装 服务器 模块... 2021-09-27 22:41:29 [INFO] 安装 客户端 模块... 2021-09-27 22:44:55 [INFO] 安装 驱动 模块... 2021-09-27 22:46:20 [INFO] 安装 手册 模块... 2021-09-27 22:46:32 [INFO] 安装 服务 模块... 2021-09-27 22:46:35 [INFO] 移动日志文件。 2021-09-27 22:46:37 [INFO] 创建dmdba系统管理员完成。 2021-09-27 22:46:37 [INFO] 正在启动DmAPService服务... 2021-09-27 22:46:41 [INFO] 启动DmAPService服务成功。 2021-09-27 22:46:41 [INFO] 安装达梦数据库完成。
安装结束~
安装系统服务
[root@hadoop3 ~]# cd /opt/dmdbms/bin [root@hadoop3 bin]# ./dminit path=/opt/dmdbms/data page_size=16 log_size=2048 case_sensitive=n initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2022-07-09 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /opt/dmdbms/data/DAMENG/DAMENG01.log log file path: /opt/dmdbms/data/DAMENG/DAMENG02.log write to dir [/opt/dmdbms/data/DAMENG]. create dm database success. 2021-09-27 23:23:09 [root@hadoop3 bin]# cd ../script/root/ [root@hadoop3 root]# ./dm_service_installer.sh -h Usage: dm_service_installer.sh -t service_type [-p service_name_postfix] [-dm_ini dm_ini_file] [-watcher_ini watcher_ini_file ] [-monitor_ini monitor_ini_file] [-cssm_ini cssm_ini_file] [-dfs_ini dfs_ini_file] [-dcr_ini dcr_ini_file] [-dss_ini dss_ini_file] [-drs_ini drs_ini_file] [-dras_ini dras_ini_file] [-dcs_ini dcs_ini_file] [-server server_info] [-dmap_ini dmap_ini_file] [-dpc_mode SP|MP|BP] [-m open|mount] [-y dependent_service] [-auto true|false] or dm_service_installer.sh [-s service_file_path] or dm_service_installer.sh -h -t 服务类型,包括dmimon,dmap,dmserver,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr,dmdcs,dmdrs,dmdras,dmdss -p 服务名后缀,对于dmimon,dmap服务类型无效 -dm_ini dm.ini文件路径 -watcher_ini dmwatcher.ini文件路径. -monitor_ini dmmonitor.ini文件路径. -dcr_ini dmdcr.ini文件路径. -cssm_ini dmcssm.ini文件路径. -dss_ini dss.ini文件路径. -drs_ini drs.ini文件路径. -dras_ini dras.ini文件路径. -dcs_ini dcs.ini文件路径. -dfs_ini dfs.ini文件路径. -dmap_ini dmap.ini文件路径. -dpc_mode DPC节点类型. -server 服务器信息(IP:PORT) -auto 设置服务是否自动启动,值为true或false,默认true. -m 设置服务器启动模式open或mount,只针对dmserver服务类型生效,可选 -y 设置依赖服务,此选项只针对systemd服务环境下的dmserver和dmasmsvr服务生效 -s 服务脚本路径,设置则忽略除-y外的其他参数选项 -h 帮助 [root@hadoop3 root]# ./dm_service_installer.sh -t dmserver -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -p DMSERVER Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service to /usr/lib/systemd/system/DmServiceDMSERVER.service. 创建服务(DmServiceDMSERVER)完成 [root@hadoop3 root]# systemctl status DmServiceDMSERVER ● DmServiceDMSERVER.service - DM Instance Service(DmServiceDMSERVER). Loaded: loaded (/usr/lib/systemd/system/DmServiceDMSERVER.service; enabled; vendor preset: disabled) Active: inactive (dead) [root@hadoop3 root]# systemctl start DmServiceDMSERVER [root@hadoop3 root]# systemctl status DmServiceDMSERVER ● DmServiceDMSERVER.service - DM Instance Service(DmServiceDMSERVER). Loaded: loaded (/usr/lib/systemd/system/DmServiceDMSERVER.service; enabled; vendor preset: disabled) Active: active (running) since 二 2021-09-28 02:47:39 EDT; 13s ago Process: 12945 ExecStart=/opt/dmdbms/bin/DmServiceDMSERVER start (code=exited, status=0/SUCCESS) Main PID: 12986 (dmserver) CGroup: /system.slice/DmServiceDMSERVER.service └─12986 /opt/dmdbms/bin/dmserver path=/opt/dmdbms/data/DAMENG/dm.ini -noconsole 9月 28 02:47:22 hadoop3 systemd[1]: Starting DM Instance Service(DmServiceDMSERVER).... 9月 28 02:47:39 hadoop3 DmServiceDMSERVER[12945]: [39B blob data] 9月 28 02:47:39 hadoop3 systemd[1]: Started DM Instance Service(DmServiceDMSERVER)..
处理前面安装过程时的警告
可打开文件数过少,建议至少设置为 65536
或更多。
[root@hadoop3 ~]# ulimit -n 1024 [root@hadoop3 ~]# ulimit -n 65535 [root@hadoop3 ~]# ulimit -n 65535
客户端连接
因为我是典型安装,所以在安装达梦服务端的同时也安装了客户端。进入客户端后,操作类似于其他关系型数据库。
[root@hadoop3 dmdbms]# ./bin/disql disql V8 用户名:SYSDBA 密码: 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 445.520(ms) SQL> select * from v$version; 行号 BANNER ---------- ------------------------- 1 DM Database Server 64 V8 2 DB Version: 0x7000c 已用时间: 42.031(毫秒). 执行号:53300. SQL> select id_code; 行号 id_code ---------- --------------------------------------- 1 1-2-38-21.07.09-143359-10018-ENT Pack1 已用时间: 0.685(毫秒). 执行号:53301.
注意事项
达梦 SQL
查询必须指定 from 库名. 表名,除非用户名和库名一致时可省略库名。
- 在默认的模式下建表
create table "SYSDBA"."city" ( "city_id" VARCHAR(36), "city_name" VARCHAR(100), "region_id" INT );
- 新建模式
create user SMART_CITY identified by SMART_CITY123 limit password_life_time 60, failed_login_attemps 5, password_lock_time 5; --identifiled by 指定鉴定密码 --limit password_life_time 指定最大生存时间(单位:天) --failed_login_attemps 指定最大登录失败次数 --password_lock_time 指定锁定时间(单位:分) create user SMARTCITY identified by SMART_CITY123 limit failed_login_attemps 5, password_lock_time 5;