达梦8 DCA学习笔记

时间:2024-03-30 08:54:30

达梦数据库作为已商业化的国产数据库代表,在*及事业单位应用还是比较广泛。
最近有幸参加了达梦数据库的课程培训,颇有收获。
期间学习内容有:
1.数据库行业的发展历史和选型;
2.DM8数据库软件安装;
3.DM8数据库实例管理;
4.数据库管理工具的学习和使用;
5.DMSQL语言学习使用;
6.DM8体系结构学习;
7.表空间管理;
8.用户管理;
9.模式对象管理;
10.数据库的备份和还原;
11.作业创建和管理;
12.DM8的ODBC配置。
已经通过学习掌握了达梦数据库的体系结构和初步的数据库管理。
这里记录了相关的学习内容,希望能帮助到更多的小伙伴快速了解该数据库。

 

数据库行业

1、数据库行业(架构选型)

1.1 关系型数据库

商业数据库:Oracle 、MSSQL、Sybase、DB2

开源数据库:MYSQL、PG

国产数据库:达梦8  、人大金仓8 、神通混元关系型数据库(pg、mysql、infomix)、南大通用pg、华为高斯A/T、TDSQL

 

1.2 非关系型数据库

Mongodb 文档型数据库

Redis 内存数据库

TimesTen oracle 内存数据库

Memcache 内存

Hadoop 集合数据库

 

2.DM8 安装

2.1 查看软硬件信息

查看cpu 信息:

[[email protected] ~]# lscpu

[[email protected] ~]# cat /proc/cpuinfo

注意:特别是国产cpu,龙芯、飞腾查看内存信息:

[[email protected] ~]# free -m

注意:数据库内存要至少1G,linux swap 分区一般是物理内存的1.5

查看硬盘、分区信息

[[email protected] ~]# fdisk -l

[[email protected] ~]# df -h

如果数据库开启SQL 日志分析,那么/tmp 分区至少要600M

网络要求:

100M 网卡支持TCP/IP 协议

远程访问数据库需要关闭防火墙

[[email protected] ~]# systemctl status firewalld

[[email protected] ~]# systemctl stop firewalld

[[email protected] ~]# systemctl disable firewalld

支持平台:linux hpunix windows 等系统要求:

内核要在2.6 以上,glibc 2.3 UnixODBC gcc

[[email protected] ~]# uname -ra

[[email protected] yum.repos.d]# yum install gcc

 

配置yum环境

[[email protected] yum.repos.d]# more ns7-adv.repo

[ns7-adv-x64-os]

name=NeoKylin Linux Advanced Server 7 - os

baseurl=file:///mnt/

gpgcheck=0

gpgkey=file:///mnt/RPM-GPG-KEY-neokylin-release

enabled=1

 

2.2 规划路径

[[email protected] /]# mkdir -p /dm8

2.3 安装用户(建议不要使用root)

[[email protected] /]# groupadd dinstall

[[email protected] /]# useradd -g dinstall dmdba

[[email protected] /]# passwd dmdba

更改用户dmdba 的密码。

新的密码:

无效的密码: 密码少于8 个字符

重新输入新的密码:

passwd:所有的身份验证令牌已经成功更新。

[[email protected] /]# chown dmdba:dinstall /dm8 -R

[[email protected] /]# ls -ld /dm8

drwxr-xr-x. 2 dmdba dinstall 6 9 月7 11:24 /dm8

2.4 配置dmdba 用户环境变量(可选项)

环境变量生效:

[[email protected] ~]$ source .bash_profile

export DM_HOME=/dm8

PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool

export PATH

 

达梦8 DCA学习笔记

 

2.5 设置最大文件打开数

修改之后重启生效

[[email protected] /]# vi /etc/security/limits.conf

dmdba soft nofile 4906

dmdba hard nofile 65536

临时生效:ulimit -n 65536

2.6 数据库版本

开发版:有时间和并发数限制,不能作为商用

标准版:小型应用,没有集群等高级功能和特性

企业版:三权分立,大中型企业使用,具有集群等高级特性安全版:基于企业版的四权分立,安全特性进一步增强(强访问控制、

客体重用等)

2.7 数据库软件安装

GUI:

[[email protected] home]# mount -o loop /home/dm8_setup_rh7.iso /mnt

mount: /dev/loop0 写保护,将以只读方式挂载

[[email protected] ~]$ xhost +

[[email protected] mnt]$ ./DMInstall.bin

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

执行脚本(用root 账号)

/dm8/script/root/root_installer.sh

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

 

CLI:命令行的交互式安装

[[email protected] mnt]$ ./DMInstall.bin -i

安装目录的结构和内容:

bin:库文件和达梦常用的命令

bin2 :UTF8

Desktop:桌面

Drivers:驱动

jar :jar 包,存放的是逻辑备份、数据快速加载、日志挖掘

license_en.txt license_zh.txt :许可信息

log :日志

release_zh.txt release_en.txt :版本信息

script :脚本

uninstall uninstall.sh :卸载

web :dem 类似oracle oem

doc :文档

include :头文件(.h)

jdk :java

Samples :示例

tool :客户端工具

2.8 卸载数据库软件

注意:在卸载数据库之前,需要将数据库备份,然后关闭实例、删除

