本文档用于学习交流,如有纰漏,欢迎指正。
一、达梦数据库简介
武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库管理系统的研发、销售与服务,同时可为用户提供大数据平台架构咨询、数据技术方案规划、产品部署与实施等服务。多年来,达梦公司始终坚持原始创新、独立研发,目前已掌握数据管理与数据分析领域的核心前沿技术,拥有全部源代码,具有完全自主知识产权。达梦公司是国家规划布局内重点软件企业,同时也是获得国家“双软”认证和国家自主原创产品认证的高新技术企业,拥有国内数据库研发精英团队,多次与国际数据库巨头同台竞技并夺标。
二、安装环境
2.1 安装环境
名称 | 数据库 | 操作系统 | CPU | 虚拟机 |
版本 | 达梦8 | 中标麒麟7(64位) | X86(64位) | vmware 15.5 |
2.2 检查数据库依赖包
rpm -aq|grep glibc
如果未安装依赖包则执行以下命令
yum install glibc -y
2.2 连接工具
Vnc Viewer、Xmanager 6、Xftp 6
三、开始安装
3.1 安装前准备
3.1.1 操作系统参数调优
操作系统参数将影响数据库的最优运行,需要提前进行调优:
ulimit -a检查open file 最大打开数,默认是1024
需要扩充,在root账户执行以下命令:
vi /etc/security/limits.conf(重启后生效)
* soft nofile 102400
* hard nofile 102400
3.1.2 vnc的安装
检查是否安装vncserver
如未安装则执行以下命令:
[[email protected] ~]# rpm -q vnc-server
[[email protected] ~]# yum install tigervnc-server -y
[[email protected] ~]#vncserver
关闭防火墙systemctl stop firewalld.service
3.1.3上传数据库文件
[[email protected] /]# cd /opt
[[email protected] opt]# ls
dm8_setup.iso
3.1.4 挂载ISO镜像
[[email protected] opt]# mount -o loop /opt/dm8_setup.iso /mnt
3.2安装数据库程序
3.2.1 创建数据库用户、分组信息,环境变量等配置
[[email protected] ~]# groupadd dinstall
[[email protected] ~]# useradd -g dinstall dmdba
[[email protected] ~]# passwd dmdba (设置dmdba密码)
创建数据库安装路径:
mkdir /dm8
chown -R dmdba:dinstall /dm8
配置dmdba用户环境变量
[[email protected] mnt]# su - dmdba
[[email protected] ~]$ vi .bash_profile
最底部增加:
export DM_HOME=/dm8
export PAHT=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool
3.2.2图形化安装数据库
图形化设置
开始安装
4 达梦数据库相关资料介绍
4.1 工具命令
进入工具目录 cd /dm8/tool
下面有很多日常数据库管理工具,可以方便进行数据库管理维护,下面是各功能的介绍:
./manager 数据库管理工具,可视化数据库管理
./dts数据库迁移工具,导入数据文件或将数据库迁移到达梦
./dbca.sh 数据库配置助手,用于数据库实例的可视化增删,以及数据库服务注册(开机启停数据库)
./console 控制台工具,服务器实例参数管理/备份还原/数据库许可证等
./monitor 性能监控工具,监控系统运行情况
./analyzer审计分析程序,针对审计日志文件进行分析的工具
./dmservice.sh 达梦服务器查看器,用于监控各服务启停情况
./disql 类似oracle的sqlplus 用于连接达梦数据库
4.2 达梦数据库手册
cd /dm8/doc 里面有详细的使用介绍
4.3 连接数据库
su – dmdba
进入tool目录
执行./disql
连接数据库conn sysdba/[email protected]:5236
5 数据库使用
可通过:
/dm/tool/manager 图形化来管理
5.1 表空间管理
5.1.1 查询表空间
执行./manager工具
创建表空间
5.1.2 表空间状态
一般表空间出现问题需要做恢复时,需要先脱机。
脱机状态
alter tablespace TEST offline;
在线状态
alter tablespace TEST online;
5.1.3 表空间维护
扩容表空间文件
先查看表空间有多少文件,可以图形化或者命令查看
select FILE_NAME,STATUS,TABLESPACE_NAME from dba_data_files;
扩容表空间
增加数据文件
更换存储的位置
注意:system,roll,temp 不能offline
alter tablespace TEST offline;
select tablespace_name,status from dba_tablespaces;
alter tablespace TEST rename datafile
'/dm8/data/DAMENG/TBS02.DBF' to '/dm8/tbs02.dbf';
alter tablespace TEST rename datafile
'/dm8/data/DAMENG/TBS02.DBF' to '/dm8/tbs01.dbf';
alter tablespace TEST online;
5.1.4 临时表空间
select para_name,para_value from v$dm_ini where para_name like
'TEMP%';
5.1.5 Roll表空间
Roll时回滚表空间,如果不够就需要扩充
参数undo_retention
Roll 表空间不足:
Alter tablespace roll resize datafile ‘/dm8/data/DAMENG/ROLL.DBF’
to 256;
5.1.6 删除表空间
drop tablespace test; 后续还要使用先不要删;
5.2 用户管理
5.2.1 用户体系介绍
在DM 数据库中用户管理主要涉及到三块,用户,权限,角色权限:执行特定类型sql 或是访问其他模式对象的权利系统权限:数据库对象的创建,删除,修改等等。
对象权限:对数据对象的数据的操作权限。
数据库预定义用户Sysdba
Sys:不能用于用户登录,是系统内置用户
Syssso
Sysauditor
sysdbo
三权分立(企业版)
Sysdba:数据库系统管理员
Syssso:数据安全员
Sysauditor:数据库审计员
四权分立(安全版)
Sysdba
Syssso
Sysauditor
Sysdbo :数据库对象操作员
5.2.2 用户规则
名字:字母开头,a_z,0-9,$#_
位置:对应的表空间
密码:口令策略
0:无策略
1:禁止与用户名相同
2:口令长度不小于9
4:至少包含一个大写字母
8:至少包含一个数字
16:至少包含一个标点符号(英文状态下输入除空格和“”)
口令可以单独使用,也可以组合使用。比如:要求口令策略禁止用户
名相同,并且口令长度不小于9)
则设置口令策略为1+2=3
Faild_login_attemps:密码尝试登录次数
Password_lock_time:密码失败后锁定时间
Password_life_time 密码过期时间。
策略配置地方在:
/dm8/tool/console
新建用户
5.2.2 删除用户
drop user test cascade; 级联删除,关联的schema都会被删除
drop user test;只删除用户账号
5.2.3 删除角色
drop role testrole;
5.2.4 案例1
案例1:建立用户test,用户可以创建自己的表,有属于自己的表空间,用户密码要求每60 天变更一次。
create user "TEST" identified by "dameng123"
limit password_life_time 60
default tablespace "TEST";
grant "PUBLIC","VTI" to "TEST";
grant CREATE TABLE to "TEST"
这里就使用上面那个test表空间
查看test拥有哪些权限了
select grantee,granted_role from SYS.DBA_ROLE_PRIVS where grantee='TEST';
查看public角色有哪些权限
SELECT GRANTEE,PRIVILEGE FROM SYS.DBA_SYS_PRIVS WHERE GRANTEE='PUBLIC';
5.2.5 模式对象管理
模式(scema)是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集模式对象:表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域Dm 创建用户的时候,会默认去创建一个同名的式,如果你创建的用户,模式名已存在,用户无法创建一个用户可以拥有多个模式。
5.3 表操作
5.3.1 建立表空间STU
建立表TEST
create table STU.TEST
(
"ID" CHAR(10) not null ,
"SNAME" VARCHAR(20) not null ,
"SEX" CHAR(1),
"AGE" INT,
"TEL" VARCHAR(15) not null ,
"ADDRESS" VARCHAR(50),
primary key("ID")
)
storage(initial 1, next 1, minextents 1, fillfactor 0, on "STU");
comment on table "TEST"."STU" is 'STUDENT INFO';
增加列
alter table DMHR.TEST add column(AGE INT);
删除列
alter table DMHR.TEST drop column AGE;
5.3.2 创建表指定约束
1、非空约束
SQL> create table test.t1(id int);
SQL> alter table test.t1 modify id int not null;
2、唯一约束(唯一约束遇到null,忽略,可录入多个null 值)
SQL> create table test.t3(id int, name varchar(20) unique);
SQL>insert into test.t3 values(1,'ssss');
SQL> insert into test.t3 values(2,null);
SQL> insert into test.t3 values(3,null);
SQL> insert into test.t3 values(4,null);
commit;
3、主键约束(一张表只能有一个主键约束)
SQL> create table test.t4(id int primary key, name varchar(20));
SQL> create table test.t5(id int);
SQL> alter table test.t5 add constraint t5_pri primary key(id);
4、检查约束
SQL> create table test.t6(id int check(id>=5));
5、外健约束
SQL> create table test.t8(sid int primary key ,pid int);
SQL> create table test.t9(id int primary key,sid int foreign key references
test.t8(sid));
外键一定是其他表的主键。
6、对列加备注;
SQL> comment on column test.t8.sid is '测试';
5.3.3 导入数据
create table test.t10(sid int);
制造数据
vi test.sql
insert into test.t10(sid) values(1);
insert into test.t10(sid) values(2);
insert into test.t10(sid) values(3);
insert into test.t10(sid) values(4);
insert into test.t10(sid) values(5);
insert into test.t10(sid) values(6);
连接数据库并导入
查看数据
图形化导入:
/dm8/tool/dts
完成后执行:
select * from test.t10
5.3.4 表维护
1、重命名:
SQL> alter table test.t1 rename to tt;
启用和禁用约束
SQL>select
CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS from
dba_constraints where TABLE_NAME='T3';
alter table test.t3 disable constraint CONS134218845;
alter table test.t3 enable constraint CONS134218845;
删除表:
SQL> drop table test.tt;
5.3.5 视图
视图分类:简单视图,复杂视图,物化视图
1、简单视图
创建语法:create view() as select() from() where ()
修改语法:craete or replace view() as select () from () where ()
SQL> create view test.v1 as select * from dmhr.employee;
SQL> create or replace view test.v1 as select employee_name from
dmhr.employee limit 5;
删除视图
SQL> drop view test.v1;
查询视图
DBA_VIEWS;
5.3.6 索引
索引的作用:加快表的查询,增加数据库的查询性能,对数据库做DML 操作的时候,数据库会自动维护索引,索引占空间。
达梦支持的索引:二级索引,位图索引,唯一索引,复合索引,函数索引,分区索引等。
建立索引的规则:
适合建索引的情况:
1、经常查询的列
2、连接条件列
3、谓词经常出现的列(where)
4、查询是返回表的一小部分数据。
不适合建索引的情况
1、列上有大量的null
2、列上的数据是有限的(性别)
查看表的索引
select table_name,index_name from dba_indexes where
table_name='STU';
创建索引:
规划索引表空间,表的数据无序的,索引的数据是有序的
创建索引表空间
SQL> create tablespace index1 datafile '/dm8/data/DAMENG/index1_01.dbf' size 32;
建索引
SQL> create table test.emp as select * from dmhr.employee;
SQL> create table test.dept as select * from dmhr.department;
SQL> create index ind_emp on test.emp(employee_id) tablespace index1;
查看表的执行计划
SQL> explain select * from test.emp where employee_id<20;
1 #NSET2: [0, 42, 280]
2 #PRJT2: [0, 42, 280]; exp_num(12), is_atom(FALSE)
3 #SLCT2: [0, 42, 280]; EMP.EMPLOYEE_ID < 20
4 #CSCN2: [0, 856, 280]; INDEX33555551(EMP)
没有走我们自己建的索引,统计信息是旧的,需要得新收集统计信息;
收集统计信息
SQL> begin
dbms_stats.gather_table_stats('TEST','EMP');
END;
DMSQL 过程已成功完成
SQL> explain select * from test.emp where employee_id<20;
1 #NSET2: [0, 1, 280]
2 #PRJT2: [0, 1, 280]; exp_num(12), is_atom(FALSE)
3 #BLKUP2: [0, 1, 280]; IND_EMP(EMP)
4 #SSEK2: [0, 1, 280]; scan_type(ASC), IND_EMP(EMP), scan_range(null2,20)
注意:创建索引,删除索引,重建索引和收集统计信息,不要在业务
高峰去做。在业务低谷的时候去操作。
维护索引:
重建索引:
SQL> alter index test.ind_emp rebuild;
SQL> alter index test.ind_emp rebuild online; ---慎用
删除索引:
SQL> drop index test.ind_emp;
注意:达梦默认不会自动收集统计信息,需要手动收集,可以利用作
业来定时的自动收集。
5.4 备份还原
5.5.1 介绍
数据库备份就是制作数据库的“副本”防止数据库丢失数据,在数据丢失后重建数据库.
完全备份是指一个备份包含指定数据库或表空间的所有数据
增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。
备份的方式:物理备份和逻辑备份
备份的介质:磁盘,磁带,光盘
集群:数据守护,dsc (rac)
也支持第三方的备份软件:爱数,鼎甲
5.5.2 热备管理工具方式
命令行方式下全备,增量备
全备
SQL> backup database full backupset '/dm8/backup/fullbak2';
增量备
SQL> backup database increment backupset '/dm8/backup/incr_bak';
表空间还原:
表空间只能脱机还原,使用Dmrman
模拟表空间test 损坏:
[[email protected] DAMENG]$ mv TEST01.DBF TEST01.DBF.BAK
重启实例服务,实例处于mount 状态。关闭实例服务
使用dmrman 进行还原
1、校验备份集
RMAN> check backupset '/dm8/backup/fullbak2';
2、还原表空间
RMAN> restore database '/dm8/data/DAMENG/dm.ini' tablespace test
from backupset '/dm8/backup/fullbak2';
2、恢复表空间
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace test;
重启实例服务
5.6 DM8 ODBC配置
达梦支持的语言:c c++ java python php perl .net
15.1 Linux 环境中配置ODBC(以root 配置)
检查gcc 包
[[email protected] ~]# rpm -aq|grep gcc
[[email protected] unixODBC-2.3.0]# yum install gcc -y
解压安装包
[[email protected] opt]# tar -xzvf unixODBC-2.3.0.tar.gz
配置odbc
[[email protected] unixODBC-2.3.0]# ./configure --enable-gui=no
(注意如果抱错,就是因为gcc没装)
编译安装ODBC
[[email protected] unixODBC-2.3.0]# make && make install
查看odbc 的版本
[[email protected] unixODBC-2.3.0]# odbc_config --version
2.3.0
查看ODBC 配置文件的路径
[[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
配置odbc.ini 和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