达梦数据库初学心得
- 前言
- 2.安装篇
-
- 2.1.达梦数据库安装
- 2.2.配置odbc
- 2.3.善用使用手册
- 3.使用篇
-
- 3.1.DM8体系结构相关
- 3.2.维护表空间
- 3.3.用户权限管理
- 3.4.模式对象管理
- 3.5.备份还原
- 4.总结
前言
前不久,我很幸运地获得了为期3天的达梦DCA认证培训的机会。本文介绍了学习中遇到的一些问题是怎么解决的,记录了从老师那里学到的完整的操作流程,希望能对读者有一些帮助。
本文内容在VMWare15+中标麒麟高级服务器系统软件V7.0+DM8亲测有效。
2.安装篇
2.1.达梦数据库安装
详细的安装步骤请参考链接: DM8数据库安装步骤于创建数据库.
这里补充一些老师强调的注意事项:
1)数据库要远程访问,应该要关闭防火墙或者是开放对应的端口号
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
[[email protected] ~]# systemctl status firewalld
2)应设置文件最大打开数
- 重启服务器生效
[[email protected] Packages]# vi /etc/security/limits.conf
dmdba soft nofile 4096
dmdba hard nofile 65536
- 临时生效
3)不建议用root用户安装,我们学习中全程使用dmdba用户安装
4)一个数据库软件是可以创建多个实例,通过端口号区别,达梦默认端口号是 5236
2.2.配置odbc
1)检查,确认已安装gcc。以gcc-4.8.x开头,
[[email protected] unixODBC-2.3.0]$ rpm -qa | grep gcc
gcc-4.8.5-36.el7.ns7.01.x86_64
gcc-gfortran-4.8.5-36.el7.ns7.01.x86_64
gcc-c++-4.8.5-36.el7.ns7.01.x86_64
libgcc-4.8.5-36.el7.ns7.01.x86_64
2)解压/配置/编译/安装
cd /home/dmdba/
tar -xzvf unixODBC-2.3.0.tar.gz
cd /home/dmdba/unixODBC-2.3.0
./configure
make
make install
3)安装后检查版本:
[[email protected] unixODBC-2.3.0]# odbcinst -j
unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
4)修改配置文件
vi /usr/local/etc/odbcinst.ini
[DM8 ODBC DRIVER ]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
vi /usr/local/etc/odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
Server = localhost
UID = SYSDBA
PWD = e2008jlpl #填真实的数据库用户SYSDBA的密码
TCP_PORT = 5236
5)测试连接DM8:
[[email protected] dm8]$ which isql
/usr/local/bin/isql
[[email protected] dm8]$ isql dm8
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
2.3.善用使用手册
在成功安装DM8数据库后,在安装目录/dm8/doc有丰富的使用手册,几乎大部分使用DM8的问题都可以从这些手册中找到答案。