数据库及卸载数据库软件

[[email protected] dm8]$ ./uninstall.sh -i

 

 

3、创建数据库实例

一个数据库软件是可以安装多个实例,通过端口号来区分

GUI:

cd /dm8/tool

[[email protected] tool]$ ./dbca.sh

 

 

 

 

初始化数据库

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

 

 

 

判断数据库实例是否启动:

[[email protected] ~]$ dmservice.sh

达梦8 DCA学习笔记

 

 

查看DM进程

[[email protected] ~]$ ps -ef|grep dmserver

达梦8 DCA学习笔记

 

[[email protected] ~]$ netstat -ntl|grep 5236

达梦8 DCA学习笔记

 

[[email protected] ~]$ DmServiceDMSERVER status

达梦8 DCA学习笔记

[[email protected] ~]$ systemctl status DmServiceDMSERVER.service

 

 

手动创建实例TEST:

./dminit path=/dm8/data db_name=DB_TEST instance_name=TEST PORT_NUM=5239

达梦8 DCA学习笔记

 

创建服务:

[[email protected] ~]$ cd /dm8/script/root/

[[email protected] ~]$ dm_service_installer.sh -h

[[email protected] ~]# ./dm_service_installer.sh -t dmserver -p TEST -dm_ini /dm8/data/DB_TEST/dm.ini

达梦8 DCA学习笔记

 

4、DM8 数据库实例管理

4.1 数据库的状态

Shutdown:关闭状态

Mount:配置状态

Open:数据库打开状态,数据库对外提供服务

Suspend:挂起状态

 

4.2 数据库状态的切换

Shutdown -mount

Shutdown -open

Open-shutdown

Mount-open

Open-mount(oracle 不支持)

Open-suspend

Suspend-open

Dm 数据库不支持mount-suspend 状态,suspend-mount 状态

 

4.3 数据库启动过程

Shutdown-mount

根据配置文件dm.ini 分配共享内存,启动后台进程/线程,找到控制

文件的位置,验证控制文件是否损坏,最后打开控制文件。

Mount-open

根据控制文件找到数据库的数据文件和重做日志文件,分析数据库是

否需要做恢复。

4.4 数据库启动和关闭

通过进程的形式启停数据库

[[email protected] bin]$ ./DmServiceDMSERVER stop

[[email protected] bin]$ ./DmServiceDMSERVER start

 

在前端启停数据库

[[email protected] bin]$ ./dmserver /dm8/data/DAMENG/dm.ini

关闭数据库:exit

用服务查看器启停数据库(root 账号执行)

 

5、数据库工具

5.1 disql

/dm8/bin

类似于oracle 的Sqlplus / as sysdba

[[email protected] bin]$ ./disql SYSDBA/SYSDBA:5239

[[email protected] bin]$ cd /dm8/tool/

类似于oracle 的Sqlplus /nolog

[[email protected] tool]$ ./disql

disql V8

SQL> conn SYSDBA/SYSDBA:5239

 

 

5.2 管理工具manager

./manager

 

5.3 性能监控工具monitor

./monitor

 

5.4 迁移工具dts

./dits

 

5.5 console 工具

./console

查看和调整参数

6、DMSQL

SQL?结构化查询语言,提供了应用程序到数据库的一个接口。

6.1 DMSQL 分类

DML(数据操作语言):insert update delete select

DDL(数据定义语言):create table,drop table,alter table ,truncate

DCL(数据控制语言):权限的授予或撤回,grant,revoke

TCL(事务控制语言):commit, rollback ,save moint

6.2 SQL 语句规范

SQL 不区分大小写,除了’’ “”除外

关键字是不能被拆分,不能缩写

可以换行,可以缩进,提高阅读性

6.3 简单查询

语法:

Select () from ();

单列查询

select employee_id from dmhr.employee;

查询多列

select * from dmhr.employee;

表达式:

select employee_id,employee_name,salary,salary+500 from

dmhr.employee;

起别名:(方便识别,计算)

select employee_id,employee_name,salary,salary+500 tol from

dmhr.employee;

去重复:(隐含排序升序)

select distinct department_id from dmhr.department;

连接||

“xxx 的工资是:xxx”

select employee_name || '的工资是:' || salary from dmhr.employee;

6.4 过滤查询

语法:

Select () from () where ()

比较运算符、逻辑运算符、in、between*** and、is null/is not null、like

比较运算符:> >= < <= <> != =

select employee_name,salary from dmhr.employee where

salary>=30000;

逻辑运算符:and or not

And 同时满足:

select employee_name,department_id,salary from dmhr.employee

where department_id=101 and salary>15000;

 

or 满足一个条件即可:

select employee_name,department_id,salary from dmhr.employee

where department_id=101 or salary>15000;

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;

IN

select employee_name,department_id from dmhr.employee

where department_id in (101,104);

Between*** and

select employee_name,department_id,salary from dmhr.employee

where salary between 20000 and 30000;

模糊查询: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 '李_';

6.5 排序

升序asc

select employee_name,salary from dmhr.employee

order by salary asc;

降序desc

select employee_name,salary from dmhr.employee

order by 2 desc;

6.6 分组函数

Count max min avg sum

语法:

Select () from () group by () having ();

