前言
达梦数据库某些产品性能优于ORALCE
据了解国内在基础软件领域的研究已经取得相当进展,国内最好的数据库厂家达梦数据库目前已经开始渗透数据库核心应用领域。在国家电网调度系统招标中,达梦击败国际数据库巨头甲骨文,在全国应用;在航空领域,达梦与中国航信共同签署的“中国航信基于安全可靠基础软硬件的在线事务处理系统应用迁移/重构和示范”项目成功上线运行;在中铁建财务共享平台构建中,基于达梦数据库读写分离集群的新一代应用系统不仅在功能上可以完全代替ORACLE,而且比基于ORACLE RAC集群的应用系统在性能、可扩展性等方面有更大优势。
DM8特性
DM8 是达梦数据库有限公司推出的新一代高性能数据库产品。它具有开放的、可扩展
的体系结构,易于使用的事务处理系统,以及低廉的维护成本,是达梦公司完全自主开发的
产品。DM8 以 RDBMS 为核心,以 SQL 为标准,是一个能跨越多种软硬件平台、具有大型
数据综合管理能力的、高效稳定的通用数据库管理系统。
数据库访问是数据库应用系统中非常重要的组成部分。DM 作为一个通用数据库管理系
统,提供了多种数据库访问接口,包括 ODBC、JDBC、DPI、OLEDB 以及嵌入方式等。本
书详细介绍了 DM 的各种访问接口,相应开发环境的配置,以及一些开发用例。
本书的主要读者是从事过数据库应用系统开发,并具有 SQL 使用基础的程序员。
开发一个应用系统,需要对其使用的数据库管理系统所具有的功能、性能、特性有较深
入的了解。DM 作为一个通用的数据库管理系统,具有非常丰富的功能和特色。
1、通用性
达梦数据库管理系统兼容多种硬件体系,可运行于X86、X64、SPARC、POWER等硬件体系之上。DM各种平台上的数据存储结构和消息通信结构完全一致,使得DM各种组件在不同的硬件平台上具有一致的使用特性。
达梦数据库管理系统产品实现了平台无关性,支持Windows系列、各版本Linux(2.4及2.4以上内核)、Unix、Kylin、AIX、Solaris等各种主流操作系统。达梦数据库的服务器、接口程序和管理工具均可在32位/64 位版本操作系统上使用。
2、高性能
支持列存储、数据压缩、物化视图等面向联机事务分析场景的优化选项;
通过表级行存储、列存储选项技术,在同一产品中提供对联机事务处理和联机分析处理业务场景的支持;
3、高可用
可配置数据守护系统(主备),自动快速故障恢复,具有强大的容灾处理能力。
4、跨平台
跨平台,支持主流软硬件体系(支持windows、Linux、中标麒麟、银河麒麟等操作系统),支持主流标准接口。
5、高可扩展
支持拓展软件包和多种工具,实现海量数据分析处理、数据共享集群(DSC)和无共享数据库集群(MPP)等扩展功能
遇到的一些问题
问题1:
如安装时图形话界面一直不能出现
这时候应该在root权限下输入xhost +
若直接输入xhost +不能够成功那么就在root权限输入以下指令
export DISPLAY=:0
xhost +
问题2:
达梦数据库备份成功,但是在库备份中没有显示备份的文件
可执行一下操作
vi /dm8/data/PROD/dm.ini
找到BAK_PATH字段 修改成对应的路径
然后重启服务器
[dmdba@localhost bin]$ ./DmServiceTEST restart
问题3:
SQL时不能够进入时
按照以下格式输入
SYSDBA:用户名
Dameng123:用户密码
5237:端口号
./disql SYSDBA/Dameng123@localhost:5237
问题4:
修改用户密码
alert user 用户 identified by 密码;
达梦数据库的安装
执行脚本
[root@localhost mnt]# /dm8/script/root/root_installer.sh cd /dm8/tool
[dmdba@localhost tool]$ ./dmservice.sh
创建数据库实例
执行脚本:
[root@localhost dm8]# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
[root@localhost dm8]# systemctl enable DmServiceDMSERVER.service
[root@localhost dm8]# systemctl start DmServiceDMSERVER.service
维护表空间
表空间不足,如何去维护表空间:
1、创建大表空间,数据导出,导入。
2、Resize 数据文件大小。
3、增加数据文件
alert tablespace tabs2 add datafile ‘/dm7/data/DAMENG/tab2_02.dbf’ size 50 autoextend on maxsize 100;
DMSQL 分类
DML(数据管理):insert update delete select
DDL(数据定义):create drop alter truncate
TCL(事务控制):commit rollback save moint
DCL(数据控制):grant revoke
简单查询
语法: Select () from ()
单列查询
查询员工表的姓名
select employee_name from dmhr.employee;
查询多列
select * from dmhr.employee;
别名 (便于我们更好的识别,便于计算) 查询员工姓名,工资
select employee_name,SALARY as gz from dmhr.employee;
连接 || “XXX 的工资是 XXX”
select employee_name ||’ 工 资 是 : '||SALARY from dmhr.employee;
去重复 distinct(隐藏排序) 查找部门的编号
select DISTINCT department_id from dmhr.employee;
表达式 salary+500
select employee_name,salary,salary+500 as tol from dmhr.employee;
过滤查询
语法 select () from () where ()
比较运算符、逻辑运算符、IN、IS NULL/IS NOT NULL,between …and… like
比较运算符:> >= < <= <> !=
select employee_name from DMHR.employee where employee_name=‘陈仙’ select employee_name,salary from dmhr.employee where salary>=30000;
逻辑运算符:and or not
select employee_name,department_id,salary from dmhr.employee where DEPARTMENT_ID=103 and salary>=10000;
select employee_name,department_id,salary from dmhr.employee where DEPARTMENT_ID=101 or salary>=10000;
模糊查询:like % _
%匹配 0 个或多个字符
匹配 1 个字符
select employee_name,salary from dmhr.employee where employee_name like ‘李%’;
select employee_name,salary from dmhr.employee where employee_name like ‘李_’;
IN
select employee_name,department_id from dmhr.employee where department_id in (101,104);
IS NULL/IS NOT NULL null 为空,不等于 0
select employee_name,job_id from dmhr.employee where job_id is null; select employee_name,job_id from dmhr.employee where job_id is not null;
Between… and …
select employee_name,salary from dmhr.employee where salary BETWEEN 20000 and 30000;
排序
升序 asc
select employee_name,salary from dmhr.employee order by salary asc;
降序 desc
select employee_name,salary from dmhr.employee order by 2 desc;
分组函数
Select () from () group by () having ();
多表连接查询
自然连接
select employee_name,department_name from dmhr.employee NATURAL JOIN dmhr.department;
交叉连接
select count() from dmhr.employee CROSS JOIN DMHR.department;
select count() from dmhr.employee; select count(*) from DMHR.department;
Using 子句
select employee_name,department_name from
dmhr.employee join dmhr.department using (department_id);
On
select employee_name,department_name from dmhr.employee a , dmhr.department b where a.department_id=b.department_id
Hash join
优化器 CBO 根据小表做列 hash 运算,生成 hash 值,根据 hash 值按 照连接条件列,扫描大表 select employee_name,department_name from dmhr.employee e inner HASH JOIN dmhr.department d on e.DEPARTMENT_ID=D.DEPARTMENT_ID
外连接
结果集显示满足条件的记录,不满足的用 null 代替
左外连接
把 left join 左边的全部显示出来,右边只显示满足条件的,不满足条 件的用 null 补齐
select employee_name,department_name from dmhr.employee e left JOIN dmhr.department d on e.DEPARTMENT_ID=D.DEPARTMENT_ID
右外连接
把 right join 右边的全部显示出来,左边只显示满足条件的,不满足
条件的用 null 补齐
select employee_name,department_name from dmhr.employee e right JOIN dmhr.department d on e.DEPARTMENT_ID=D.DEPARTMENT_ID
全外连接
select employee_name,department_name from dmhr.employee e full JOIN dmhr.department d on e.DEPARTMENT_ID=D.DEPARTMENT_ID
子查询
当一个查询是另一个查询的条件的时候,称为子查询(经常用于 where 子句中)子查询先运行,子查询的结果是主查询的条件
单行子查询 = > >= < <= <>
多行子查询 in any all
例如:找出和陈仙在一个部门的员工 select employee_name,department_id from dmhr.employee where department_id =
(select department_id from dmhr.employee where employee_name=‘陈仙’) ;
查询比 105 部门工资都高的人
select department_id,employee_name,salary from dmhr.employee where salary > all (select salary from dmhr.employee where DEPARTMENT_ID=105);
用户管理
查询有哪些用户
select username from dba_users;
1、sys — 达梦数据库的内置管理用户,不能登录数据库,数据库使用的大部分的数据字典和动态性能视图,sys
2、Sysdba —数据库的管理员
3、Sysauditor — 审计用户
4、Syssso—安全用户
5、sysdbo --数据操作员 (安全版有,四权分立)
规划用户
命名:字母开头,a_z,0-9,$#_
存储位置:对应的表空间
权限分配:权限+角色
密码策略: 参数:PWD_POLICY 设置系统默认口令策略。
0: 无策略;
1: 禁止与用户名相同;
2: 口令长度不小于 9;
3: 至少包含一个大写字母(A-Z);
4 :至少包含一个数字(0-9);
5:至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符 号; 若为其他数字,则表示配置值的和,如3=1+2,表示同时启用第1项和第 2 项策略。当 COMPATIBLE_MODE=1 时,PWD_POLICY 的实际值均为 0 更改数据库用户默认密码策略 sp_set_para_value(1,‘PWD_POLICY’,3)
是否兼容其他数据库模式。0:不兼容,1:兼容 SQL92 标准,2:兼容 ORACLE,3:兼容 MS SQL SERVER,4:兼容 MYSQL sp_set_para_value(2,‘COMPATIBLE_MODE’,2)
查看用户
Select username from dba_users;
1)创建 tbs 表空间 create tablespace “tbs” datafile ‘/dm8/data/DAMENG/tbs01.dbf’ size 32 CACHE = NORMAL;
2)创建用户、授权 create user “TEST” identified by “Dameng123” limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10; grant “VTI” to “TEST”; grant CREATE TABLE to “TEST”; ALTER USER TEST DEFAULT TABLESPACE “tbs”;
查看权限
select GRANTEE,GRANTED_ROLE from sys.dba_role_privs where grantee=‘TEST’;
查看用户的状态:
select username,account_status from dba_users;
锁定账户
alter user test account lock;
解锁账户
alter user test account unlock;
授权可以查看
dmhr.employee 表 Grant select on dmhr.employee to test;
撤回权限
revoke select on dmhr.employee from test;
删除用户:
drop user test cascade;
视图
视图:就是一张虚拟表,一个查询语句,真正的数据是在表上。
DM 视图分类:简单视图,复杂视图,物化视图
视图作用:数据库安全,权限
创建语法: create view () as ****接查询语句
修改视图:create or replace view () as ****接查询语句
创建简单视图: create view v_emp as select employee_name,department_id,salary from dmhr.employee where department_id=1001;
查询视图: Select * from user_views;
删除视图 drop view v_emp;
数据库备份
冷备:不需要开启归档,针对整库做备份
需要关闭数据库,DmApService 服务需要开启
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop [dmdba@localhost bin]$ ./DmAPService status
DmAPService (pid 16174) is running.
console 工具备份
命令行方式
cd /dm8/bin
[dmdba@localhost bin]$ ./dmrman
RMAN> backup database ‘/dm8/data/DAMENG/dm.ini’;
热备的方式
热备:需要开启归档,数据库需要联机 可以备份数据库、表空间、表、归档文件
查看归档模式:
SQL> select arch_mode from v$database;
行号
ARCH_MODE
1 Y
开启manager工具做热备
整库备份
全备
增备
disql 工具做热备:
全备:
SQL> backup database full backupset ‘/dm8/backup’;
增量备份:
SQL> backup database increment backupset ‘/dm8/backup/incrbak’;
管理工具中没有看到指定目录的备份:
添加备份工作目录:
表空间备份: backup tablespace “DMHR” full to “TS_DMHR_FULL_2020_08_05_14_59_54” backupset ‘TS_DMHR_FULL_2020_08_05_14_59_54’;
表备份: backup table “TEST”.“TEST11” to “TAB_TEST_TEST11_2020_08_05_15_01_16” backupset ‘TAB_TEST_TEST11_2020_08_05_15_01_16’;
归档备份: backup archivelog all to “ARCH_2020_08_05_15_05_27” backupset
‘ARCH_2020_08_05_15_05_27’;
物理还原
检查备份集:
RMAN> check backupset ‘/dm8/backup/’;
整库还原:
RMAN> restore database ‘/dm8/data/DAMENG/dm.ini’ from backupset ‘/dm8/backup’;
RMAN> recover database ‘/dm8/data/DAMENG/dm.ini’ with archivedir ‘/dm8/archlog’;
RMAN> recover database ‘/dm8/data/DAMENG/dm.ini’ update db_magic;
表空间还原:
表空间只能在联机模式下进行备份,脱机模式下进行还原
[dmdba@localhost DAMENG]$ rm -rf tbs01.dbf
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
RMAN> restore database ‘/dm8/data/DAMENG/dm.ini’ tablespace tbs from backupset ‘/dm8/data/DAMENG/bak/DB_DAMENG_FULL_20200805_154036_7050 61’; recover database ‘/dm8/data/DAMENG/dm.ini’ tablespace tbs;
逻辑备份
逻辑导出
全 库 导 出 : [dmdba@localhost bin]$ ./dexp SYSDBA/Dameng123 file=full.dmp log=full.log directory=/dm8/backup full=y
全 库 导 入 : ./dimp SYSDBA/Dameng123 file=full.dmp log=full.log directory=/dm8/backup ignore=y
用户导出: ./dexp SYSDBA/Dameng123 file=test.dmp directory=/dm8/backup owner=test
导出表: ./dexp test/Dameng123 file=test11.dmp directory=/dm8/backup tables=t_emp
结语
总的来说,达梦数据库在国产数据产品中有很高的市场占有率,已成功应用于金融、电力、航空、通信、电子政务等30多个行业领域。最近在湖北银行网银核心系统上线,证明未来在金融行业的竞争力,也表明产品具备高复杂应用环境下的支撑水准。