使用delphi 连接国产数据库:达梦
达梦数据库是一个国产大型数据库管理系统。其实现了大型数据库的各种功能。由于一直是听说,没有用过,今天想来
测试一下它的实际运行性能到底如何?就在其官网上下载了一份试用版,并安装到本地机器上。由于以前的数据库我用的是
Oracle. 首先使用DM 的数据迁移功能把原来delphi 窑洞的数据迁移到达梦上.这个迁移过程非常顺利,就连 oracle 里面
每次处理比较麻烦的CLOB 也很顺利的导入.导入完成后数据库文件的大小为500M.
现在测试使用delphi 连接达梦数据库,在delphi 主要有三种连接达梦的方式,一种是ODBC,一种是ADO,一种是Dbexpress.
由于本人一般使用unidac 访问数据库,就采用ODBC 方式, 首先需要建立一个达梦的ODBC 源。然后就可以使用unidac 的
TODBCUniProvider来连接.设置好各个对应的参数,然后在uniquery 里面输入SQL:
select * from delphi.yhk order by ID DESC
激活uniquery,就可以显示对应的数据了.
整个过程非常顺利,没有出现任何问题.同时数据库连接和打开的速度也很快,感觉非常不错.
国产化达梦数据库数据迁移文档:oracle11g数据库转达梦8数据库实例演示
Oracle 数据库转达梦数据库实例演示第一章:达梦数据库用户数据准备① 直接执行 sql 语句创建用户(该步执行完可直接第二章)② 使用工具创建用户第二章:达梦数据库转库oracle 转达梦转库过程第三章:转库过程问题分析① 关键字问题:[xxx]附近出现错误② 表空间不足问题:提示磁盘空间不足第一章:达梦数据库用户数据准备① 直接执行 sql 语句创建用户(该步执行完可直接第二章)需要注意的是达梦数据库的用户名需要和迁移的 oracle 的用户名一致。create user AUTO_2012_ORACLE_YZ1 identified by "nccloud001!"
default tablespace "nnc_data01"
default index tablespace "nnc_index01";
grant "DBA","VTI" to "AUTO_2012_ORACLE_YZ1";② 使用工具创建用户进数据库的安装路径下的 tool 目录下,然后打开 manager 工具。cd /data/dm8/tool/
./manager 用 sysdba 用户进行登录。 新建用户。 勾选权限。 然后进 DDL 里把生成的语句复制一下,拿出来执行一下。 稍作修改: user 后面跟的用户名包裹的引号去掉,第二行密码限制次数的删掉。create user AUTO_2012_ORACLE_YZ2 identified by "nccloud001"
default tablespace "nnc_data01"
default index tablespace "nnc_index01";
grant "DBA","VTI" to "AUTO_2012_ORACLE_YZ2"; 执行后就创建成功了。 第二章:达梦数据库转库oracle 转达梦转库过程进数据库的安装路径下的 tool 目录下,然后打开 dts 工具。cd /data/dm8/tool/
./dts 新建工程。 然后新建迁移。 新版本多了个向导选择。 输入 oracle 源库信息。 输入目标达梦数据库信息。 查找要迁移的用户,勾选上。 点击下一步后会提示获取迁移对象。 点完成就开始进行迁移了。 现在就开始迁移了。 第三章:转库过程问题分析转完之后发现有报错的要解决,解决完了点右下角的重新迁移出错对象就好了。 ① 关键字问题:[xxx]附近出现错误CONTEXT 关键字问题。错误号: -2007
错误消息: 第 1 行, 第 7 列[CONTEXT]附近出现错误:
语法分析出错
---------------------------------
CREATE CONTEXT "GLOBAL_AQCLNTDB_CTX" using "null" ② 表空间不足问题:提示磁盘空间不足这个表示表空间不足,就是表空间不足。 喜欢的点个赞❤吧!
基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作
由于一个客户朋友的需求,需要我的Winform开发框架支持国产达梦数据库的操作,这个数据库很早就听过,但是真正一般项目用的很少,一般在一些特殊的项目可能需要用到。由于我的Winform开发框架,是基于Enterprise Library的数据访问层的实现,因此增加一个数据库的支持很容易,本文介绍如何在框架层面上支持这种神秘的国产数据库-达梦数据库。
1、达梦数据库的简单介绍
达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是7.0版本,简称DM7。DM7提供对SQL92的特性支持以及SQL99的核心级别支持;支持多种数据库开发接口,包括OLE DB、ADO、ODBC、OCI、JDBC、Hibernate、PHP、PDO、DB Express以及.Net DataProvider等。
达梦数据库可以在(http://www.dameng.com/)上下载试用,安装好后提供很多管理工具,安装后可以让它创建一些实例数据库,以方便我们了解数据库的基本操作,本人对这款数据库了解不多,不过它号称支持SQL-92标准的,那么使用起来就不会有什么问题的,只是一些个性化的语法需要查询即可。
达梦数据库的分析器,可以在上面执行自己的一些语句,注意它的数据库表必须带上一个模式前缀,类似SqlServer的dbo,不过这个是必须的。
2、基于Enterprise Library的Winform开发框架的架构支持处理
我的这款基于Enterprise Library的开发框架,底层使用了微软的数据访问组件Enterprise Library,以适应多种数据库类型的操作,它的分层如下所示,每个DAL层(如DALSQL、DALOracle等)都提供了对应数据库的实现,界面层一下的分层图如下所示。
如果增加多一种数据库,那么我们增加多一个Enterprise Library的组件扩展类,并在业务数据模块里面增加对应的DAL层即可。
对于具体的DALSQL这样的数据实现层,我们不需要把数据访问的处理操作在全部的类里面实现一遍,我们可以通过抽象类的方式,把常规的数据库处理操作抽象到基类上面,如下所示。
这样在BaseDALSQL层(SqlServer数据库的个性化实现部分),只需要实现部分功能即可,我们把大多数的数据库操作,放到最顶级的数据库访问基类AbstractBaseDAL类上,从而是我们能够尽可能减少增加不同数据库类型,需要改写代码的数量。
最终我们增量增加一个数据访问层就可以实现了另外一种数据库(达梦数据库)的实现了,具体的架构设计图如下所示。
3、具体接入测试案例代码
上面小节,我们论证了框架的可扩展性,并且理论上已经具备支持达梦数据库的扩张了,本小节介绍如何具体实现达梦数据库的底层接入操作,并编写一个简单的测试例子进行测试,印证我们的实现思路。
我们知道,Enterprise Library实现其他数据库的支持,需要增加一个组件扩展类,如EntLibContrib.Data.SQLite是用来支持SQLite数据库的,EntLibContrib.Data.MySql是用来支持Mysql的,这个扩展类的内容也不多,主要是用来解析如下的配置文件的.
以便能够和Enterprise Library的对象进行无缝的整合,那么我们可以参考MySql数据库的扩展类EntLibContrib.Data.MySql的做法,来创建一个基于国产达梦数据库的Enterprise Library扩展类,大概项目代码如下所示。
这样我们就可以增加配置文件如下所示,它就能正常的解析并处理了。
下面我们来编写测试的代码来印证我们的扩展类,实现Winform开发框架支持国产达梦数据库的扩展操作。
我们创建一个数据库通用操作的辅助类来进行讲解,代码如下所示。
/// <summary>
/// 基于Enterprise Library类库的数据访问测试
/// </summary>
public class EntLibDmHelper
{
public EntLibDmHelper()
{
}
/// <summary>
/// 执行SQL查询语句,返回查询结果的所有记录的第一个字段,用逗号分隔。
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>
/// 返回查询结果的所有记录的第一个字段,用逗号分隔。
/// </returns>
public string SqlValueList(string sql)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand command = db.GetSqlStringCommand(sql);
StringBuilder result = new StringBuilder();
using (IDataReader dr = db.ExecuteReader(command))
{
while (dr.Read())
{
result.AppendFormat("{0},", dr[0].ToString());
}
}
string strResult = result.ToString().Trim(',');
return strResult;
}
/// <summary>
/// 执行SQL查询语句,返回所有记录的DataTable集合。
/// </summary>
/// <param name="sql">SQL查询语句</param>
/// <returns></returns>
public DataTable SqlTable(string sql)
{
DataSet ds = new DataSet();
Database db = DatabaseFactory.CreateDatabase();
DbCommand command = db.GetSqlStringCommand(sql);
return db.ExecuteDataSet(command).Tables[0];
}
}
注意,上面的代码没有用到达梦的具体对象,而是使用了Enterprise Library的Database等对象来操作,这样也就是非常方便我们进行接口的抽象处理,可以把更多的功能放到数据库访问抽象类里面了。
如果是利用达梦的.NET Provider的对象处理数据库,那么具体的代码应该是这样的。
/// <summary>
/// 执行SQL查询语句,返回查询结果的所有记录的第一个字段,用逗号分隔。
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns>
/// 返回查询结果的所有记录的第一个字段,用逗号分隔。
/// </returns>
public string SqlValueList(string sql)
{
DmConnection connection = new DmConnection(ConnectionString);
DmCommand cmd = new DmCommand(sql, connection);
connection.Open();
StringBuilder result = new StringBuilder();
using (DmDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
result.AppendFormat("{0},", dr[0].ToString());
}
}
string strResult = result.ToString().Trim(',');
return strResult;
}
/// <summary>
/// 执行SQL查询语句,返回所有记录的DataTable集合。
/// </summary>
/// <param name="sql">SQL查询语句</param>
/// <returns></returns>
public DataTable SqlTable(string sql)
{
DataSet ds = new DataSet();
DmDataAdapter adpater = new DmDataAdapter(sql, ConnectionString);
adpater.Fill(ds);
return ds.Tables[0];
}
为了方便测试,我编写一个简单的查询例子来进行介绍,如下代码所示,这里我们主要利用了EntLibDmHelper这个辅助类对象,也就是基于Enterprise Library的扩展的处理操作。
private void btnSearch_Click(object sender, EventArgs e)
{
BindData();
}
private void BindData()
{
string condition = "1=1 ";
if (this.txtAuthor.Text.Length > 0)
{
condition += string.Format("AND Author like '%{0}%' ", this.txtAuthor.Text);
}
if (this.txtName.Text.Length > 0)
{
condition += string.Format("AND Name like '%{0}%' ", this.txtName.Text);
}
if (this.txtPublisher.Text.Length > 0)
{
condition += string.Format("AND Publisher like '%{0}%' ", this.txtPublisher.Text);
}
string sql = "Select * from PRODUCTION.Product Where " + condition;
EntLibDmHelper helper = new EntLibDmHelper();
//DMHelper helper = new DMHelper();
DataTable dt = helper.SqlTable(sql);
this.dataGridView1.DataSource = dt;
sql = "Select count(*) from PRODUCTION.Product Where " + condition;
string totalCount = helper.SqlValueList(sql);
this.lblCount.Text = string.Format("共有数据:{0}条", totalCount);
}
最后例子运行的界面效果如下所示。
基本上印证了我们对框架的整合,实现了支持国产达梦数据库的扩展操作。剩下的就是我们模仿着把BaseDALSQL这样的基类,为达梦数据库增加一个个性化的数据库处理接口,就可以实现整体性框架的支持了。对于各个模块 的数据访问,我们需要增加一个DALDM这样的实现层,基类指向BaseDALDM这样就可以了。
本文转自博客园伍华聪的博客,原文链接:基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作,如需转载请自行联系原博主。
达梦数据库了解,与Oracle区别?
zu最近由Oracle转达梦,sql语法上差距大吗?达梦怎么样?
(linux-x86-arm-mips)银河麒麟安装国产达梦数据库
库达梦官网https://www.dameng.com/list_103.html,下载x86版本,上传至桌面切换至rootsudo -i查看文件大小du -sh *解压unzip dm8_20210712_x86_rh6_64_ent.ziplscd dm8_20210712_x86_rh6_64_ent/安装vimapt install vim -y修改操作系统资源限制vim /etc/security/limits.confdmdba soft nproc 65536dmdba hard nproc 65536dmdba soft nofile 65536dmdba hard nofile 65536dmdba hard core unlimiteddmdba soft core unlimitedvim /etc/security/limits.d/20-nproc.confsoft nproc 65536vim /etc/sysctl.conffs.file-max = 6815744fs.aio-max-nr = 1048576kernel.shmmni = 4096kernel.sem = 250 32000 100 128net.ipv4.ip_local_port_range = 9000 65500net.core.rmem_default = 4194304net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576vm.swappiness = 0vm.dirty_background_ratio = 3vm.dirty_ratio = 80vm.dirty_expire_centisecs = 500vm.dirty_writeback_centisecs = 100使内核参数生效sysctl -p创建安装用户和组groupadd -g 10000 dinstalluseradd -u 10001 -g dinstall -m -d /home/dmdba dmdbaecho "root:自定义"| chpasswd创建数据文件存放目录mkdir /data/mkdir /data/dmdatachown -R dmdba:dinstall /data/dmdata将镜像挂载至/mntmount -o loop dm8_20210712_x86_rh6_64_ent_8.1.2.38_pack1.iso /mntcp /mnt/DMInstall.bin /home/dmdbachown -R dmdba:dinstall /home/dmdba/DMInstall.bin安装数据库su - dmdba./DMInstall.bin -i请以root系统用户执行命令:/home/dmdba/dmdbms/script/root/root_installer.shexit/home/dmdba/dmdbms/script/root/root_installer.sh初始化数据库su - dmdbacd /home/dmdba/dmdbms/bin./dminit path=/data/dmdata page_size=32 log_size=2048 charset=1 case_sensitive=1 length_in_char=0注册数据库服务,切换rootcd /home/dmdba/dmdbms/script/root/./dm_service_installer.sh -t dmserver -dm_ini /data/dmdata/DAMENG/dm.ini -p DMSERVER启动数据库服务cd /home/dmdba/dmdbms/bin./DmServiceDMSERVER start数据库登陆cd /home/dmdba/dmdbms/bin./disql SYSDBA/SYSDBA 或 ./disql SYSDBA/SYSDBA123打开达梦数据库可视化界面,打开一个新的终端rootxhost +export DISPLAY=:0cd /home/dmdba/dmdbms/tool./manager安装流程参考达梦官方操作手册
2019国产数据库大盘点
作者:马超,温柔的程序员爸爸
本文转自公众号CSDN(ID:CSDNnews)
去“IOE”这个概念,最早由王坚院士在刚刚加入阿里时提出,其目标是将IBM 的小型机、Oracle数据库、EMC存储设备从阿里的IT体系中去除,代之以自主研发的系统。
而随着我国IT技术栈的不断演进,去“IOE”已经由一个企业的目标,变成了整个行业的目标,也就是我国必须使信息系统数据,运行在自研系统之上,以防止数据丢失造成的一系列严重后果。
作为一名长期在金融机构工作的IT人,提起对外核心技术依赖时,就不由得想起银行业的心脏——支付系统(CNAPS),原本都是世界银行的援建产物,直到2013年底我们才用自研的二代支付系统将其取代。
回想“IOE”这些年,我国的确在一些很多IT领域取得了长足的进步,比如目前我国移动支付水平就实现了对欧美国家的反超,足以独步世界。
近日,金山办公正式登陆科创版,也标志着雷军梦圆国产Office的“英雄之路”。可以看到这种应用级别的自主掌控,对于我国IT业来说已不是难事。
而且随着国产云计算服务水平的不断发展,国外厂商的小型机和存储,已经不多见,不过IOE中的O也就是Oracle、DB2等国外厂商的数据库,还依旧在我国市场大行其道。
这也反映出,近年来我国IT的一个现象,那就是硬件集成与应用等领域强,但是基础设施突破少。
01 支付宝的核心:OceanBase
OceanBase 是蚂蚁金服自研的金融级分布式关系数据库,号称每一行代码都是自主编写的。
在十年前,阿里的IT人,决定自主研发一款分布式金融级数据库,历经磨练后OceanBase已经能在普通硬件上,实现金融级高可用,并在业内首创“三地五中心”城市级故障自动无损容灾新标准,同时具备在线水平扩展能力,并且勇夺TPC的冠军。
02 深植于场景需求混布数据库:Hubble
Hubble是天云数据研发的HTAP数据库。所谓HTAP其实就是混合了TP和AP两种模式的数据库。
坦率讲,笔者在刚开始听到一种产品,既能提供TP服务、又能提供AP服务时,感到非常惊讶。
因为,OLAP(On-Line Analytical Processing)是指联机分析技术,打个比方,OLAP就像是私人飞机服务,不计较成本但是要求响应速度,主要用于用户联机交易的处理响应。
而OLTP(on-line transaction processing),则是指联机事务处理,OLTP的最大诉求就是低成本的处理海量数据,有点像海上运输,虽然处理数据量大但是速度慢,适合于客户历史帐单查询、客户画像分析等大数据方面的应用。
以前AP应用的流程比较固定,就像一个仪表盘,只有一两个数仓的管理员在看,但现在那些原本投在大屏的可视化项目,已经全部被推送到了移动端,这也就是TP+AP的个性化数字仓库的需求。
比如一个营业厅应用有六万多人,同时在线需要至少五百个并发/秒,理财经理要在某一时刻,看到大客户的结息、净值等一系列的数据服务,且都是个性化的。
这也就意味着,目前在应用领域,有强烈的需求把AP推到TP的场景里,这两者有机结合,对于大多数人来说,还只是个想法。
不过这两个看似矛盾的目标,竟然真的被天云数据,结合到一起了。其关键技术有以下几个方面:
一是在KV数据,再加一层KV索引、以适应高并发的TP需求。
二是通过将全局事务向本地事务锁进行转换,来保证系统的分布式计算一致性。
三是通过资源控制模块,完成TP与AP的结合使用。
03 SQL引擎与NoSQL存储的结合:巨杉数据库
SequoiaDB 巨杉数据库,是一款金融级分布式关系型数据库,也是一款开源产品。笔者认为SequoiaDB最大的贡献在于将标准SQL、事务与NoSQL的分布式存储相结合。
Github地址:
https://github.com/SequoiaDB/SequoiaDB
巨杉数据库使用JSON为标准存储格式,既可以描述关系型结构,能最大限度保留现有的应用资产;也可以描述非关系型结构。
这些使巨杉,可以把非结构化的文件和结构化的描述项一起存储,而不是索引+文件存储,从而实现适当降低范式维度和JOIN操作的复杂度。
而且,在分布式存储的基础上,其还添加了分布式SQL引擎,借此可以提供高并发、低延时和批量计算SQL能力以及ACID和事务支持。
其整体架构如下:
巨杉数据库在金融领域应用案例很多,相信他们SQL引擎与NoSQL存储的理念还会支撑他们越走越远。
04 产品线齐全的数据库:GBase和达梦
武汉达梦和天津南大通用,绝对算得上是国内数据库厂商中产品线最齐全的两家了。据笔者不完全统计,南大通用打造了GBase 8a、8t、8m、8s、8d、UP、InfiniData一体机等多款数据库软硬件产品,而达梦也不遑多让他们产品线包括了达梦7、8、ETL、TDD、HS、MPP等等。下面挑重点向大家介绍。
GBase 8a:就是我们日常所熟知的用于大数据分析的系统库。
GBase 8a能够实现大数据存储管理和高效分析,据测试,它能在PB级数据规模下,实现数据查询的秒级响应;实现千亿级文本条目全文检索的秒级响应;并且提供全过程可视化的数据查询分析及展现工具。
GBase 8t:一款对标Oracle的数据库。据称,其OLTP事务处理性能,已达到Oracle数据库的水平,能够在90%以上的场景中替代Oracle。
GBase 8t的关键技术有如下几方面:
事务机制 完全支持传统主流事务数据库的事务机制锁技术,有效支撑高度并发的事务密集型应用场景。
存储技术 GBase 8t产品的存储有物理的和逻辑的两种结构。物理结构中包含数据卷(Chunk)、数据段(Extent)和数据页(Page);逻辑结构包含数据空间(DbSpace)和表空间(TableSpace)。
索引技术 GBase 8t产品提供了索引技术来提升数据查询操作的性能。GBase 8t产品支持的索引包括B-Tree索引、R-Tree索引、函数索引和用户自定义索引。
高可用技术 GBase 8t产品提供了高可用集群技术,使用这些技术可以满足数据复制、共享存储、同城备份、远程容灾和两地三中心的整体灾备解决方案的要求。
当前,Gbase和达梦的产品均已经在金融、电信、电力等多个行业得到应用与验证了,使用场景非常广泛可谓我国国产数据库的双子星座了。
05 物联网时代的数据库TDengine、CTSDB
随着互联网的高速发展、大数据的迅速膨胀和物联网的飞速崛起,我们发现生活和工作中的大部分数据渐渐和时间产生了关联。
比如,微信运动的实时步数、股票每天的收盘价格、共享单车的设备状态等等。为了存储这些与时间相关的数据使用传统数据库其实问题很多。
比如,传统关系型数据库,在存储海量的时序数据场景下,存在的问题:
存储成本大:对于时序数据压缩不佳,需占用大量机器资源;
维护成本高:单机系统,需要在上层人工的分库分表,维护成本高;
写入吞吐低:单机写入吞吐低,很难满足时序数据千万级的写入压力;
而Hadoop等NoSQL数据库也有问题:
数据延迟高:离线批处理系统,数据从产生到可分析,耗时数小时、甚至天级;
查询性能差:不能很好的利用索引,依赖MapReduce任务,查询耗时一般在分钟级。
让你以在物联网时代需要与之特点相应的数据库产品来提供服务,目前我国在时序数据库方面主要有TDengine、CTSDB两款产品。
这里主要带大家了解一下腾讯时序数据库CTSDB:CTSDB(Cloud Time Series Database)是一种分布式、高性能、多分片、自均衡的时序数据库,针对时序数据的高并发写入、存在明显的冷热数据、IoT用户场景等做了大量优化,同时也支持各行业的日志解析和存储,其架构如下图所示。
在CTSDB和磁盘之间有一层FileSystem Cache的系统缓存,以使得能够更快地处理搜索请求。
作为腾讯唯一的时序数据库,CTSDB支撑了腾讯内部20多个核心业务(微信彩票、财付通、云监控、云数据库、云负载等)。
其中,云监控系统的记录了腾讯内部各种软硬件系统的实时状态,CTSDB承载了它所有的数据存储,在每秒千万级数据点的写入压力、每天20TB+数据量的写入场景下稳定运行,足以证明CTSDB可以稳定支撑物联网的海量数据场景。
06 互通有无,共同成长
除了上述这些数据库之外,我国还有不少基于MySQL、PosgreSQL等开源数据库内核研发的产品。
比如腾讯基于MySQL的TDSQL、华为基于PosgreSQL的GaussDB、中兴同样基于MySQL的GoldenDB,他们也都得到了相当广泛的应用。
尤其是承载着微众银行和威富通等多个重量级金融应用的TDSQL,凭借远超开源版MySQL的性能,真正做到了青出于蓝而胜于蓝。
可以说,我国自研数据库在各个方面,都已取得极大进步,这里也呼吁,国内数据库厂商能尽量将社区版本开源,与业界互通有无,共同成长。