除了聚合函数不用跟在group by 后面,其他select 列必须在group by

后面,having 是对group by 进一步过滤,having 不能单独使用。

求部门工资和小于8 万的部门

select department_id,sum(salary) from dmhr.employee

group by department_id

having sum(salary) <80000;

6.7 多表连接

内连接

结果集只显示满足条件的记录

交叉连接(迪卡集)

两个表记录数的乘积

select count(*) from dmhr.employee cross join

dmhr.department;--39376

select count(*) from dmhr.employee;

select count(*) from dmhr.department;

自然连接

根据列名自己过滤,两个表连接的列名和数据类型要一致

select employee_name,department_name from dmhr.employee natural

join dmhr.department;

USING

在满足多个连接列时,可以指定某一个列做连接,一般是和NATURAL

JOIN 使用,连接的列前面不能加表名或者是前缀。

select employee_name,department_name from dmhr.employee join

dmhr.department

using (department_id);

ON 子句

select c.city_name,l.street_address from dmhr.city c join dmhr.location

l on c.city_id=l.city_id;

HASH JOIN

优化器CBO 根据小表连接列做运算生成hash 值,根据hash 值去连接

大表,扫描大表

select e.employee_name,d.department_name from dmhr.employee e

inner hash join dmhr.department d

on e.department_id=d.department_id;

外连接

结果集除了显示满足条件的记录,不满足的用null 代替

左外连接

把left join 左边的全部显示出来,右边只显示满足条件的,不满足条

件的用null 补齐

select a.employee_name,b.department_name from dmhr.employee a

left join dmhr.department b

on a.department_id=b.department_id;

右外连接

把right join 右边的全部显示出来,左边只显示满足条件的,不满足

条件的用null 补齐

select a.employee_name,b.department_name from dmhr.employee a

right join dmhr.department b

on a.department_id=b.department_id;

全外连接

左外连接+右外连接

select a.employee_name,b.department_name from dmhr.employee a

full join dmhr.department b on a.department_id=b.department_id;

6.8 子查询

当一个查询是另一个查询条件时,就叫子查询。子查询先运行,子查

询的结果是外部查询(主查询)的条件

单行子查询

= > >= < <= <>

找出和金纬在一个部门的员工

select employee_name,department_id from dmhr.employee where

department_id=

