天天看点

达梦数据库初学心得前言2.安装篇3.使用篇4.总结

达梦数据库初学心得

  • 前言
  • 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的问题都可以从这些手册中找到答案。

达梦数据库初学心得前言2.安装篇3.使用篇4.总结

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)本人还只是对达梦数据库有了一些粗浅的认识,欢迎读者指正。