3.使用篇
3.1.DM8体系结构相关
1)可使用console修改参数,修改后需要重启数据库服务生效
2)控制文件只有一个,会自动备份,默认10个备份
3)为了缓解日志频繁切换造成的性能问题,需要调整重做日志文件的大小,要么扩大大小/要么增加数量
4)重做日志是循环写、可覆盖的
5)用一个SQL的执行过程来描述对线程和缓冲区的应用:
-
A客户端发起请求(监听线程监听到请求,交给工作线程)
执行SQL语句时,
- B会做语法分析【关键字正不正确, 用到字典缓冲区和SQL缓冲区】、
- C再做语义分析【在不在表里面,用到字典缓冲区】
- D在做权限分析【用户有没有权限访问表,用到字典缓冲区】
- E查询SQL是否在buffer中,在内测逻辑读;不在在磁盘中物理读,并放到缓冲区 【SQL缓冲区、数据缓冲区、IO线程】
- F数据发生变更(日志缓冲区、日志刷新线程、数据缓冲区、IO线程、工作线程)
- G是否有可用的执行计划,有就按执行计划执行,没有就生成执行计划,执行SQL,结果集返回客户端。(字典缓冲区,排序区,hash区,工作线程,IO线程,SQL缓冲区)
3.2.维护表空间
1)表空间数据文件初始大小是4096*页(8192)=32M
2)表空间不足时
- 可扩展数据文件
- 也可添加数据文件
3)更换数据文件路径
- 表空间脱机
- 更换路径
- 表空间联机
4)注意
- 表空间只能改大不能改小
- system,roll,temp表空间不允许脱机,temp表空间不能被删除。
3.3.用户权限管理
1)给用户权限可以精确到列
grant SELECT("SALARY") on "DMHR"."EMPLOYEE" to "TBS";
grant SELECT("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "TBS";
2)不能对单个列的权限进行撤回,权限撤回是针对表级
revoke UPDATE("SALARY") on "DMHR"."EMPLOYEE" from "TBS" cascade;
错误号: -5658
错误消息: 第1 行附近出现错误:
只能从整个表或视图而不能按列 REVOKE
正确的语句:
3.4.模式对象管理
1)模式与用户的关系
一个用户可以对应多个模式/一个模式只能属于一个用户;创建用户时,会自动创建同名模式
2)ABC模式存在,则不允许创建同名ABC用户
3)创建模式,要加/
SQL> CREATE SCHEMA BCD;
2 /
操作已执行
4)删除被外键约束依赖的表时,要先删除依赖的表,才能删除本表
创建表TEST4,依赖TEST3的ID列
create table "SYSDBA"."TEST4"
(
"ID" INT
);
alter table "SYSDBA"."TEST4" add constraint foreign key("ID") references "SYSDBA"."TEST3"("ID");
删除表test3失败:
SQL> drop table test3;
drop table test3;
第1 行附近出现错误[-2639]:试图删除被依赖对象[TEST3]
先删除表test4,再删除表test3,成功:
SQL> drop table test4;
SQL> drop table test3;
5)索引
-
作用:加快查询速度,对更新少量数据时,可以提高更新速度;insert时会有延迟;
数据库会自动维护索引,索引会占用存储空间的。
- 建索引基本要求:经常查询的列/where条件中出现的列/连接列/返回少量或小部分数据
- 不适合建索引:列上有大量的空值/列上有大量的重复值/结果集返回大量的数据
- 查看索引有没有用到
3.5.备份还原
1)冷备:DmAP服务需要开启,不需要开启归档,需要关闭数据库实例。是针对整库的备份。
2)热备:需要开启归档,需要开启数据库实例。
3)开启归档:只有当在配置状态才能开归档;可以在DM管理工具->管理服务器->系统管理图形界面开启归档。下面是开启归档的sql语句:
alter database mount;
alter database add archivelog 'type=local,dest=/opt/dmdbms/data/arch,file_size=100,space_limit=0';
select name, arch_mode from v$database;
alter database open;
4)dmrman整库备份/检查/还原:
- 先关闭服务
[[email protected] bin]$ ./DmServiceDMSERVER stop
- 备份
- 检查备份
- 还原
- 恢复
- 更新magic
- 最后开启服务
[[email protected] bin]$ ./DmServiceDMSERVER start
5)整库备份,还原单个表空间:
RMAN>backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
RMAN>restore database '/dm8/data/DAMENG/dm.ini' tablespace main from backupset '/dm8/backup';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace main;
还原表空间不需要更新magic。
6)逻辑备份还原:
- 全库导出
[[email protected] bin]$ ./dexp sysdba/e2008jlpl file=full.dmp log=full.log directory=/dm8/backup
- 用户导出
[[email protected] bin]$ ./dexp sysdba/e2008jlpl file=test.dmp log=test.log directory=/dm8/backup owner=test
- 表导出
[[email protected] bin]$ ./dexp sysdba/e2008jlpl file=employee.dmp log=employee.log directory=/dm8/backup tables=dmhr.employee
- 全库导入:
[[email protected] bin]$./dimp sysdba/e2008jlpl file=full.dmp log=imp_full.log directory=/dm8/backup full=y
注意:执行用户导入时,如果用户不存在,应先创建用户,否则导入失败。
4.总结
1)尽量使用dmdba用户操作,不使用root用户操作
2)可以尽量使用DM管理工具、DM控制台工具对数据库进行管理,但也要熟练使用sql语句来处理
3)本人还只是对达梦数据库有了一些粗浅的认识,欢迎读者指正。