达梦数据库8.0安装及心得体会

一、前言

        达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。

        DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。

        中国权威专业调研机构赛迪顾问发布《2020-2021年中国平台软件市场研究年度报告》,报告显示,在国产数据库领域,武汉达梦数据库股份有限公司市场发展能力和市场排名遥遥领先,稳居2020年中国数据库管理系统国产数据库市场排名第一。十余年蝉联国产数据库市场占有率第一,这充分彰显了达梦的综合实力和创新能力。

        武汉达梦数据库股份有限公司成立于2000年,为国有控股的基础软件企业,专业从事数据库管理系统与大数据平台的研发、销售和服务,同时可为用户提供全栈数据产品和解决方案。其前身是华中科技大学数据库与多媒体研究所,是国内最早从事数据库管理系统研发的科研机构。达梦数据库是中国数据库标准委员会组长单位,40年坚持自主原创技术路线,产品应用于国家重大核心领域。

下面简单介绍一下如何在虚拟机安装使用达梦数据库。

二、环境及文件准备

1、dm8_20210818_x86_rh6_64_ent_8.4.2.18_pack14.iso,这个是dm8的安装包。

2、安装好VMWARE,我使用的版本如下:

3、安装麒麟的镜像文件,我使用的版本如下:

建议使用2G以上的内存,硬盘空间建议20G以上。

三、安装准备工作

 

  1. 以root用户登录进入系统。
  2. 通过WINSCP等第三方工具,把dm8的iso文件复制到/opt目录下面备用。
  3. 检查/tmp的大小,确保在1G的剩余空间以上。

 如果不足,需要调整,请自行百度。

  1. 创建安装目录和添加用户。如下:
  1. 创建用户所在的组,命令如下:groupadd dinstall
  2. 创建用户,命令如下:useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
  3. 修改用户密码,命令如下:

passwd dmdba

  1. # 创建达梦安装路径

mkdir /dm8

  1. # 更改文件夹的所属用户组、所属用户

chown dmdba:dinstall /dm8

  1. # 查看是否更改成功

ll -ld /dm8

  1. 设置最大打开文件数。如下:

 

查看open files是不是1024,如上图是,则就要去/etc/security/limits.conf

进行修改:

vim /etc/security/limits.conf

dmdba soft nofile 102400

dmdba hard nofile 102400

root soft nofile 102400

root hard nofile 102400

  1. 挂载,进行安装:

# 在mnt下创建dm目录

mkdir /mnt/dm

# 挂载镜像 mount /镜像地址 /挂载的目标路径

mount /opt/dm8_20210818_x86_rh6_64_ent_8.4.2.18_pack14.iso /mnt/dm

 

四、开始图形化安装

 执行如下操作,确保dmdba用户能打开图形化界面。

然后基本都是Next,

 需要key,此处直接下一步

 路径更改为/dm8,之前规划好的。

继续执行,快完成的时候,自动弹出界面如下:

 提示你需要root用户执行如下命令:

 

 

 

 

 

上面的这三处,可以根据具体情况进行修改。

 

 

 

 

以root用户,执行上面的三行命令。

 

这样就完成了数据库和实例的安装工作。

五、达梦常用客户端及使用方式

5.1命令行连接工具

进入/dm8/bin目录下面

操作如下图:

 

# 连接远程服务器需要加上ip

./disql SYSDBA/SYSDBA@192.168.31.124:5236

然后quit命令退出。

5.2manager图形化管理工具

进入/dm8/tool目录下面

./manager

 

 

 

5.3 console工具

进入/dm8/tool目录下面

./.console

 

六、实践中遇到出错、更改及解决方法

1、虚拟机分辨率是800*600,太小了,需要调整。可打开图形化界面,但是看不见确认按钮,此时只能依靠命令行解决。

 控制台执行如下命令:

先查看系统支持哪些分辨率。

 

 

执行之后,屏幕瞬间就变宽了。

2、dmdba用户启动不了客户端工具,包括了manager、console,但是root用户可以。

出错如下:

 

 

解决办法就是:

  1. 分别打开两个tab,一个tab是root用户,一个是dmdba用户
  2. root用户执行:xhost +
  3. 然后dmdba用户执行:export DISPLAY=:0.0

七、结束语

上面只是作者在安装和使用达梦数据库的一些使用心得,特别是安装过程遇到的一些具体问题,希望能分享给一些有需要的同学借鉴。具体在使用过程中,还有很多好玩的地方,需要读者自己去探索和挖掘。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,需要引入达梦数据库的Java驱动包,可以在Maven中添加以下依赖: ```xml <dependency> <groupId>dm</groupId> <artifactId>dmjdbc</artifactId> <version>8.0.0-jar-with-dependencies</version> </dependency> ``` 接下来,我们可以使用Java的ReentrantLock类来实现分布式锁,然后通过达梦数据库的事务来确保锁的正确性。以下是一个示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class DmLock implements Lock { private static final String LOCK_TABLE = "t_dm_lock"; private static final String LOCK_NAME = "my_lock"; private static final String URL = "jdbc:dm://localhost:5236"; private static final String USERNAME = "username"; private static final String PASSWORD = "password"; private Connection connection; private Lock innerLock = new ReentrantLock(); public DmLock() throws SQLException { connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); createLockTable(); } private void createLockTable() throws SQLException { String sql = "CREATE TABLE IF NOT EXISTS " + LOCK_TABLE + " (name VARCHAR(255) PRIMARY KEY, locked BOOLEAN)"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.executeUpdate(); } } @Override public void lock() { innerLock.lock(); try { while (!tryLock()) { Thread.sleep(100); } } catch (InterruptedException e) { e.printStackTrace(); } } @Override public void lockInterruptibly() throws InterruptedException { innerLock.lockInterruptibly(); try { while (!tryLock()) { Thread.sleep(100); } } catch (InterruptedException e) { innerLock.unlock(); throw e; } } @Override public boolean tryLock() { try { connection.setAutoCommit(false); String sql = "SELECT locked FROM " + LOCK_TABLE + " WHERE name = ? FOR UPDATE"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, LOCK_NAME); if (!statement.execute()) { return false; } if (statement.getResultSet().next()) { boolean locked = statement.getResultSet().getBoolean(1); if (locked) { return false; } } sql = "INSERT INTO " + LOCK_TABLE + " (name, locked) VALUES (?, ?)"; try (PreparedStatement insertStatement = connection.prepareStatement(sql)) { insertStatement.setString(1, LOCK_NAME); insertStatement.setBoolean(2, true); insertStatement.executeUpdate(); } connection.commit(); return true; } } catch (SQLException e) { try { connection.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } return false; } } @Override public boolean tryLock(long time, TimeUnit unit) throws InterruptedException { long timeout = unit.toMillis(time); long start = System.currentTimeMillis(); innerLock.lockInterruptibly(); try { while (!tryLock()) { if (System.currentTimeMillis() - start >= timeout) { return false; } Thread.sleep(100); } } catch (InterruptedException e) { innerLock.unlock(); throw e; } return true; } @Override public void unlock() { try { connection.setAutoCommit(false); String sql = "UPDATE " + LOCK_TABLE + " SET locked = ? WHERE name = ?"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setBoolean(1, false); statement.setString(2, LOCK_NAME); statement.executeUpdate(); } connection.commit(); } catch (SQLException e) { try { connection.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } finally { innerLock.unlock(); } } @Override public Condition newCondition() { throw new UnsupportedOperationException(); } } ``` 以上是一个基于达梦数据库8.0版本的分布式锁实现的示例代码。需要注意的是,该实现仅供参考,实际使用中需要根据具体的场景和需求进行调整和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值