达梦数据库DM8个人学习记录
前言
本文仅用于记录本人学习DM8的过程,希望对看到这篇文章的你有所帮助。
数据库安装与实例管理
创建安装用户和组
规划软件安装路径
挂载安装文件、设置图形化界面
图形化安装数据库
安装时路径选择之前创建的对应路径
root用户运行以下脚本
安装完成后可通过/dm8/tool目录下的dbca进行实例初始化,也可在安装后直接根据提示接着进行初始化操作
配置完成后,root用户继续执行下面的3个脚本
[root@localhost ~]# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
[root@localhost ~]# systemctl enable DmServiceDMSERVER.service
[root@localhost ~]# systemctl start DmServiceDMSERVER.service
执行完成后通过/dm8/tool下的manager工具进入数据库管理界面
执行数据库实例状态的转换
DMSQL
本节使用的表均为创建数据库时生成的示例库DMHR中的表
简单查询
多列查询
对列起别名
去重
过滤查询
查找工资区间在 18000-30000 的员工的信息
逻辑运算符
查找部门编号为 101 并且员工工资大于 30000 的员工
排序
升序
降序
分组汇总
统计每个部门有多少人
统计员工数量超过20的部门有哪些
统计平均工资超过6000元的部门有哪些
连接查询
连接查询分为内连接和外连接。
内连接:查询只返回满足条件的记录。
外连接:查询除了返回满足条件的记录外,不满足条件的也返回,用 null 代替。
自然连接
两个表的连接列,列名和数据类型要一致,不需要手动指定连接列
如下,两表的连接列为department_id和manager_id,列名和数据类型均一致,可直接使用自然连接
交叉连接
即得到两个表的迪卡集,在记录数量上反映为两表的乘积
USING
当出现多个连接列时,可以去指定一个连接列,连接列不能加前缀或者别名
这里我们选择使用manager_id作为连接列,使用department_id当然也可以
ON
可以使用ON关键字去指明具体的连接条件
同上,使用department_id作为连接条件也可以
JOIN…ON…与下面的WHERE语句是等价的
左外连接
左边表的记录全部显示,右边表的记录不满足的就用 null 代替
右外连接
右边表的记录全部显示,左边表的记录不满足的就用 null 代替
全外连接
全外连接=左外连接+右外连接
子查询
当一个查询的结果是另外一个查询的条件时,这就叫子查询。子查询先运行。
子查询分为:单行子查询和多行子查询
单行子查询:子查询的结果只返回 1 条记录。
多行子查询:子查询的结果返回不止 1 条记录。
单行子查询
查找和张晓中在同一个部门的员工。
多行子查询
相关关键字有IN,ANY,ALL
查找比402号部门工资都高的员工。
DM8体系结构
本节主要体现为数据库各种参数的修改
在修改参数前,一个需要获取的重要信息是要修改参数的参数类型
下面是获取对应参数的参数类型的通用SQL语句
select para_name,para_value,para_type from v$dm_ini where para_name = ‘<填入对应的参数名>’;
根据查询到的para_type的不同,参数可分为以下类型:
Session:会话级,针对当前会话有效
Sys:动态,系统级的参数,即改即生效
Infile:静态参数,修改参数后,重启数据库实例生效
Read only:只读参数,只能通过 vi 去修改
主要的修改方式有以下三种:
一、
sp_set_para_value(参数类型,参数名,参数值);
参数类型为 1:动态参数
参数类型为 2:静态参数
二、
alter system set ‘<参数名>’=参数值 参数类型;
参数类型为both:动态参数
参数类型为spfile:静态参数
三、
Vi /console 工具,或者在tool目录下运行./console
注意:通过这种方法修改参数,无论是静态参数还是动态参数都需要重启数据库生效
Read only 类型参数只能通过这种方法修改
下面给出一些例子
例一:修改数据库兼容模式为兼容 Oracle 数据库
数据库兼容模式:COMPATIBLE_MODE
是否兼容其他数据库模式。0:不兼容,
1:兼容 SQL92 标准,
2:部分兼容 ORACLE,
3:部分兼容 MS SQL SERVER,
4:部分兼容 MYSQL,
5:兼容 DM6,
6:部分兼容 TERADATA
查看得知该参数为静态参数
修改该参数值为2
由于该参数为静态参数,还需要重启数据库实例才能生效
例二:修改数据库密码策略为禁止与用户名相同并且口令长度不小于 9
数据库密码策略:PWD_POLICY
0: 无策略;
1: 禁止与用户名相同;
2: 口令长度不小于 9;
4: 至少包含一个大写字母(A-Z);
8 :至少包含一个数字(0-9);
16:至少包含一个标点符号(英文输入法状态下,除―和空格外的所有符号;
若为其他数字,则表示配置值的和,如 3 =1+2,表示同时启用第 1 项和第 2 项策略。当 COMPATIBLE_MODE=1 时,PWD_POLICY 的实际值均为 0
查看得知该参数为动态参数
修改该参数值为3(即1+2)
动态参数不需要重启数据库实例,即改即生效
表空间管理
查看表空间
创建表空间
创建表空间TBS,数据文件存放路径/dm8/data/DAMENG,包含两个数据文件,分别为TBS01.DBF 和 TBS02.DBF,每个数据文件的初始大小为 100M,开启自动扩展,每次扩展 2M,最大可扩充到 10G.
SQL语句为:
create tablespace “TBS” datafile ‘/dm8/data/DAMENG/TBS01.DBF’ size 100 autoextend on next 2 maxsize 10240, ‘/dm8/data/DAMENG/TBS02.DBF’ size 100 autoextend on next 2 maxsize 10240 CACHE = NORMAL;
维护表空间
表空间不足时,添加数据文件
SQL语句为:
alter tablespace “TBS” add datafile ‘/dm8/data/DAMENG/TBS03.DBF’ size 32 autoextend on next 1 maxsize 1024;
RESIZE数据文件大小
SQL语句为:
alter tablespace “TBS” resize datafile ‘TBS01.DBF’ to 200;
迁移表空间数据文件
查看表空间状态
0 代表:在线,联机
1 代表:离线,脱机
修改数据文件的路径
SQL语句为:
alter tablespace “TBS” offline;
alter tablespace “TBS” rename datafile ‘TBS01.DBF’ to ‘/dm8/TBS01.DBF’;
alter tablespace “TBS” online;
修改TEMP表空间大小
将 TEMP 表空间的大小修改为 100M
需要修改参数’TEMP_SIZE’
该参数为静态参数
静态参数在重启数据库实例后修改生效
表空间删除
删除表空间TBS
SQL语句为:
drop tablespace “TBS”;
用户管理
创建TEST用户,密码为 Dameng123,默认表空间为 TEST。用户拥有创建表、创建视图的权
限。
先创建表空间TEST
然后创建用户TEST
给表TEST相应的系统权限
SQL语句如下:
create user “TEST” identified by “Dameng123” password_policy 0
default tablespace “TEST”;
grant “PUBLIC”,“SOI”,“VTI” to “TEST”;
grant CREATE TABLE,CREATE VIEW to “TEST”;
创建角色
和用户一样赋予系统权限和对象权限后,SQL语句如下:
create role “R1”;
grant “RESOURCE” to “R1”;
grant CREATE TABLE,CREATE INDEX to “R1”;
grant UPDATE(“PHONE_NUM”) on “DMHR”.“EMPLOYEE” to “R1”;
grant SELECT on “DMHR”.“DEPARTMENT” to “R1”;
grant UPDATE(“EMAIL”) on “DMHR”.“EMPLOYEE” to “R1”;
grant SELECT on “DMHR”.“EMPLOYEE” to “R1”;
回收R1角色创建索引的权限
在“系统权限”中将CREATE INDEX的勾取消即可
回收 R1 角色查看 DMHR.DEPARTMENT 表的权限;回收 R1 角色更新 DMHR.EMPLOYEE.EMAIL
表的权限。
会提示修改失败,因为达梦权限授予可以到列级别,而权限回收必须按表级回收。
修改用户密码,默认表空间
修改用户权限
删除用户
模式对象管理
模式对象:表、视图、索引、存储过程、触发器、包、序列、同义词、函数等。
表管理
新建模式
在TEST模式下创建表并使用非空约束
唯一约束
创建唯一约束,会自动创建唯一索引,唯一约束会忽视 null,null 什么都不是。
通过脚本文件将数据批量导入到数据库的表中
Start /home/dmdba/test2.sql
主键约束
主键约束=非空+唯一约束,一个表只能有 1 个主键。
外键约束
有主外键约束的表,在插入数据时,要先插入主键所在表的记录,再插入外键所在表的记录;在删除数据时,要先删除外键所在表的记录,再删除主键所在表的记录。
更新语句
update test.test3 set id=777 where name=‘bbb’;
检查约束
ID>8,NUMBER(10,3)的可插入数据范围为9-9999999.999
修改表
修改表的一系列操作都可通过图形化界面完成,如增加列、删除列、表重命名、列重命名、修改列的数据类型,且操作逻辑大同小异,不再展示
删除表
视图管理
视图就是查询语句,一个虚拟表,没有真实数据。
删除视图
索引管理
创建索引
重建索引
删除索引
备份还原
本节的物理备份还原部分均采用联机备份+脱机还原来完成
物理备份还原
联机备份需要数据库打开,需要数据库开启归档模式,DmAP 服务需要开启
manager中开启归档
设置完成后重新打开管理服务器界面,重新转换为打开状态
查看数据库的归档模式
整库备份:
如果提示“收集到的归档日志不连续”,则执行checkpoint(100);
表空间备份、表备份操作逻辑与整库备份基本一致,不再展示
联机备份过程也可以使用disql来完成
下面执行脱机还原恢复操作,同样地只展示整库还原恢复
先停止数据库实例
[dmdba@localhost tool]$ cd /dm8/bin
[dmdba@localhost bin]$ ./DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
使用dmrman校验备份集
tool目录下进入Console工具
指定搜索目录后获取备份
执行库还原
执行库恢复,并指定归档恢复
更新DB_MAGIC
注意:在更新DB_MAGIC之后,如果还想执行别的备份还原操作,必须重新开启实例进行新的联机备份,然后再次关闭实例进行新的脱机还原,不然会报db_magic不匹配的错误
上述的脱机还原过程也可以全程使用dmrman来完成,不再展示
逻辑备份还原
达梦逻辑备份还原工具:dexp/dimp
四种级别:
Full:全库级别
Owner:用户级别
Shcemas:模式级别
Tables:表
同样地只展示全库导出过程
执行跨模式的逻辑导入操作,需要用到模式映射
先执行模式导出,此处不展示
再执行跨模式的逻辑导入
注意:虽然导入的模式是TEST,但执行操作时,是用DMHR模式执行导入操作,再通过配置模式映射实现跨模式导入操作
作业管理
作业管理可以看作是一种定时任务
创建代理环境
创建 JOB1,每周日 22:00 对数据库做完全备份。
创建作业步骤
创建作业调度
新建作业 JOB2,每周一到每周六 22:00 对数据库做增量备份
创建作业步骤
创建作业调度
DM8开发
ODBC安装包放在/opt下
先执行以下语句,每一步都需要一定的时间运行,等待完成即可
[root@localhost opt]# tar -xvf unixODBC-2.3.0.tar.gz
[root@localhost opt]# cd /opt/unixODBC-2.3.0
[root@localhost unixODBC-2.3.0]# ./configure
[root@localhost unixODBC-2.3.0]# make && make install
执行完成后,接着执行下列语句,看到对应路径信息
[root@localhost 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
进入到对应的路径下
[root@localhost etc]# cd /usr/local/etc
修改odbc.ini
[root@localhost etc]# vi odbc.ini
[dm8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = aiyixun123456
TCP_PORT = 5236
修改odbcinst.ini
[root@localhost etc]# vi odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
切换到dmdba账号进行连接,看到以下界面说明安装成功