(select department_id from dmhr.employee where employee_name='金

纬')

多行子查询

In any all

查询比104 部门工资都高的人

select department_id,employee_name,salary from dmhr.employee

where salary > all

(select salary from dmhr.employee where department_id=104);

Exists

一旦有记录满足条件,就立马返回值

SELECT E.EMPLOYEE_ID , E.EMPLOYEE_NAME FROM DMHR.EMPLOYEE

E

WHERE EXISTS

( SELECT * FROM DMHR.JOB_HISTORY J

WHERE E.EMPLOYEE_ID = J.EMPLOYEE_ID );

7、DM8 体系结构

DMSERVER:C/S 架构,客户端+服务器构成

DMSERVER=数据库文件+实例

实例=共享内存+后台进程/线程

非DSC 架构是一个实例对应一个数据库,DSC 架构是一个数据库可以

对应多个实例

7.1 DM8存储结构

物理结构

达梦8 DCA学习笔记

 

配置文件

以.ini 结尾的文件

[[email protected] DAMENG]$ ls -l *.ini

-rw-r--r-- 1 dmdba dinstall   907 9月  11 19:35 dmarch_example.ini

-rw-r--r-- 1 dmdba dinstall  2147 9月  11 19:35 dmdcr_cfg_example.ini

-rw-r--r-- 1 dmdba dinstall   631 9月  11 19:35 dmdcr_example.ini

-rw-r--r-- 1 dmdba dinstall 49009 9月  11 19:35 dm.ini

-rw-r--r-- 1 dmdba dinstall  1537 9月  11 19:35 dminit_example.ini

-rw-r--r-- 1 dmdba dinstall  2070 9月  11 19:35 dmmal_example.ini

-rw-r--r-- 1 dmdba dinstall  1277 9月  11 19:35 dmmonitor_example.ini

-rw-r--r-- 1 dmdba dinstall   288 9月  11 19:35 dmmpp_example.ini

-rw-r--r-- 1 dmdba dinstall  1679 9月  11 19:35 dmtimer_example.ini

-rw-r--r-- 1 dmdba dinstall  2146 9月  11 19:35 dmwatcher_example.ini

-rw-r--r-- 1 dmdba dinstall   635 9月  11 19:35 sqllog_example.ini

-rw-r--r-- 1 dmdba dinstall   479 9月  11 19:35 sqllog.ini

 

查询视图:

select para_name,para_value from v$dm_ini where para_name like

'COMPAT%';

SYS 系统级:影响全局

Session 会话级:针对当前会话有效

Infile:静态参数,实例重启才能生效

sp_set_para_value(2,'COMPATIBLE_MODE',2);

1 等于both,会改变内存和参数文件中的值。

2 等于infile,会改变参数文件中的值,重启才能生效。

数据文件

以.DBF 结尾的文件

[[email protected] DAMENG]$ ls -l *DBF

-rw-r--r-- 1 dmdba dinstall 157286400 9月  11 19:37 BOOKSHOP.DBF

-rw-r--r-- 1 dmdba dinstall 134217728 9月  11 19:37 DMHR.DBF

-rw-r--r-- 1 dmdba dinstall 134217728 9月  11 19:35 MAIN.DBF

-rw-r--r-- 1 dmdba dinstall 134217728 9月  11 19:41 ROLL.DBF

-rw-r--r-- 1 dmdba dinstall  24117248 9月  11 19:41 SYSTEM.DBF

-rw-r--r-- 1 dmdba dinstall  10485760 9月  11 19:36 TEMP.DBF

 

控制文件

以.ctl 结尾的文件

select para_name,para_value from v$dm_ini where para_name like

'%PATH%';

查看控制文件内容:

[[email protected] bin]$ ./dmctlcvt TYPE=1

SRC=/dm8/data/DAMENG/dm.ctl DEST=/tmp/dmctl.txt

注意:不要随便修改控制文件

重做日志文件

查询重做日志文件:

select file_id,path,rlog_size from v$rlogfile;

重做日志文件记录的是数据库发生变更信息。重做日志文件的特点是

可覆盖,循环写。重做日志文件频繁切换会对数据库产生较大的性能

影响。

resize 重做日志文件

alter database resize logfile '/dm8/data/DAMENG/DAMENG01.log' TO

300;

alter database resize logfile '/dm8/data/DAMENG/DAMENG02.log' TO

300;

新增重做日志文件:

alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size

300;

注意:重做日志文件不能被删除,所有日志文件大小需要一致。

归档日志文件

就是重做日志文件的副本,用来做数据库恢复。

开启归档:

命令行开归档

[[email protected] DAMENG]$ disql sysdba/dameng123

 

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间: 14.156(毫秒)

disql V8

SQL> alter database mount;

操作已执行

已用时间: 00:00:01.783. 执行号:0.

SQL>alter database add archivelog 'type=local,dest=/dm8/arch,file_size=100,space_limit=0';

操作已执行

已用时间: 12.152(毫秒). 执行号:0.

SQL> alter database archivelog;

操作已执行

已用时间: 5.841(毫秒). 执行号:0.

SQL> alter database open;

操作已执行

已用时间: 00:00:01.866. 执行号:0.

SQL> select name,arch_mode from v$database;

 

行号     NAME   ARCH_MODE

---------- ------ ---------

1          DAMENG Y

 

已用时间: 8.372(毫秒). 执行号:1803.

 

图形化开归档

达梦8 DCA学习笔记

 

备份文件

以.bak 为扩展名的文件,备份文件就是数据库在某一个时间点的副

本。.meta 元数据文件(备份集的信息),.bak 数据备份文件(真实的数据)

跟踪日志文件

跟踪日志文件记录的是系统各会话执行的sql 语句的信息,主要是错

误的信息、性能问题。跟踪日志文件默认是关闭的。SVR_LOG

select para_name,para_value from v$dm_ini where para_name='SVR_LOG';

 

事件日志文件

记录的是数据库运行期间产生的关键性事件:数据库的启动、关闭、

IO 错误、内存申请失败。

逻辑结构

页(块):默认为8k(8192 字节),支持4k、8k、16k、32k。数据

页是数据库最小的分配单元。包含了页头信息,数据,空闲空间,行

偏移数组。Filefactor

簇:簇是一组连续的数据页组成,默认为16 个页,支持16、32 个页,

总是在一个数据文件中。

段:是簇的上级逻辑单元,段是可以跨多个数据文件的。段分为数据

段(表段、索引段),临时段,回滚段。

select * from user_segments;

表空间:可以拥有一个或多个数据文件,一个数据文件只能属于一个

表空间。

 

7.2 内存结构

--共享内存池是DM SERVER 启动时从操作系统申请的一大片内存,实

例在运行中可以在共享内存池中进行申请或释放。

select para_name,para_value from v$dm_ini where para_name like '%MEMORY%';

达梦8 DCA学习笔记

MEMORY_TARGET 为0 表示不限制内存使用

MEMORY_POOL:公共池,减少系统调用

MAX_OS_MEMORY:可以使用物理内存的百分比

--运行时内存池给某个模块单独使用,例如会话内存吃和虚拟机内存

池。

--数据缓冲区

缓存数据页,使用数据缓冲区可以提供数据库的性能。

参数:buffer

select para_name,para_value from v$dm_ini where para_name like '%BUFFER%';

达梦8 DCA学习笔记

参考值:oltp 物理内存的40%-60%

Olap 物理内存的60%-80%

数据缓冲区有4 种类型:

Normal keep:可以手动调整,normal 是默,keep 缓存的是表空间。

(Oracle keep 缓存的是表)

fast recycle:系统自动管理。Recycle 缓存临时数据。

读多页:全表扫描比较多,可以考虑调整该参数。

重做日志缓冲区

存放日志的缓冲区,单位页,避免直接对磁盘IO 进行读写,提高了

数据库的性能。

select para_name,para_value,para_type from v$dm_ini

where para_name like '%RLOG_%';

重做日志刷盘的机制:每3 秒,事务提交。

SQL 缓冲区

用来存放包、执行计划、sql 结果集。对于sql 类别比较多,包、存储

过程比较多,应该适当调整sql 缓冲区。

select para_name,para_value from v$dm_ini where para_name like '%CACHE_POOL%';

达梦8 DCA学习笔记

 

是否开启sql 重用计划:

select para_name,para_value from v$dm_ini where para_name like '%USE_PLN%';

达梦8 DCA学习笔记

字典缓冲区

字典缓冲区主要存的是数据字典的信息,包含表的信息,列的信息。

当我们数据库中存在大量分区表、大量表时应该适当调整字典缓冲

区。

select para_name,para_value from v$dm_ini where para_name like '%DIC%';

达梦8 DCA学习笔记

 

HASH 缓冲区

主要是表在HASH 连接时会用到,虚拟的内存池,只有在做HASH 连

接使,才会生成、分配空间。

select para_name,para_value from v$dm_ini where para_name like '%HJ_BUF%';

 

 

达梦8 DCA学习笔记

 

SSD 缓冲区

默认SSD 缓冲区是关闭的,即SSD_BUF_SIZE 为0。若要配置SSD

缓冲区,将其设置为大于0 的数并指定SSD_FILE_PATH 即可

7.3 线程结构

监听线程

检测来自客户端的连接请求,并把任务交给工作线程。

IO 线程

将数据页从磁盘读入数据缓冲区中,将数据缓冲区中的脏页在一定机

制(执行检查点,数据库关闭,buffer 满)下更新到磁盘中。

日志刷新线程

将重做日志缓冲区中的记录在一定机制下刷到重做日志文件中。

日志归档线程

将重做日志文件在切换时拷贝到归档路径下做副本。分为本地归档、

同步归档、异步归档。

日志重做线程

主要用于数据库的故障恢复。

调度线程

检查系统级的时间触发器;

清理SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不

常用的缓存项;

动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;

自动执行检查点;

会话超时检测;

必要时执行数据更新页刷盘;

唤醒等待的工作线程;

SQL 执行过程

A 客户端发起连接请求(监听线程、工作线程)

B 语法分析(字典缓冲区、SQL 缓冲区)

C 语义分析(字典缓冲区)

D 权限分析(字典缓冲区)

E 查看数据页是否在内存中,不在内存就会产生物理读,在内存中就

会产生逻辑读(数据缓冲区、sql 缓冲区、IO 线程)

F 数据发生变更(日志刷新线程、日志缓冲区、数据缓冲区、IO 线程)

G 是否有可用的执行计划,如果有就按执行计划执行sql,如果没有

生成执行计划,运行sql,结果集返回客户端。(字典缓冲区、排序

区、hash 区,工作线程,SQL 缓冲区)。

 

8、表空间

8.1 查看表空间

SQL> select tablespace_name,file_name from dba_data_files;

 

行号     TABLESPACE_NAME FILE_NAME                   

---------- --------------- -----------------------------

1          SYSTEM          /dm8/data/DAMENG/SYSTEM.DBF

2          DMHR            /dm8/data/DAMENG/DMHR.DBF

3          BOOKSHOP        /dm8/data/DAMENG/BOOKSHOP.DBF

4          MAIN            /dm8/data/DAMENG/MAIN.DBF

5          TEMP            /dm8/data/DAMENG/TEMP.DBF

6          ROLL            /dm8/data/DAMENG/ROLL.DBF

介绍达梦数据库表空间:

System:数据字典相关信息、动态性能视图

ROLL:数据库运行中的回滚记录

TEMP:临时表空间,排序

MAIN:数据库的默认表空间,存放的是用户的真实数据。创建用户

或者创建数据库对象时,没有指定表空间,就会存放在默认表空间

(main)中。

HMAIN:HUGE 表空间

查询表空间和数据文件:

SQL> select tablespace_name,file_name from dba_data_files;

 

8.2 创建表空间

案例1:创建一个初始值为30M 表空间。

SQL> create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' SIZE 30;

create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' SIZE 30;

第1 行附近出现错误[-2410]:数据文件[/dm8/data/DAMENG/TEST01.DBF]大小无效.

已用时间: 0.962(毫秒). 执行号:0.

表空间数据文件初始大小是4906*页(8192=32M

 

案列2:创建表空间TBS,初始大小为50M,每次扩展2M,最大扩展

到1024M;

create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 50 autoextend on next 2 maxsize 1024 CACHE = NORMAL;

 

案例3:创建表空间TBSA,包含两个数据文件,初始大小为35M,

每次扩展1M,最大可扩展到1024M;

create tablespace "TBSA" datafile '/dm8/data/DAMENG/TBSA01.DBF' size 35 autoextend on next 1 maxsize 1024, '/dm8/data/DAMENG/TBSA02.DBF' size 35 autoextend on next 1 maxsize 1024 CACHE = NORMAL;

 

 

8.3 表空间状态

脱机状态

Alter tablespace tbs offline;

联机状态

Alter tablespace tbs online;

 

8.4 维护表空间

8.4.1 表空间不足

增加数据文件

alter tablespace "TBS" add datafile '/dm8/data/DAMENG/TBS02.DBF'

size 32;

数据文件开启自动扩展

alter tablespace "TBS" datafile 'TBS02.DBF' autoextend on next 1 maxsize 1024;

resize 数据文件

alter tablespace "TBS" resize datafile 'TBS02.DBF' to 100;

8.4.2 更换数据文件路径

表空间脱机

Alter tablespace tbs offline;

修改数据文件路径

SQL> alter tablespace tbs rename datafile

'/dm8/data/DAMENG/TBS01.DBF' to '/dm8/TBS01.DBF';

表空间联机

SQL> alter tablespace tbs online;

 

8.5 回滚表空间

alter tablespace "ROLL" add datafile '/dm8/data/DAMENG/ROLL02.DBF'

size 32;

alter tablespace "ROLL" resize datafile 'ROLL02.DBF' to 128;

 

8.6 临时表空间

SQL> select para_name,para_value from v$dm_ini where para_name like '%TEMP%';

 

行号     PARA_NAME        PARA_VALUE      

---------- ---------------- ----------------

1          TEMP_PATH        /dm8/data/DAMENG

2          TEMP_SIZE        10

3          TEMP_SPACE_LIMIT 0

systemtemproll 表空间不允许脱机

 

8.7 删除表空间

Drop tablespace tbs;

 

9、用户管理

用户管理分为三块:用户、权限、角色

9.1 用户

9.1.1 查看用户

SQL> select username,account_status from dba_users;

 

行号     USERNAME   ACCOUNT_STATUS

---------- ---------- --------------

1          SYSSSO      OPEN

2          DMHR       OPEN

3          SYSDBA     OPEN

4          SYS         OPEN

5          SYSAUDITOR OPEN

 

 

企业版的用户

数据库预定义的用户:

Sysdba :管理员

Sys:不能登录,数据字典、视图

Sysauditor:审计员

Syssso:安全员

安全版用户:

在企业版基础上,增加sysdbo,数据库对象操作员。

9.1.2 规划用户

命名:字母开头,a-z,0-9,$#_

长度为128 个字符

权限分配:系统权限、对象权限、角色

存储位置:表空间

密码策略: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 7=4+2+1

通过console 工具来更改参数

通过函数sp_set_para_value()

sp_set_para_value(1,'PWD_POLICY',3)

COMPATIBLE_MODE 是否兼容其他数据库模式。0:不兼容,1:兼容SQL92

标准,2:兼容ORACLE,3:兼容MS SQL SERVER,4:兼容MYSQL

兼容ORACLE 模式sp_set_para_value(2,'COMPATIBLE_MODE',2)

9.1.3 创建用户

案例:创建test 用户,test 用户属于test 表空间,test 用户拥有创建

表、视图的权限。

1)创建test 表空间

create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST01.DBF' size 32 autoextend on next 1 maxsize 500 CACHE = NORMAL;

2)创建用户

 

 

