达梦在近几年的发展越来越好,作为国产数据库的龙头,身边常听到有人评价达梦就是国产ORACLE,作为一个ORACLE也用过有些年的IT人员,我认为达梦语法上确实是和Oracle兼容比较友好,还是有一定差别的。以下我从初学者的几个角度浅谈达梦和oracle数据库特点:
关于体系架构
- Oracle
多进程结构,比如个核心后台进程(PMON、SMON、CKPT、DBWn、LGWR)。
- 达梦数据库
单进程多线程服务架构,如监听线程、工作线程、IO线程、调度线程、日志相关线程等所有的线程都集成到了dmserver进程中。

关于状态的切换
- Oracle数据库
可以从mount状态启动到open状态,但不能从open状态直接切换到mount状态。
- 达梦数据库
在mount状态和open状态之间是可以自由切换的,还增加了一个suspend挂起状态。

suspend:只读状态,只能读,不能写。mount和open可以相互转换,suspend和open也可以相互转换。但mount和suspend不能相互转换。
结束符的使用
- oracle数据库
命令、SQL以及程序包都是以";"为结束符。
- 达梦数据库
SQL和命令使用";"结束,但是在执行程序包、创建模式等操作的时候要以"/"为结束符。
关于备份
- Oracle数据库
热备是在RMAN中进行操作。
- 达梦数据库
dmrman的使用与RMAN很相似,但是只能做冷备,做热备的时候需要在数据库中进行备份操作。
监听程序
- Oracle数据库
有单独的监听程序,使用lsnrctl进程监听操作。
- 达梦数据库
没有了单独的监听程序,监听变成了线程dm_lsnr_thd集成到了dmserver的进程中。
修改联机日志文件大小
- Oracle数据库
需要添加新的日志文件进来,删除原来老的日志进行替换。
- 达梦数据库
可以直接对logfile的大小进行扩容。
用户模式上有较大区别
- Oracle数据库
用户和模式为一一对应关系,一个用户对应一个模式
- 达梦数据库
用户和模式是一对多的管理,一个用户可以拥有多个模式,一个模式仅能归属于一个用户。
当系统建立一个用户时,会自动生成一个对应的模式用户还可以建立其他模式。
关于表
- Oracle数据库
默认创建的是堆表。
- 达梦数据库
DM默认创建的是索引组织表。
索引组织表和堆表的区别:索引组织表有且仅有一个聚簇索引键,表数据按照聚簇索引键排序(数据是有序的,插入有序),rowid是逻辑rowid,占用存储空间,所以索引组织表比堆表占用较多空间。
关于参数修改的格式
alter system set xxx scope=spfile/memory/both;
alter system set xxx spfile/memory/both;
查询实例状态和在线日志文件的语句
select status from v$instance;
select * from v$log;
select * from v$logfile;
select status$ from v$instance;
select * from v$rlog;
select * from v$rlogfile;