达梦7的试用 与SQLSERVER的简单技术对比
达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库
说实话,第一眼看到还是感到很高大上的,毕竟ORACLE、MYSQL、SQLSERVER都没有推出数据库试用的云平台
其实其他数据库也应该学习一下达梦,做一个平台让大家有机会学习自家的数据库知识,虽然现在这个时代下载安装包比较容易,不过提供一个平台也是有好处的
试用体验
达梦数据库使用的SQL语言是DM_SQL
达梦数据库的存储层次结构
有空的朋友可以看一下主页右下角的三个文档
具体的DM_SQL语法和命令大家可以参考DM_SQL.pdf
试用开始
1、我们先选择一个实例,达梦是这样的,一个实例下面只能挂一个数据库,不像SQLSERVER和MYSQL可以挂多个数据库
我们就选DM1这个实例,Windows的,有一些实例可能有人在用所以你会连接不上,当前会话数那里就显示了哪些实例是有在用的
而且这些实例下面有一些是已经有人建了数据库在上面的了
2、选择完实例之后,我们就可以创建数据库,我们打开新建查询窗口
脚本:
--建库
CREATE TABLESPACE BOOKSHOP DATAFILE 'BOOKSHOP.DBF' SIZE 150
--创建模式和表
CREATE SCHEMA RESOURCES AUTHORIZATION SYSDBA
CREATE TABLE RESOURCES.COMPANYHOLIDAYS
(
HOLIDAY DATE
)STORAGE(ON BOOKSHOP);
--插入数据
INSERT INTO RESOURCES.COMPANYHOLIDAYS(HOLIDAY)
VALUES('2007-7-21')
INSERT INTO RESOURCES.COMPANYHOLIDAYS(HOLIDAY)
VALUES('2008-8-26')
INSERT INTO RESOURCES.COMPANYHOLIDAYS(HOLIDAY)
VALUES('2010-10-2')
--查询数据
select "HOLIDAY"
from "RESOURCES"."COMPANYHOLIDAYS";
View Code
TIPS:如果实在不知道语句怎么写,不用担心,左边的管理器也有生成脚本的功能,只需要选中表然后按右键,弹出右键菜单
不过右下角没有显示您当前连接的是哪个实例哪个库,不是太方便
查看表属性,可以看到表是使用16K的块大小
管理界面
这个管理平台的基本功能
平台编辑器的功能:语法自动补全、自动格式代码、关键字自动高亮、调试、界面管理跟一个完整的数据库管理工具差不多
缺点是右下角没有显示出当前在使用的实例和数据库名
下面是部分功能截图
新建了数据库和模式之后,马上就可以在左边的树型菜单里看到新建的模式
可以看到当前达梦数据库是运行Windows2003系统上的
达梦里有比较多的系统工作线程,每个系统工作线程各司其职
例如rapply_worker_thread线程,他是日志重做线程,他在备机上进行日志重做,跟SQLSERVER是一样的,SQLSERVER里镜像、复制也有一样功能的线程
管理界面就介绍到这里了,继续讲下去好像偏离这篇文章的主体,大家有兴趣可以继续深入研究
技术对比
当你对某一个数据库研究得很深入的时候再学习另一种数据库就会发现,大部分原理都是相通的
例如技术实现原理,还有一些概念,只是换了名词已而
例如:
1、SQLSERVER的用户自定义函数,在MYSQL和达梦数据库里叫存储函数
2、MYSQL里面的事件(EVENT),就是SQLSERVER里面的作业(JOB)
3、达梦数据库里的动态性能视图,SQLSERVER里叫动态管理视图(DMV)
4、达梦数据库里的归档日志文件,SQLSERVER里的事务日志文件
5、MYSQL和达梦数据库里的表空间类似于SQLSERVER里的文件组
当然,上面的概念比较可能不太准确,如果有错误希望大家指正o(∩_∩)o
技术对比一
数据库备份
表空间备份
备份的时候,本人觉得大部分原理跟SQLSERVER都是一样的,备份的时候,SQLSERVER会把活动日志一同放进bak文件里面
目的就是保证事务的一致性,达梦数据库也是一样,联机备份的时候把归档日志写入备份文件
而达梦数据库脱机备份的意思是:因为数据库已经脱机,没有数据变更了,当前数据库里的事务都是一致的,所以这时候就无需把日志写入到备份文件里
表空间备份类似于SQLSERVER的文件/文件组备份,只备份数据库的一部分,备份文件组的时候SQLSERVER也是需要把事务日志写入到BAK文件
保证事务一致性
注意:SQLSERVER没有提供脱机备份功能
技术对比二
数据库还原
SQLERVER在还原的时候也是只支持脱机还原,要求不能有任何连接在连接当前要还原的数据库,保证一致性
在达梦里也有备份链原理,内部的原理应该跟SQLSERVER是一样的,详细参考:《您真的理解了SQLSERVER的日志链了吗?》
在SQLSERVER里也有类似达梦数据库的并行还原技术,在还原数据库的时候企业版的SQLSERVER也是使用了多线程技术进行还原
下面摘抄自《SQLSERVER2012实施与管理实战指南》
企业版的SQLSERVERR会针对上述情况做优化,主要在于下面两点:
1、多线程并行处理重做和回滚
在企业版上,SQLSERVER会启用多线程做重做和回滚操作。这样做的一个好处,是缩短恢复总体时间,
让数据库能够尽早上线
如果在SQLSERVER的errorlog里看到类似下面的信息,就说明SQL正在做一个比较大的恢复
技术对比三
数据守护
数据库的数据保护,不论Oracle还是SQLSERVER还是MySQL,都有三重含义
第一重是Crash后重新起来,要确保数据不丢失
第二重是数据库告诉应用事务写入成功了,这个事务就得持久化,如果没有告诉应用结果,则还可以丢失;
第三重是主机失败切换时(主从切换),如何表现得和没有切换时的情况一样。
每种数据库都有不同的数据守护技术(数据保护技术)
而每种数据库的数据保护技术都是大同小异的
达梦数据库的数据守护技术
连接服务名里的双IP配置类似于SQLSERVER的连接字符串里指定镜像伙伴,当发生故障转移的时候,自动将程序的连接重定向
到备机
SQLSERVER里面使用镜像技术时,C#的连接字符串,Partner=myMirrorServerAddress指定备机地址,故障发生的时候.NET Data Provider
自动重定向连接到备机
Database mirroring --数据库镜像 连接字符串 C#
Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;
Initial Catalog=myDataBase;Integrated Security=True;
SQLSERVER里的镜像技术原理,下面摘抄自《SQLSERVER2012实施与管理实战指南》
数据库镜像的基本概念讲得差不多了。那么主体数据库和镜像数据库是如何同步数据的呢?
SQL数据库中任何的数据变化都会先记录到事务日志中,然后才会真正更新数据页面。
而事务日志是先保存在该数据库的日志缓存(log buffer)里,然后将缓冲中的日志固化到磁盘上LDF文件中。
在数据库镜像中,主体服务器在将主体数据库的日志从日志缓存固化到磁盘的同时,
还会使用另一个线程来将日志块(log block)发送到镜像服务器的端点。
当镜像服务器通过端点接收到日志块后,他先将日志块放到镜像数据库的日志缓存里,然后将缓存里的日志固化到磁盘上。
一旦日志块被固化后,镜像服务器会根据日志来对镜像数据库执行“重做(redo)”,最终更新数据页面。
当镜像服务器重做日志时,镜像数据库实际就是在执行日志的前滚操作。
如果重做失败,则镜像服务器通过将数据库至于suspended状态来暂停会话。
DBA必须找到问题的原因并解决问题才能继续会话。
当主体服务器截断或收缩数据库事务日志时,镜像服务器也将在日志的同一点收缩日志。
可以看到,数据库镜像其实就是通过发送日志来保持伙伴之间的同步。
从SQL2008开始,日志块在被主体服务器发送网络之前会做压缩处理。
这麽做的目的是为了提升日志发送和接收的效率,降低日志块传输对网络链路和网络设备所带来的负载。
对应那些异常繁忙的生产系统,这项功能不但降低了由于网络不胜负荷的镜像会话异常中断,
也降低由于网络延迟导致的数据库镜像性能问题,可谓一举两得。
达梦数据库的数据守护技术实际上是对应于SQLSERVER 的Always On技术和镜像技术
SQLSERVER 的Always On技术和镜像技术都是高可用技术,由于每种数据库对一些名词概念都采用自己的叫法
例如SQLSERVER里叫高可用,而MYSQL和ORACLE叫可用性,达梦里面叫数据守护,叫法不同,实际上都是指同一样东西
因为叫法的不同导致有一些ORACLE专家以为SQLSERVER没有可用性的方案和产品
ORACLE:RAC集群、Data guard
MYSQL:MYSQL CLUSTER
有一些架构是share-disk,而有一些架构是share-nothing的,具体在这里不展开来讲了
有兴趣的朋友可以看一下宋沄剑写的《数据库集群技术漫谈》
技术对比四
数据库复制
数据库复制不算是数据守护的技术,所以不归到数据守护里面
在SQLSERVER里,有发布数据库、分发数据库、订阅数据库之分
而达梦里面主服务器就是发布库,复制服务器就是分发库,从服务器就是订阅库
达梦数据库的复制结构跟SQLSERVER差不多
技术对比五
上面都说了相同点,现在说一下不同点,但是由于篇幅限制,我这里只说达梦的数据库数据页面的结构是怎样的
达梦数据库的页面有不同的大小,有4K、8K、16K、32K,实际上达梦数据库将数据页面叫数据块
跟ORACLE一样也是叫数据块
达梦数据库在配置文件里设置数据块的大小,重启数据库服务之后,达梦就会读取配置文件新的配置信息(有点类似MYSQL)
在新建表的时候就会根据配置文件来创建数据块
而表的数据类型的长度根据当前数据块的大小的不同而不同
而在SQLSERVER里面,是不能设置数据页面的大小的,每个数据页面的大小都是8K
重头戏:COUNT(*)统计结果行数
大家注意下划线部分!!
SQLSERVER跟达梦是一样的
USE [sss]
CREATE TABLE counttb(id INT NULL)
INSERT INTO [dbo].[counttb]
( [id] )
SELECT 1 UNION ALL
SELECT NULL
SELECT COUNT(1),COUNT(*),COUNT(id) FROM [dbo].[counttb]
本人之前也写过一篇,至于哪个观点正确留给大家去思考了
《SQLSERVER 里SELECT COUNT(1) 和SELECT COUNT(*)哪个性能好?》
总结
虽然大部分原理一样,但是语法跟数据库的结构还是有一些出入
所以当DBA从一种数据库转型到另一种数据库的时候还是需要一段时间的学习
例如从SQLSERVER转到MYSQL 或者ORACLE转到SQLSERVER
本文通过技术对比,可以使大家对达梦数据库的技术含量有一个度,虽然没有实际使用过,最起码了解一下我们国家的自主知识产权的产品还是不错的
实际上,达梦数据库的基本功能:序列、全文索引、策略、表分区。。。
这些该有的功能都有了,大家可以看一下文档,比较一下与ORACLE、SQLSERVER、MYSQL的区别
基本上这些数据库有的功能达梦都有
希望达梦这支国家队能够越来越强大的,在数据库方面使国家能够早日摆脱外国的数据库大佬们的制约
如有不对的地方,欢迎大家拍砖o(∩_∩)o