3)授权

grant CREATE TABLE to "TEST";

grant CREATE VIEW to "TEST";

查看被授予的角色和权限

select grantee,granted_role from sys.dba_role_privs

where grantee='TEST';

select * from sys.dba_sys_privs

where grantee='TEST';

9.1.4 对用户的操作

更改用户的默认表空间

alter user "TEST" default tablespace "MAIN";

更改密码:

Alter user test identified by dameng456;

sysdba 用户的密码忘记之后,无法用sysdba 用户登录数据库。

查看用户的状态

select username,account_status from dba_users;

锁定test 用户

alter user test account lock;

解锁test 用户

alter user test account unlock;

撤回权限

revoke create table from test;

删除用户:

Drop user test;

 

9.2 角色

一组权限的集合,方便权限管理

角色是可以被授予给角色和用户

create role "R1";

grant UPDATE("MANAGER_ID") on "DMHR"."DEPARTMENT" to "R1";

grant UPDATE("IDENTITY_CARD") on "DMHR"."EMPLOYEE" to "R1" with

grant option;

grant INSERT("EMPLOYEE_ID") on "DMHR"."EMPLOYEE" to "R1";

grant

INSERT("DEPARTMENT_ID"),UPDATE("DEPARTMENT_ID"),REFERENCES("

DEPARTMENT_ID") on "DMHR"."DEPARTMENT" to "R1";

 

10、模式对象管理

什么是模式?

模式就是一组数据对象的集合

模式对象:表、视图、索引、触发器、包、序列、存储过程、同义词

模式与用户的关系:

创建用户会自动创建一个与用户名同名的模式,一个用户可以对应多

个模式。

10.1 表

用户表:自己创建的表,存放的是真实的用户数据

系统表:数据库自己创建的表,里面存放数据库关键性的信息

DM 支持表的类型:

索引组织表、堆表、外部表、分区表

DM 默认表的类型是索引组织表,ORACLE 默认表的类型是堆表

规划表:

1)命名:以字母开头,a-z,0-9,$#_

