因公司业务上需求需要接触达梦数据库,同时也不断开阔视野扩展知识层面,记录下学习过程,以便日后复盘加深印象。
武汉达梦数据库有限公司成立于2000年,为国有控股的基础软件企业,专业从事数据库管理系统研发、销售和服务。其前身是华中科技大学数据库与多媒体研究所,是国内最早从事数据库管理系统研发的科研机构。达梦数据库为中国数据库标准委员会组长单位,得到了国家各级政府的强力支持。
达梦数据库:DM8
虚拟机环境:RedHat7-64位(CentOS7或中标麒麟同样适用)
[root@localhost ~]# uname -ra
Linux localhost.localdomain 3.10.0-693.el7.x86_64
#1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
根据不同的操作系统选择相对应的CPU和安装包
[root@localhost ~]# rpm -aq | grep glibc
glibc-common-2.17-307.el7.1.x86_64
glibc-2.17-307.el7.1.x86_64
glibc-devel-2.17-307.el7.1.x86_64
glibc-headers-2.17-307.el7.1.x86_64
compat-glibc-headers-2.12-4.el7.x86_64
compat-glibc-2.12-4.el7.x86_64
如果系统没有,则可运行下列语句进行安装依赖包
[root@localhost ~]# yum install glibc -y
[root@localhost ~]# cat /proc/cpuinfo
注意进行区分芯片,达梦数据库根据芯片版本有着与之对应安装包,不匹配则安装不成功。
国产芯片:华为、龙芯、兆芯、安腾、飞腾(自行了解相关知识,开阔视野)
[root@localhost ~]# free -m
安装数据库建议最小内存为1G
Linux服务器Swap分区为物理内存1.5倍以上
[root@localhost ~]# fdisk -l
[root@localhost ~]# df -h
安装达梦程序,如需要记录大量数据库SQL日志,需要扩大分区/tmp,临时目录至少600m
网络要求
100m以上TCP/IP协议的网卡
注意:远程访问数据库的要求,需要进行设置防火墙和selinux策略
系统要求
Linux(glibc2.3以上,内核2.6,预安装KDE/GNOME桌面环境,建议预先安装UnixODBC组件 gcc包)
[root@localhost ~]# rpm -aq | grep ODBC
下面开始进入正题,直接进入实操,手撸方能熟能生巧
规划安装路径与用户(不建议使用root账号)
安装路径[root@localhost /]# mkdir /dm8
规划用户
新建用户组[root@localhost /]# groupadd dinstall
新建用户 [root@localhost /]# useradd -g dinstall dmdba
查看用户是否创建成功[root@localhost /]# id dmdba
为所创建用户设置密码[root@localhost /]# passwd dmdba
(这里密码默认用dameng123,以防后续出错)
为所创建用户分配所属组权限[root@localhost /]# chown -R dmdba:dinstall /dm8
配置环境变量
切换dmdba账号进行配置[root@localhost /]# su - dmdba
进行配置环境变量[dmdba@localhost ~]$ vim ~/.bash_profile
底部进行增加两行信息
export DM_HOME=/dm8
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool
然后进行配置更新[dmdba@localhost ~]$ source ~/.bash_profile
最后进行查看配置是否更改[dmdba@localhost ~]$ echo $DM_HOME
显示/dm8 完成配置更新
[root@localhost dmdba]# ulimit -n 65536
[root@localhost dmdba]# vim /etc/security/limits.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
[root@localhost opt]# mount -o loop /opt/dm8_setup.iso /mnt
切换dmdba账号进行安装[root@localhost dmdba]# su - dmdba
dmdba账号进行配置图形界面
[dmdba@localhost ~]$ export DISPLAY=192.168.48.1:0.0
(window本机IP地址)
[dmdba@localhost ~]$ xhost +
进入iso挂载目录[dmdba@localhost ~]$ cd /mnt
进入图形界面安装[dmdba@localhost mnt]$ ./DMInstall.bin
[root@localhost ~]# /dm8/script/root/root_installer.sh
执行成功,启动DmAPService服务成功
移动 /dm8/bin/dm_svc.conf 到/etc目录
修改服务器权限
创建DmAPService服务
Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动DmAPService服务
至此达梦数据库安装完成
管理工具查看达梦数据库服务,进入/dm8/tool 目录下执行./dmserver.sh命令
[dmdba@localhost tool]$ ./dmservice.sh
命令行方式进行查看达梦数据库服务,进入/dm8/bin目录下执行./DmAPService status命令
[dmdba@localhost bin]$ ./DmAPService status
DmAPService (pid 59460) is running.
达梦安装目录介绍:
Bin:数据库命令和lib库
Bin2:UTF-8
Doc:用户手册和操作手册
Driver:驱动
Include:C语言的头文件
Jar:Jar包(导入导出,快速加载,日志挖掘)
Log:所有的日志文件
Jdk:Java包
Tool:所有的客户端
Script:所有的脚本文件
Web:dem 类似Oracle Oem
/dm8/tool目录下,执行dbca.sh命令
[dmdba@localhost tool]$ dbca.sh
[root@localhost tool]# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
[root@localhost tool]# systemctl enable DmServiceDMSERVER.service
[root@localhost tool]# systemctl start DmServiceDMSERVER.service
至此达梦数据库实例创建完成
通过disql连接刚才创建的数据库,类似Oracle SqlPlus
[dmdba@localhost bin]$ disql sysdba/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.277(毫秒)
disql V8
SQL>
通过达梦管理工具manager进行登录
[dmdba@localhost tool]$ manager
[dmdba@localhost ~]$ dminit path=/dm8/data DB_NAME=LEESERVER INSTANCE_NAME=LEESERVER PORT_NUM=5237
initdb V8
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2021-04-28
log file path: /dm8/data/LEESERVER/LEESERVER01.log
log file path: /dm8/data/LEESERVER/LEESERVER02.log
write to dir [/dm8/data/LEESERVER].
create dm database success. 2020-06-30 15:24:46
[root@localhost root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/LEESERVER/dm.ini -p LEESERVER
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceLEESERVER.service to /usr/lib/systemd/system/DmServiceLEESERVER.service.
创建服务(DmServiceLEESERVER)完成
[root@localhost root]# systemctl start DmServiceLEESERVER.service
[root@localhost root]# systemctl status DmServiceLEESERVER.service
通过./dmserver.sh 查看实例状态
通过disql进行连接
[dmdba@localhost bin]$ ./disql sysdba/SYSDBA@localhost:5237
服务器[localhost:5237]:处于普通打开状态
登录使用时间: 4.708(毫秒)
disql V8
SQL>
1、普通模式(normal):用户可以正常访问数据库,操作没有限制
2、主库模式(primary):用户可以正常访问数据库,对数据库对象修改强制生成redo日志,再归档有效的时候,发送redo日志到备库
3、备库模式(standby):接收主库发送过来的redo日志,并重做日志,数据库对用户只读
1、配置状态(mount)
2、打开状态(open)
3、挂起状态(suspend)
4、关闭状态(shutdown)
Shutdown----Mount
Shutdown----Opne
Open----Mount
Mount----Open
需要注意的是:图形界面启动和关闭实例只能用root账号进行启动和关闭,其他账号可以进行查看,但是无法启动与关闭
当前session有效,关闭会话后,连接断了
[dmdba@localhost bin]$ ./dmserver /dm8/data/LEESERVER/dm.ini
[dmdba@localhost bin]$ ./DmServiceLEESERVER start
[root@localhost ~]# systemctl start DmServiceLEESERVER
判断达梦数据库是不是启动的
端口
[dmdba@localhost bin]$ netstat -ntl | grep 523*
DmServer
[dmdba@localhost bin]$ ps -ef | grep dmserver
达梦是单进程多线程的数据库
[dmdba@localhost bin]$ ./disql sysdba/dameng123
【干货分享】达梦DISQL工具使用解析之- DISQL环境变量设置
【干货分享】DISQL使用解析2
【干货分享】DISQL使用解析3
[dmdba@localhost tool]$ manager
[dmdba@localhost tool]$ ./console
[dmdba@localhost tool]$ ./dts
[dmdba@localhost tool]$ ./monitor
[dmdba@localhost tool]$ ./dmservice.sh
[dmdba@localhost ~]$ cd /dm8/doc/
DM8常用表空间管理
System/Rool/Main/Temp/Hmain
表空间是由一个或多个数据文件构成的,表空间是数据库的一个容器,存放数据库中的数据对象(表、索引等)
达梦默认的系统表空间
System:数据字典和全局的系统数据
Roll:存入了数据库运行过程中的产生的回滚记录
Temp:临时表空间
Main:存放对象数据的表空间,创建对象的时候,如果不指定表空间,就是放在该表空间
Hmain:Huge表空间
SQL> select tablespace_name from user_tablespaces;
SQL> select tablespace_name from user_tablespaces where tablespace_name='TBS';
SQL> create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 32 autoextend on next 1 maxsize 1024, '/dm8/data/DAMENG/TBS02.DBF' size 32 autoextend on next 1 maxsize 1024 CACHE = NORMAL;
SQL> alter tablespace TBS offline;
SQL> alter tablespace TBS online;
查看表空间的状态
SQL> desc dba_data_files;
SQL> select FILE_NAME,STATUS,TABLESPACE_NAME from dba_data_files;
增加表空间数据文件
SQL> alter tablespace TBS add datafile '/dm8/data/DAMENG/TBS02.DBF' size 32;
注意:System、Roll、Temp表空间不能offline
第一步:先将表空间进行offline离线
SQL> alter tablespace TBS offline;
第二步:进行查看表空间状态
SQL> select tablespace_name,status from dba_tablespaces;
第三步:进行修改存储位置
SQL> alter tablespace TBS rename datafile '/dm8/data/DAMENG/TBS02.DBF' to '/dm8/TBS02.DBF';
SQL> alter tablespace TBS rename datafile '/dm8/data/DAMENG/TBS01.DBF' to '/dm8/TBS01.DBF';
第四步:将表空间进行online联机
SQL> alter tablespace TBS online;
注意:无法删除临时表空间,从而创建新的临时表空间
临时表空间是系统自动创建的
SQL> select para_name,para_value from v$dm_ini where para_name like 'TEMP%';
参数undo_retention
Roll表空间不足
Alter tablespace rool resize datafile ‘/dm8/data/DAMENG/ROLL.DBF’ to 1024;
SQL> drop tablespace XXX;
创建一个表空间,初始大小 50M,表空间由 2 个数据文件组成,分别存储在不同的位置,数据文件自动扩展,每次扩展 1M,每个数据文件最大 100M。
预定义用户
Sys、Sysdba、Sysauditor、Syssso、Sysdbo
自定义用户
DMHR
规划用户
以字符开始,长度为1~128个字符,规划用户的权限,规划用户存储位置,规划用户密码安全和资源管理
在达梦数据库中用户管理主要涉及到三块:用户、权限、角色
权限:执行特定类型sql或是访问其他模式对象的权利
系统权限:数据库对象的创建、删除、修改等等
对象权限:对数据对象的数据的操作权限
数据库预定义用户
Sys、Sysdba、Sysauditor、Syssso、Sysdbo
Sys:不能用于用户登录,是系统内置用户
三权分立(企业版)
Sysdba:数据库系统管理员
Sysso:数据安全员
Sysauditor:数据库审计员
四权分立(安全版)
Sysdba
Sysso
Sysauditor
Sysdbo:数据库对象操作员
数据库预定义角色
DBA、PUBLIC、RESOURCE、VTI
名字:字母开头,a-z,0-9,$#_
位置:对应的表空间
密码:口令策略
0:无策略
1:禁止与用户名相同
2:口令长度不小于9
4:至少包含一个大写字母
8:至少包含一个数字
16:至少包含一个标点符号(英文状态下输入,除空格和“ ”)
口令可以单独使用、也可以组合使用。(比如:要求口令策略禁止用户名相同,并且口令长度不小于9,则设置口令策略为1+2=3)
Faild_Login_Attemps:密码尝试登陆次数
Password_Lock_Time:密码失败后锁定时间
Password_Life_Time:密码过期时间
练习:建立用户test,用户可以创建自己的表,有属于自己的表空间,用户密码要求每60天变更一次
第一步:创建表空间
create tablespace “TEST” datafile ‘/dm8/TEST01.DBF’ size 32 autoextend on next 1 maxsize 1024 CACHE = NORMAL;
第二步:创建用户
单独赋予建表权限->Grant Create Table to TEST;
查看用户权限:
SQL> select * from all_users;
SQL> select GRANTEE, granted_role from SYS.DBA_ROLE_PRIVS where grantee='TEST';
SQL> select GRANTEE,PRIVILEGE from SYS.DBA_SYS_PRIVS where grantee='PUBLIC';
SQL> select GRANTEE,PRIVILEGE from SYS.DBA_SYS_PRIVS where grantee='VTI';
SQL> select GRANTEE,PRIVILEGE from SYS.DBA_SYS_PRIVS where grantee='RESOURCE';
练习:规划一个用户 test2,用户每 60 天变更一次密码,密码尝试连接2次失败,账号锁定5分钟,用户能查询dmhr.employee表
查询用户状态:
SQL> select username ,account_status, lock_date from dba_users ;
用户解锁:
SQL> alter user test2 account unlock;
用户锁定:
SQL> alter user test2 account lock;
赋予用户权限:
SQL> grant select on dmhr.employee to test2;
收回用户权限:
SQL> revoke select on dmhr.employee from test2;
赋予用户部分权限:
SQL> grant select(employee_name,hire_date)on dmhr.employee to test2;
练习:企业招聘一批录入人员,权限固定,只能录入 city 表的权限。角色:一组固定权限的集合
创建角色:
SQL> create role r1;
赋予角色权限:
SQL> grant insert on dmhr.city to r1;
SQL> grant references any table to r1;
R1角色 test2 用户:
SQL> grant r1 to test2;
SQL> insert into dmhr.city values ('sdf','ddsfsf',7);
SQL> commit;
注意:一定要记得commit 提交!!!DM8不会自动提交,除非管理工具设置了自动提交
删除用户:
SQL> Drop user test2 caseade ;
集联删除,慎重操作,最好先进行备份
SQL> Drop user test2;
删除角色:
SQL>Drop role r1;
模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集
模式对象:表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域
DM创建用户的时候,会默认去创建一个同名的模式,如果你创建的用户,模式名已存在,用户无法创建,一个用户可以拥有多个模式
默认的表示索引组织表,支持堆表,临时表,分区表,外部表等
遵循三大范式
1、命名:字母开头、a-z,0-9,$#_
2、数据类型:int char varchar date clob blob number等等
3、存储位置:自己规划的表空间,如果没有指定的表空间,则会存在main表中间中。
4、约束(5大约束)非空约束、唯一约束、主键、外键、检查约束
5、注释:comment
练习:规划一张学员信息表
表名:STU
学号:id char(10)
姓名:sname varchar(20) not null
性别:sex char(1)
年龄:age int
电话:tel varchar(15) not null
家庭住址:address varchar(50)
表空间:STU
约束 主键列–学号 非空–姓名和电话
备注:student info
增加列
SQL> alter table HWA.STU ADD COLUMN (FH INT);
删除列
SQL> alter table HWA.STU drop column FH;
约束
数据库约束是为了保证数据的完整性(正确性)而实现的一套机制
约束分为两类:行级和表级,处理机制是一样的
常见的约束类型:NOT NULL 、UNIQUE、PRIMARY KEY 、FOREIGN KEY、CHECK
1、非空约束 NOT NULL
SQL> create TABLE HWA.H1(ID INT );
SQL> ALTER TABLE HWA.H1 MODIFY ID INT NOT NULL;
2、唯一约束 UNIQUE
SQL>create table hwa.h3(id int,name varchar(20) unique); SQL>insert into hwa.h3 values(1,'ssss');
SQL>insert into hwa.h3 values(2,null);
SQL>insert into hwa.h3 values(3,null);
SQL>insert into hwa.h3 values(4,null);
Commit;
唯一约束遇到 null,忽略,可录入多个 null 值
3、主键约束(一张表只能有一个主键约束)
SQL> create table hwa.h4(id int primary key,name varchar(20));
SQL> create table hwa.h5(id int);
SQL> alter table hwa.h5 add constraint t5_pri primary key(id);
4、检查约束
SQL> create table hwa.h6(id int check(id>=5));
5、外键约束
SQL> create table hwa.h8(sid int primary key ,pid int);
SQL> create table hwa.h9(id int primary key ,sid int foreign key references hwa.h8(sid));
6、对列加备注
SQL> comment on column hwa.h8.sid is '编号';
查看约束
SQL> desc dba_col_comments;
SQL> desc dba_constraints;
SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS from dba_constraints where TABLE_NAME='H8';
SQL> select * from dba_col_comments where table_name='H8';
导入数据到表中
1、Insert into 表名values ();
2、通过脚本把数据导入到表中
SQL> start /home/dmdba/a.sql
Oracle 为 @
DM8为 start
如何维护表?
1、重命名
SQL> alter table hwa.h1 rename to hw1;
2、启用和禁用约束
SQL> alter table hwa.h3 disable constraint CONS134218846; 禁用约束
SQL> alter table hwa.h3 enable constraint CONS134218846; 启用约束
3、进行查看约束名称、状态等
SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS from dba_constraints where TABLE_NAME='H3';
4、删除表
SQL> drop table hwa.hw1;
视图概念
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据、从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表
视图分类:简单视图、复杂视图、物化视图
1、简单视图
创建语法:create view() as select() from() where()
修改语法:create or replace view() as select() from()where()
SQL> create view hwa.v1 as select * from dmhr.employee;
SQL> create or replace view hwa.v1 as select employee_name from dmhr.employee limit 5;
2、删除视图
SQL> drop view hwa.v1;
3、查询视图
DBA_VIEWS;
索引的作用:加快表的查询,增加数据库的查询性能,对数据库做DML操作的时候,数据库会自动维护索引,索引占空间,视图不占用空间(物化视图不占用)
达梦支持的索引:二级索引,位图索引,唯一索引,复合索引,函数,分区索引,分区索引等
适合建索引的情况:
1、经常查询的列
2、连接条件列
3、谓词经常出现的列(where )
4、查询是返回表的一小部分数据
根据业务逻辑进行创建
不适合建索引的情况
1、列上有大量的NULL
2、列上的数据是有限的(比如说性别)
查看表的索引
SQL> select table_name,index_name from dba_indexes where table_name ='STU';
创建索引
规划索引表空间,表的数据无序的,索引的数据有序的
创建索引表空间
SQL> create tablespace index1 datafile '/dm8/data/DAMEMG/index1_01.dbf' size 32;
建索引
SQL> create table hwa.emp as select * from dmhr.employee;
SQL> create table hwa.dept as select * from dmhr.department;
SQL> create index ind_emp on hwa.emp(employee_id) tablespace index1;
查看表的执行计划
没有走我们自己建立的索引,统计信息是旧的,需要重新收集统计信息;
收集统计信息
SQL> begin
2 dbms_stats.gather_table_stats('HWA','EMP');
3 END;
4 /
DMSQL 过程已成功完成
相关字典
DBA_INDEXES
注意:创建索引,删除索引,重建索引和收集统计信息,不要再业务高峰去做。在业务低估的时候去操作
维护索引:
SQL> alter index hwa.ind_emp rebuild;
重建索引:
SQL> alter index hwa.ind_emp rebuild online; -慎重使用
删除索引
SQL> drop index hwa.ind_emp;
注意:达梦默认不会自动收集统计信息,需要手动收集,可以利用作业来定时的自动收集
DMSQL 基于SQL92,部分SQL99的
SQL的语句分类
DQL:数据查询语句 select from where 组成的查询块
DDL:数据定义语句 create table create vie create index等等
DML:数据操作语句 insert update delete
DCL:数据控制语句 用于授予或回收访问数据库的某种特权,控制数据操作纵事务,对数据库进行监视等
Grant revoke commit rollback lock unlock 等等。
语法:select ()from () where()
Where《查询条件》
Where 子句常用的查询条件
谓词种类 | 谓词 |
---|---|
比较 | > < <= >= != not |
确定范围 | Between and >= and <= |
集合 | In not in |
字符匹配 | Like not like |
空值 | Is null is not null |
多重条件 | And or |
Like % _
SQL> select employee_name,salary from hwa.emp where employee_name like '%马%';
SQL> select employee_name,salary from hwa.emp where employee_name like '马_';
查找工资在20000到30000之间的员工
SQL> select employee_name,salart from hwa.emp where salary between 20000 and 30000;
等同于
SQL> select employee_name,salary from hew.emp where salary >=20000 and salary <=30000;
大小写处理函数
函数 | 结果 |
---|---|
LOWER(‘SQL Course’) UPPER(‘SQL Course’) INITCAP(‘SQL Course’) |
SQL Course SQL Course SQL Course |
字符处理函数
函数 | 结果 |
---|---|
CONCAT(‘Hello’,’World’) SUBSTR(‘HelloWorld’,1,5 LENGTH(‘HelloWorld’) INSTR(‘HelloWorld’,’W’) LPAD(salary,10,’’) RPAD(salary,10,’’) TRIM(‘H’ FROM ‘HelloWorld’) |
HelloWorld Hello 10 6 24000 24000 elloWorld |
数值处理函数
ROUND:将值舍入到指定的小数位(四舍五入)
Round(49.36,1)->49.4
TRUNC:将值截断到指定的小数位(不舍入)
Trunc(49.36,1)->49.3
MOD:返回除法运算的余数
Mod(100,3) ->1
日期函数
Months_between 两个日期之间的月数
Add_Months 将日历月份添加到日期中
Next_Day 指定日期的下一天
Last_DAY 月份的最后的一天
显示转换
To_Char
SQL> select employee_name,to_char(salary,'L999,999.00') from dmhr.employee limit 3;
To_Number(char[,fmt])
To_Date(Char[,fmt])
SQL> select employee_name,hire_date,to_date(hire_date,'yyyy-mm-dd')from dmhr.employee limit 2;
分组函数
分组函数作用于一组数据,并对一组数据返回一个值
常见的分组函数
Avg、count、max、min、sum…
案例一:求各个部门的最高工资
SQL> select department_id ,max(salary) from hwa.emp group by department_id;
案例二:找出部门平均工资大于10000的所有部门
SQL> select department_id,avg(salary) av1 from hwa.emp group by department_id having avg(salary)>10000order by av1 desc;
注意:having表示分组后的数据进行过滤,having不能单独使用,一定是和grouo by 一起使用的,分组函数不能出现在where子句中
排序order by
升序:asc 降序:desc 默认是升序
案例三:从邮件地址中取出邮箱名字
SQL> select substr(email,1,(instr(email,'@')-1)),employee_name from hwa.emp limit 5;
语法:select () from join () on ()
1、内连接:结果集显示全部满足条件的记录、
SQL> select employee_name,department_name from hwa.emp e join hwa.dept d on e.department_id=d.department_id limit 8;
2、外连接
左外连接:把left join 左边的全部显示出来,右边的只显示满足条件的,不满足条件的用null代替
SQL> select employee_name,department_name from hwa.emp e left join hwa.dept d on e.department_id=d.department_id limit 8;
右外连接:把 right join 右边的全部显示出来,左边的只显示满足条件的,不满足条件的用NUll代替
SQL> select employee_name,department_name from hwa.emp e right join hwa.dept d on e.department_id=d.department_id limit 8;
全外连接=左外连接+右外连接
SQL> select employee_name,department_name from hwa.emp e full join hwa.dept d on e.department_id=d.department_id limit 8;
数据库备份就是制作数据库的“副本”
防止数据库丢失数据
在数据丢失后重建数据库
完全备份是指在一个备份包含指定数据库或表空间的所有数据
增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件
备份的方式:物理备份和逻辑备份
备份的介质:磁盘、磁带、光盘
集群:数据守护,dsc(rac)
也支持第三方的备份软件:爱数、鼎甲
物理备份分为热备和冷备
一、打开归档
1)命令行方式
SQL> alter database mount;
SQL> alter database add archivelog 'type=local,dest=/dm8/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
SQL> alter database open;
SQL> select name,status$,arch_mode from v$database;
2)利用管理工具
进行查看归档状态
二、热备备份
1)命令行方式
SQL> backup database full to "DB_DAMENG_FULL_2020_06_28_10_28_10" backupset 'DB_MAMENG_FULL_2020_06_28_10_28_10';
backup database full to “备份名” backupset ‘备份集目录’
2)利用管理工具
3)命令行方式进行全备、增量备份
全备
SQL> backup database full backupset '/dm8/backup/fullbak2';
增量备
SQL> backup database increment backupset '/dm8/backup/incr_bak';
4)表空间进行还原
表空间只能脱机还原、使用DMRMAN–>-->/dm8/bin/./dmrman
模拟表空间test损坏
[dmdba@localhost DAMENG]$ mv TEST01.DBF TEST01.DBF.BAK
SQL> alter database mount;
[root@localhost ~]# systemctl stop DmServiceDMSERVER
使用dmrman进行还原
1、校验备份集
RMAN> check backupset '/dm8/backup/fullbak2';
RMAN> restore database '/dm8/data/DAMENG/dm.ini' tablespace test from backupset '/dm8/backup/fullbak2';
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace test;
[root@localhost ~]# systemctl start DmServiceDMSERVER
SQL> alter database open;
[dmdba@localhost tool]$ ./console
应使用dmdba账号去开启console图形界面,而不是root账号,会导致还原的时候出现服务无法启动,造成还原时部分文件权限发生改变,所以应使用dmdba启动./console
脱机还原时,先还原再恢复进行更新
完成备份后需要重启实例、Root账号
systemctl start DmServiceDMSERVER
systemctl stop DmServiceDMSERVER
导入导出(dexp,dimp)
分四级别:分别独立、互斥不能同时存在
数据库级别
用户
模式
表级
1、逻辑导出
[dmdba@localhost bin]$ ./dexp sysdba/dameng123@localhost:5236 file=dexp01.dmplog=dexp01.logdirectory=/dm8/backup/dexpfull=y
2、逻辑导入
[dmdba@localhost bin]$ ./dimp sysdba/SYSDBA@localhost:5239 file=/dm8/backup/dexp/dexp01.dmp log=/dm8/backup/dexp/dimp01.log
达梦支持的语言:cc++ javapythonphpperl.net
Linux环境下配置ODBC(以ROOT配置)
检查GCC包:
[root@localhost~]#rpm-aq|grepgcc
解压安装包:
[root@localhostopt]#tar-xzvfunixODBC-2.3.0.tar.gz
配置odbc:
[root@localhostunixODBC-2.3.0]#./configure--enable-gui=no
编译安装ODBC:
[root@localhostunixODBC-2.3.0]#make&&makeinstall
查看ODBC的版本:
[root@localhostunixODBC-2.3.0]#odbc_config--version
[root@localhostunixODBC-2.3.0]#odbcinst-j
[root@localhost dmdba]# vim /usr/local/etc/odbc.ini
[dm8]
Description=DM ODBC DSND
Driver=DM8 ODBC DRIVER
SERVER=localhost
UID=SYSDBA
PWD=dameng123
TCP_PORT=5236
[DM8 ODBC DRIVER]
Description=ODBC DRIVER FOR DM8
DRIVER=/dm8/bin/libdodbc.so
以上资料均来自达梦培训讲义
感谢达梦大学-李春红导师
人无完人,赶项目验收未参加后期培训,些许资料可能有误,欢迎指正