一、达梦8数据库的安装
1.DM8版本介绍
企业版:支持集群,适用于中大型企业
标准版:不支持集群,适用于中小型企业
开发版:和企业版功能相同,只是使用时间有限制,默认官网发布时间一年。
安全版:支持强制访问控制等安全特性。
2.安装程序下载
官网下载地址:产品下载-达梦数据
根据你的CPU和操作系统类型下载DM8开发版
X86平台的银河麒麟V10下载Redhat7版本
3.收集安装环境
操作系统(内核要求2.6以上)
cat /proc/version
GLIBC版本:要求2.3以上。
ldd --version
网络、防火墙,如需远程连接服务器,需要关闭防火墙或者开放对应端口。
关闭防火墙
systemctl stop firewalld.service
开放端口
firewall-cmd --add-port=5236/tcp --zone=public --permanent
firewall-cmd –reload
4.安装规划
DM8不推荐使用root安装
软件安装路径:/dm8
数据库创建目录(用来存放数据文件等):/dm8/data
归档路径:/dm8/arch
备份路径:/dm8/backup
安装用户:dmdba
用户组:dm
①创建安装用户和用户组
groupadd dm
useradd -g dm -m -d /home/dmdba -s /bin/bash dmdba
修改dmdba密码
passwd dmdba
②创建安装路径并将路径授权dmdba:
mkdir /dm8
chown dmdba:dm /dm8
4.数据库安装
①挂载达梦安装包ISO文件
mount -o loop /opt/dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso /mnt
其中/opt/dm8_20220720_x86_rh7_64_ent_8.1.2.114_pack11.iso是下载的DM8安装包存放路径
如果挂载mnt提示无权限错误使用下面语句
mount -o remount,rw /
②执行安装
DM8支持图形化界面和命令行安装,也可以使用Xmanager等工具进行远程图形化界面安装,Xmanager调用远程图形化界面的方法请自行查阅相关文章。
调用图形化界面安装的方法:
使用root进入命令行
xhost +
echo $DISPLAY
记住得到的值(:1.0或者:0.0)
切换到dmdba用户,配置图形界面其中:1.0是上一步得到的值
su - dmdba
export DISPLAY=:1.0
开始图形化界面安装
cd /mnt
./DMInstall.bin
命令行安装的方法:
切换到dmdba用户,执行安装命令
su - dmdba
cd /mnt
./DMInstall.bin -i
如果使用虚拟机并且资源分配过少可能会报OpenJDK错误:
OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory file:13413
则修改tmp大小,执行下面语句可以解决
sudo mount -t tmpfs -o size=2048M none /tmp
图形化安装过程
点击确定,然后下一步即可,提示需要KEY文件的地方试用版可以不选择KEY文件直接下一步。
此处选择我们之前规划的安装路径dm8,然后下一步,弹出提示选择确定
到此步骤用root登录命令行,按照提示执行脚本,然后点击确定和完成
完成后DM8数据库程序就安装完毕了,此时我们需要配置数据库实例,一个DM8可以包含多个数据库实例,按照下图勾选初始化数据库,点击初始化
选择创建数据库实例点击开始即可,图形化界面创建的实例会自动注册数据库服务,不需要自行再注册
开始创建后,可以根据自己的用途配置相应的参数,到初始化参数界面可以配置一下数据库的参数
页大小、簇大小、字符集、大小写敏感、VARCHAR类型以字符为单位等参数一旦指定,数据库创建完成后将无法更改。
页大小:页是达梦数据库最小存储单元;达梦中varchar类型字段长度受页大小的限制,默认不能超过页大小的一半:
页大小 | Varchar长度 |
4K | 2000 |
8k | 4000 |
16K | 8000 |
32K | 8188 |
簇大小:簇是达梦数据库最小分配单元;
VARCHAR类型以字符为单位:
默认达梦,VARCHAR类型以字节为单位存储。
Varchar(10), 字符集是utf-8(一个中文占用三个字节),可以保存3个中文字符。
Varchar(10), 字符集是gb18030(一个中文占用两个字节), 保存5个中文字符。
如果勾选VARCHAR类型以字符为单位,Varchar(10)不管字符集是什么都能保存10个中文。
nvarchar新版本以字符为单位存储。
最后点击完成开始创建实例,安装过程中会弹出以下界面,按照提示用root登录命令行,执行脚本,最后点击确定。然后可能会提示需要抽取数据库,根据提示执行命令即可
最后点击完成,数据库安装完毕
命令行安装
通图形化安装步骤一致,根据提示选择和修改参数即可,完成后需要根据提示执行脚本
请以root系统用户执行命令:
/dm8/script/root/root_installer.sh
完成数据库安装后需要,手动创建数据库实例,使用dminit命令行工具,根据位于安装目录的bin下,可以配置参数,如:数据文件路径,数据库名,实例名,端口号,密码等
使用dmdba用户
dminit创建的数据库实例,默认没有注册数据库服务。
su - dmdba
cd /dm8/bin
./dminit path=/dm8/data DB_NAME=DMService instance_name=DMSERVER port_num=5236 SYSDBA_PWD=Dameng123
手动注册数据库服务,root用户执行安装目录/script/root下脚本,其中DMSERVER和dm.ini的路径为创建实例时指定的实例名和数据库名
su
cd /dm8/script/root
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm8/data/DMService/dm.ini
数据库服务启动
systemctl start DMServiceDMSERVER.service
systemctl enable DMServiceDMSERVER.service
二、DM的客户端工具
(1) DM管理工具(manager)
联机工具。可以管理表空间、用户、角色、数据库备份、模式下对象(表、约束、索引、视图、触发器、函数、存储过程等)管理等。
cd /dm8/tool
./manager
(2) DM控制台工具(console)
脱机工具。数据库的物理冷备、数据库物理还原与恢复,参数配置。
(3) DTS数据迁移工具(dts)
支持Oracle、SQLServer、MySQL、DB2、PG等迁移到达梦数据库。
(4) DM性能监视工具(monitor)
(5) disql数据库连接工具
tool目录下disql调用的就是bin目录下disql,不同的是tool目录下disql需要使用connect命令连接数据库。
三、DM数据库的几种状态
Shutdown:关闭状态。
MOUNT:配置状态,此状态下不能访问数据库中数据文件的数据,可以访问v$开头来源于控制文件或内存中的表数据。配置状态,数据库不能对外提供正常服务,业务不能正常运行。
设置归档、迁移联机日志、设置主备集群主机、备机需要在配置状态。
OPEN状态:打开状态,此时数据库对外提供正常服务。可以读写数据文件中的数据。
SUSPEND状态:挂起状态,此时数据库只能读不能写。
DM中mount和open可以相互转换,Oracle中mount只能到open,open不能到mount;
DM的suspend和open可以相互转换,但mount和suspend不能相互转换。
DM没有NOMOUNT状态(oracle有NOMOUNT状态)
四、.net连接DM数据库
dm提供了多种开发语言的驱动程序,位于数据库安装目录的drivers目录下。.net驱动位于该目录dotNet文件夹,我们使用DmProvider进行数据库连接,DmProvider实现了ADO.NET的接口
根据项目类型,复制相应的DmProvider.dll到项目中,并在项目中引用
注意不要使用VS中NuGet包管理中的下面包,此包不是官方提供,使用有问题
DM数据库连接字符串如下
Server=localhost; User Id=SYSDBA; PWD=SYSDBA;
DM支持单用户多模式,使用多模式时SQL语句需要在表名前加上模式名.,如:
SELECT * FROM OA.TABLENAME
由于DM实现了ADO.NET,使用方法与其他数据库如:SQL SERVER、My SQL相同,将类名改成DM的类名即可
以下为My SQL和DM的代码对比
/// <summary>
/// 查询数据库将结果填充DataSet
/// </summary>
/// <param name="strSQL">Sql查询语句</param>
/// <param name="objDS">要填充的DataSet对象</param>
/// <param name="iStart">开始记录号</param>
/// <param name="iCount">记录数量</param>
/// <param name="strTableName">表名</param>
/// <returns>所填充的记录数</returns>
public override int FillDataSet(string strSQL, System.Data.DataSet objDS, int iStart, int iCount, string strTableName)
{
int iFillCount = 0;
MySqlDataAdapter objAdapter = null;
try
{
objAdapter = (MySqlDataAdapter)this.GetDataAdapter(strSQL);
objAdapter.SelectCommand.CommandTimeout = base.iTimeOut;
iFillCount = objAdapter.Fill(objDS, iStart, iCount, strTableName);
}
finally
{
objAdapter = null;
}
return iFillCount;
}
/// <summary>
/// 查询数据库将结果填充DataSet
/// </summary>
/// <param name="strSQL">Sql查询语句</param>
/// <param name="objDS">要填充的DataSet对象</param>
/// <param name="iStart">开始记录号</param>
/// <param name="iCount">记录数量</param>
/// <param name="strTableName">表名</param>
/// <returns>所填充的记录数</returns>
public override int FillDataSet(string strSQL, System.Data.DataSet objDS, int iStart, int iCount, string strTableName)
{
int iFillCount = 0;
DmDataAdapter objAdapter = null;
try
{
objAdapter = (DmDataAdapter)this.GetDataAdapter(strSQL);
objAdapter.SelectCommand.CommandTimeout = base.iTimeOut;
iFillCount = objAdapter.Fill(objDS, iStart, iCount, strTableName);
}
finally
{
objAdapter = null;
}
return iFillCount;
}
其余更多使用请查阅DM手册,手册位于安装目录的doc文件夹下