2)数据类型:int,number,date,char,varchar,clob,blob

3)存储位置:表空间,没有指定表空间,就存放在用户默认表空间

中。

4)约束类型:主键约束、外键约束、非空约束、唯一约束、检查约

束。

非空约束:

create table test1(id char(10) not null);

insert into test1 values (null);

 

达梦8 DCA学习笔记

 

 

 

 

 

 

 

 

DM 数据库执行sql 脚本:

vi /home/dmdba/test1.sql

insert into test1 values (1);

insert into test1 values (2);

insert into test1 values (3);

commit;

SQL> start /home/dmdba/test1.sql

达梦8 DCA学习笔记

 

 

唯一约束:创建唯一约束,会创建一个唯一索引,会忽视空值,NULL 不等于0

SQL> create table test2(id int unique,name varchar(25));

SQL> insert into test2 values(1,'1111');

SQL> insert into test2 values(null,'1111');

SQL> insert into test2 values(null,'1111');

SQL> insert into test2 values(1,'1111');

insert into test2 values(1,'1111');

[-6602]:违反表[TEST2]唯一性约束.

已用时间: 00:00:02.341. 执行号:0.

SQL> commit;

主键约束:非空+唯一,一个表只能有一个主键,设计主键尽量的避

开业务逻辑的列

SQL> create table test3(id int primary key);

外键约束:

SQL> create table test4 (id int foreign key references test3(id));

SQL> drop table test3;

drop table test3;

第1 行附近出现错误[-2639]:试图删除被依赖对象[TEST3].

SQL> drop table test4;

已用时间: 127.084(毫秒). 执行号:781.

SQL> drop table test3;

检查约束

SQL> create table test5(id int check(id>=5));

操作已执行

已用时间: 58.001(毫秒). 执行号:783.

SQL> insert into test5 values(1);

insert into test5 values(1);

[-6604]:违反CHECK 约束[CONS134218846].

SQL> insert into test5 values(5);

SQL> commit;

管理表:

重命名表:

Alter table test1 rename to test6;

增加列:

alter table "TEST1"."TEST6" add column("NAME" VARCHAR(30));

删除列:

Alter table test6 drop column name;

查看约束:

select constraint_name,table_name,status from user_constraints;

启用约束

alter table test2 enable constraint CONS134218843 ;

禁用约束

alter table test2 disable constraint CONS134218843 ;

删除表:

Drop table test5;

作业:

创建表test,

所属表空间为test,表的信息如下:

Id int 主键,Name varchar(30) not null,

Address varchar(60),

Phone_number number (20)

 

 

 

更新:update (表名) set 列名=() where ();

删除:delete from () where ();

 

10.2 视图

视图:就是一张虚拟表,一个查询语句。

DM 视图:简单视图、复制视图、物化视图

创建视图语法: create or replace view () as ***接查询语句

Create view () as

创建简单的视图:

create view test1.emp_v as

select employee_id,employee_name,salary,department_id from

dmhr.employee where department_id=1005;

查询视图:

通过manager 工具

也可以查看视图all_views

删除视图:

Drop view emp_v;

10.2 索引

索引作用:加快查询,少量的数据更新,延迟插入,数据库会自动维护索引,索引会占用存储空间。

达梦支持的索引:btree 索引,位图索引,函数索引

创建索引的基本要求:

经常查询的列

Where 条件中出现的列

连接列

返回少量或部分的数据

不适合建立索引:

1、返回大量的数据

2、列上有大量的重复数据

3、列上有大量的null

创建索引

CREATE INDEX "ind_employee_name" ON

"TEST1"."TEST_EMP"("EMPLOYEE_NAME" ASC) STORAGE(ON "TEST",

CLUSTERBTR) ;

查看索引信息:

select * from user_indexes;

查看sql 执行计划

SQL> explain select * from test_emp where employee_name='aaa';

 

更新统计信息

begin

dbms_stats.gather_table_stats(‘TEST1’,’TEST_EMP’);

end;

/

 

维护索引:

重建索引:提升数据库的性能

Alter index ind_employee_name rebuild;

删除索引

drop index "TEST1"."ind_employee_name";

注意:不要在业务期间,执行创建、删除、重建索引,搜集统计信息。

达梦不会自动搜集统计信息,可以配置定时作业搜集。

 

11、备份还原

备份就是数据库在某个一个时间点的副本

数据库备份的目的:

为了防止天灾人祸(地震、火灾、人为误操作,硬件故障等)

备份主要有:物理备份和逻辑备份

物理备份主要备份的是使用有效的数据页,逻辑备份主要是备份的数

据库对象。

物理备份:分为联机备份和脱机备份;完全备份和增量备份。

完全备份:备份指定的数据库或者表空间的全部数据。

增量备份:是指在一次全备或增备后,以后每次的备份只需要备份与

前一次相比增加或者被修改的数据页。

备份的介质:磁盘、磁带

 

11.1 物理备份

冷备:不需要开启归档,针对整库做备份

需要开启dmap 服务,需要关闭数据库

[[email protected] bin]$ ./DmAPService status

DmAPService (pid 14437) is running.

  1. console 工具备份

DmServiceDMSERVER stop

/dm8/data/DAMENG/dm.ini

/dm8/data/DAMENG/backup

达梦8 DCA学习笔记

 

2、用dmrman 工具备份只支持冷备

cd /dm8/bin

./dmrman

RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset

'/dm8/backup';

检查备份集

RMAN> check backupset '/dm8/backup';

热备:

需要开启归档,数据库需要联机

可以备份数据库、表空间、表、归档日志文件

查看数据库归档模式:

SQL> select arch_mode from v$database;

利用manager 工具做热备

整库备份

达梦8 DCA学习笔记

 

增量备份:

达梦8 DCA学习笔记

 

 

Disql 工具:

整库备份:

backup database full to "full02" backupset '/dm8/backup/rb';

增量备份:

backup database increment base on backupset '/dm8/backup/rb' to

"DB_DAMENG_INCRE_2020_09_09_15_43_36" backupset

'DB_DAMENG_INCRE_2020_09_09_15_43_36';

管理工具中没有发现备份:

手动指定工作目录

达梦8 DCA学习笔记

 

 

表空间备份:

达梦8 DCA学习笔记

 

backup tablespace "DMHR" full to

"TS_DMHR_FULL_2020_09_09_15_47_26" backupset

'TS_DMHR_FULL_2020_09_09_15_47_26';

表备份:

backup table "DMHR"."EMPLOYEE" to

"TAB_DMHR_EMPLOYEE_2020_09_09_15_50_23" backupset

'TAB_DMHR_EMPLOYEE_2020_09_09_15_50_23';

归档日志备份:

backup archivelog all to "ARCH_2020_09_09_15_51_32" backupset

'ARCH_2020_09_09_15_51_32';

 

11.2 物理还原:

检查备份集

整库还原:

restore database '/dm8/data/DAMENG/dm.ini' from backupset

'/dm8/backup';

recover database '/dm8/data/DAMENG/dm.ini' with archivedir

'/dm8/arch';

recover database '/dm8/data/DAMENG/dm.ini' update db_magic;

表空间还原

表空间只能在联机模式下进行备份,脱机模式进行还原

restore database '/dm8/data/DAMENG/dm.ini' tablespace DMHR from

backupset '/dm8/backup';

recover database '/dm8/data/DAMENG/dm.ini' tablespace DMHR;

 

11.3 逻辑备份

Dexp/dimp

库级别

用户

模式

/dm8/bin

./dexp help

逻辑导出:

全库导出:

[[email protected] bin]$ ./dexp sysdba/dameng123 file=full.dmp log=full.log directory=/dm8/backup full=y

[[email protected] bin]$ ./dimp sysdba/dameng123 file=full.dmp log=full_imp.log directory=/dm8/backup full=y

用户导出:

[[email protected] bin]$ ./dexp sysdba/dameng123 file=test1.dmp log=test1.log directory=/dm8/backup owner=test1

导出表:

[[email protected] bin]$ ./dexp test1/dameng123 file=test_emp.dmp directory=/dm8/backup tables=test_emp

 

12、作业

新建作业1,每周三,每周日22:00 做全备

1.manager中创建代理环境

达梦8 DCA学习笔记

 

2.新建作业

达梦8 DCA学习笔记

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

达梦8 DCA学习笔记

达梦8 DCA学习笔记

达梦8 DCA学习笔记

 

 

ddl语句:

call SP_CREATE_JOB('job1',1,0,'',0,0,'',0,'');

 

call SP_JOB_CONFIG_START('job1');

 

call SP_ADD_JOB_STEP('job1', 'b1', 5, '01000/dm8/bak', 1, 2, 0, 0, NULL, 0);

 

call SP_ADD_JOB_SCHEDULE('job1', 'h1', 1, 2, 1, 8, 0, '22:00:00', NULL, '2020-09-14 06:21:42', NULL, '');

 

call SP_JOB_CONFIG_COMMIT('job1');

 

 

 

 

新建作业2,每周一、二、四、五、六22:00 做增备

达梦8 DCA学习笔记

达梦8 DCA学习笔记

 

达梦8 DCA学习笔记

 

ddl语句:

call SP_CREATE_JOB('job2',1,0,'',0,0,'',0,'');

 

call SP_JOB_CONFIG_START('job2');

 

call SP_ADD_JOB_STEP('job2', 'b2', 5, '11000/dm8/backup|/dm8/backup', 1, 2, 0, 0, NULL, 0);

 

call SP_ADD_JOB_SCHEDULE('job2', 'h2', 1, 2, 1, 118, 0, '22:00:00', NULL, '2020-09-14 06:26:17', NULL, '');

 

call SP_JOB_CONFIG_COMMIT('job2');

 

13、DM8 开发

Linux 环境配置odbc

用root 配置

[[email protected] home]# tar -xvf unixODBC-2.3.0.tar.gz

[[email protected] home]# cd unixODBC-2.3.0/

[[email protected] unixODBC-2.3.0]# ./configure

[[email protected] unixODBC-2.3.0]# make

[[email protected] unixODBC-2.3.0]# make install

[[email protected] unixODBC-2.3.0]# odbcinst -j

达梦8 DCA学习笔记

 

配置/usr/local/etc/odbc.ini   /usr/local/etc/odbcinst.ini

vi /usr/local/etc/odbc.ini

[dm8]

Description = DM ODBC DSND

Driver = DM8 ODBC DRIVER

SERVER = localhost

UID = SYSDBA

PWD = dameng123

TCP_PORT = 5236

 

vi /usr/local/etc/odbcinst.ini

[DM8 ODBC DRIVER]

Description = ODBC DRIVER FOR DM8

DRIVER = /dm8/bin/libdodbc.so

修改文件权限:

chmod 775 /usr/local/etc/odbc.ini

chmod 775 /usr/local/etc/odbcinst.ini

 

测试连接

用dmdba 账户

isql dm8

达梦8 DCA学习笔记