初步接触达梦数据库

初识达梦数据库管理系统

一、达梦数据库最新的版本(DM8):
DM8是达梦公司在总结DM系列产品研发与应用经验的基础上,坚持开放创新、简洁实用的理念,历经五年匠心打磨,推出的新一代自研数据库。
DM8吸收借鉴当前先进新技术思想与主流数据库产品的优点,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。
二、产品特点
1、 多维融合,满足多样需求
基于新技术发展的思考和市场的需求,坚持实用性、通用性和简洁性的理念,DM8提出了面向未来的新架构并持续演进。四种架构,共通共存,多样化配置充分满足不同场景需求。化繁为简,合而为“一”,让用户不再因规模而不断妥协。
2、关键业务解决方案—达梦数据共享集群(DM DSC)
DM8数据共享集群实现了更大规模的集群支持,用户和运维人员可以将原有的2节点DM DSC升级为更多节点,以取得更高的系统可靠性;添加了用于异地容灾的数据守护支持以提升容灾能力;增加了DSC Plus(DSCP)特性,支持远程高可用镜像部署方式。
3、达梦分布式事务处理架构—透明分布式数据库
具有分布式数据库的高可扩展、高可用、高并发处理能力,且对用户透明;同时又具备传统数据库的所有高级特性,支持传统数据库所有开发接口和业务开发框架的技术架构,用户只需将传统应用直接部署在DM8 TDD集群上,即可简单完成数据架构划时代的进化。
4、达梦分布式动态分析架构—数据库弹性计算
可以在保证包括SQL支持能力在内的所有数据库功能完备性的同时,显著提升关系数据库集群的横向扩展能力,释放用户设备算力;同时对于数据中心和云计算中心而言,更低成本、更灵活的计算扩展方式,也可促进数据中心整体能效的提升。
5、达梦混合事务分析处理技术—行列融合2.0
行列融合2.0令DM8具备了事务-分析混合型业务处理的能力,满足用户对HTAP应用场景的需求,包含变更缓存、高级日志两个关键特性,用以弥合行存储与列存储的鸿沟。简化系统架构,轻量灵活,降低应用开发和运维的难度。
三、目前国内外数据库形势:
国外:
Oracle 20C (11g 银行、电力、运营商)
SQL server 2012/2014 (政府)
DB2 (银行数据中心、烟草)
MySQL (开源、互联网、电信TelDB)
PostgreSQL (学术性、国产二次开发)
Informix sybase
国内:
人大金仓 8 (pg 电力、政府、央企)
达梦 8 (代码自主原创,电力、审计等)
神通 7(pg 审计、电力等)
南大 8(8a pg ,8t informix,8s mysql)
OB (自主原创、金融,蚂蚁金服)
高斯100 (自研)
四、数据库安装
1、安装前硬件检查
cpu:P4 1.6以上
lscpu
检查内存:256M-512M
free -hl
检查硬盘:5G
df -hl
DM 安装程序在安装时将产生临时文件,临时文件需要 1GB 的存储空间,临时文
件目录默认为/tmp
内核版本检测:2.6以上
uname -r
glibc2.3以上
rpm -q glibc
建议安装unixODBC
rpm -q unixODBC
安装rpm程序包
yum -y install unixODBC
查询操作系统商业版本
cat /etc/os-release
操作系统位数
getconf LONG_BIT

2、安装前系统配置(以linux为例)
(1)关闭防火墙
6.X
service iptables stop 停止
chkconfig iptables off 禁用开机启动
service iptables status 当前状态
7.X
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
(2)关闭Selinux
vi /etc/selinux/config
SELINUX=disabled
(3)配置网卡
查看设备
ip add
修改
(方法1)
vi /etc/sysconfig/network-scripts/ifcfg-ens33
重启生效
ifdown ens33(网卡名称) 关闭网卡–本地登录
ifup ens33 (网卡名称) 启动网卡–本地登录
service network restart 重启网络服务–远程连接方式
(方法2) 命令修改(os7)
nmcli con mod ens33 ipv4.addresses “192.168.50.135/24” gw4 “192.168.50.1” ipv4.method manual ipv4.dns “114.114.114.114 8.8.8.8” con.autoconnect yes
[root@neokylin76 ~]# nmcli connection reload
[root@neokylin76 ~]# nmcli device status
ifdown ens33 (网卡名称) 关闭网卡–本地登录
ifup ens33 (网卡名称) 启动网卡–本地登录
service network restart 重启网络服务–远程连接方式
(4)主机名称
os6
hostname 查看
vim /etc/sysconfig/network 永久修改,需要重启
hostname dm7test 当前名称,注销重入
os7
hostnamectl 查看
hostnamectl set-hostname dm7test 永久修改,注销重入
(5)配置hosts
vi /etc/hosts
(6)安装用户组与用户
创建用户组
groupadd dinstall
创建用户dmdba
useradd -g dinstall dmdba
设置密码:
passwd dmdba
(7)创建安装目录
mkdir -p /dm7/
mkdir -p /dm7/data
mkdir -p /dm7/arch
mkdir -p /dm7/back
chown -R dmdba:dinstall /dm7
chmod -R 775 /dm7
(8)检查系统参数
ulimit -a
data seg size 1048576(即 1GB)
file size unlimited
open files 65536 以上或 unlimited
virtual memory 1048576(即 1GB)
修改open-files参数
vim /etc/security/limits.conf
dmdba soft nofile 4096
dmdba hard nofile 65536
(9)修改用户配置文件
su - dmdba
vim /home/dmdba/.bash_profile
PATH= D M H O M E / b i n : DM_HOME/bin: DMHOME/bin:PATH: H O M E / b i n 3 、 数 据 库 安 装 ① 检 查 是 否 有 数 据 库 服 务 运 行 [ d m d b a @ d m 1 t o o l ] HOME/bin 3、数据库安装 ①检查是否有数据库服务运行 [dmdba@dm1 tool] HOME/bin3[dmdba@dm1tool] ps -ef|grep dmap
②查看是否有服务注册:
os6:[dmdba@dm1 tool] c h k c o n f i g − − l i s t ∣ g r e p D 0 s 7 : [ d m d b a @ d m 1 t o o l ] chkconfig --list|grep D 0s7:[dmdba@dm1 tool] chkconfiglistgrepD0s7[dmdba@dm1tool]systemctl list-dependencies|grep Dm
os7:[dmdba@dm1 tool] s y s t e m c t l l i s t − u n i t − f i l e s ∣ g r e p D m ③ 卸 载 注 意 : 如 果 有 实 例 在 运 行 , 停 止 数 据 库 实 例 , 对 数 据 库 做 备 份 。 再 去 卸 载 软 件 。 停 止 辅 助 服 务 D m A P S e r v i c e o s 6 : s e r v i c e D m A P S e r v i c e s t o p o s 7 : s y s t e m c t l s t o p D m A P S e r v i c e 停 止 实 例 R H E L 6 : / e t c / r c . d / i n i t . d / D m s e r v i c e + 实 例 名 s t o p 如 : [ d m d b a @ d m 1   ] systemctl list-unit-files|grep Dm ③卸载 注意:如果有实例在运行,停止数据库实例,对数据库做备份。再去卸载软件。 停止辅助服务 DmAPService os6:service DmAPService stop os7:systemctl stop DmAPService 停止实例 RHEL6:/etc/rc.d/init.d/Dmservice+实例名 stop 如:[dmdba@dm1 ~] systemctllistunitfilesgrepDmDmAPServiceos6serviceDmAPServicestopos7systemctlstopDmAPServiceRHEL6/etc/rc.d/init.d/Dmservice+stop[dmdba@dm1 ] /etc/rc.d/init.d/DmServiceTEST stop
RHEL7:/usr/lib/systemd/system/ Dmservice+实例名.services stop
卸载程序
命令行:[dmdba@dm1 dm7]$ ./uninstall.sh -i
删除服务
root运行脚本/dm7/root_uninstaller.sh
彻底删除
rm -rf 文件、文件夹名称
④挂安装包:
mount -o loop /home/dmdba/dm7_setup_rh6_64_ent_7.6.0.197_20190917.iso /mnt
⑤安装
[dmdba@dm1 mnt]$ ./DMInstall.bin -i
⑥执行安装后脚本
[root@dm1 secur1ity]# /dm7/script/root/root_installer.sh
五、数据库管理
1、实例安装
命令:(dminit)
Oracle,mysql,sql server(文件组)
命令:create database
[dmdba@dm1 ~]$ dminit help
path 数据文件的路径
db_name 数据库的名字
instance_name 实例名字
port_num 端口号
注意:
oracle如何识别实例 oracle_sid (1521)
达梦识别实例 端口号(一个端口对应一个实例)
一个软件运行多个实例(端口)
[dmdba@dm1 ~]$ dminit path=/dm7/data db_name=DM instance_name=PROD port_num=5237
查看注册:[dmdba@dm1 ~]$ chkconfig --list|grep D
把数据库服务注册到OS:
[root@dm1 root]# ./dm_service_installer.sh -h
[root@dm1 root]# ./dm_service_installer.sh -t dmserver -p PROD -i /dm7/data/DM/dm.ini
[dmdba@dm1 root]$ netstat -ntl|grep 52
2、实例管理
一、安装目录结构
bin 达梦命令和库文件(linux .so windwos .dll)
drivers 驱动(jdbc)
license_en.txt / license_zh.txt (许可信息)
release_zh.txt / release_en.txt (版本信息)
uninstall/ uninstall.sh 卸载
bin2
include 头文件.h(达梦C语言)
samples 例子
desktop 桌面
jar jar包 (导出导入的、日志挖掘、文件快速加载)
log 日志(安装日志、工作日志)
script 脚本
web DEM(利用web维护和部署数据库的工具)B/S
doc 帮助文档
jdk java
tool 工具

二、DM管理工具
2.1 图形化方式

2.2 命令行
2.2.1启动工具
客户端的disql (安装目录的tool)
[dmdba@dm1 tool]$ cd /dm7/tool/
[dmdba@dm1 tool]$ ./disql
SQL> conn sysdba/SYSDBA
服务器的disql (安装目录的bin)
[dmdba@dm1 ~]$ cd /dm7/bin
[dmdba@dm1 bin]$ disql
用户名:sysdba
密码:
注意:1 .不指定端口时,默认使用5236端口)
2. 指定端口练级的格式如下(如5237端口)
[dmdba@dm1 bin]$ disql sysdba/SYSDBA@127.0.0.1:5237
2.2.2通过参数文件配置默认连接
[dmdba@dm1 bin]$ vim /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
TEST=(192.168.10.61:5236)
PROD=(192.168.10.61:5237)
配置完成后直接使用链接名称PROD,无需指定IP:端口
[dmdba@dm1 bin]$ disql sysdba/SYSDBA@prod
2.3常见问题

密码错误

网络不通、数据库服务未启动、达到最大的会话连接数
扩大链接数:sp_set_para_value(2,‘MAX_SESSIONS’,500);
三、 实例管理 (启动和关闭)
3.1 数据库的状态:

Oracle:nomount mount open readonly

DM: mount open suspend
注意:集群时还有如下状态:(数据守护 primary standby)
状态查询命令:
SQL> select status$ from v i n s t a n c e ; S Q L > s e l e c t s t a t u s instance; SQL> select status instance;SQL>selectstatus from v$database;
启动的过程:
shutdown—mount
分配共享内存,启动后台的进程或者线程,打开控制文件
mount—open
根据控制文件打开重做日志文件和数据文件
数据库状态转换:
open—mount
SQL> alter database mount;
mount—open
SQL> alter database open;
open----suspend
SQL> alter database suspend;
suspend—open
SQL> alter database open;
3.2 实例的启动与关闭
(1) 服务方式:
达梦服务查看器

(2) dmserver 命令
格式:dmserver [ini_file_path] [-noconsole] [mount]

[dmdba@dm1 ~]$ /dm7/bin/dmserver /dm7/data/DAMENG/dm.ini(dm.ini参数文件)
[dmdba@dm1 ~]$ /dm7/bin/dmserver /dm7/data/DAMENG/dm.ini mount
以mount方式启动
注意:1.此种方式为调试模式,属于前台启动,如果关闭调试窗口、在窗口内输入ctrl+C或exit视为关闭数据库实例操作。
2. 此种方式启动会检查dm.key是否过期,过期则无法启动。
(3)linux服务器方式(调用的dmserver)
RHEL6:
[dmdba@dm1 ~]$ /etc/rc.d/init.d/DmServiceTEST start
[dmdba@dm1 ~]$ /etc/rc.d/init.d/DmServiceTEST stop
或service DmService实例名 start/stop/restart
调用位置:RHEL6:/etc/rc.d/init.d/Dmservice+实例名
RHEL7:
/usr/lib/systemd/system/ Dmservice+实例名.services start/stop
或systemctl start/stop/restart DmService实例名
调用位置:RHEL7:安装目录的bin Dmservice+实例名

3、数据库备份与还原
一、备份目的:

  1. 天灾
  2. 误操作
  3. 硬件故障
  4. 软件故障
    二、备份的介质:
  5. 磁盘
  6. 磁带
  7. 光盘
    三、备份方法:
    3.1. 物理备份 (数据文件)
    a) 冷备份(数据库关闭)
    b) 热备份(数据库打开)
    c) 完全备份和增量备份(不支持差异增量)
    3.2. 逻辑备份(SQL)
    四、冷备份:(可能会丢数据)
    4.1数据库关闭
    [dmdba@dm1 DAMENG]$ /etc/rc.d/init.d/DmServiceTEST status
    [dmdba@dm1 DAMENG]$ /etc/rc.d/init.d/DmServiceTEST stop
    4.2damp服务要开启
    [dmdba@dm1 DAMENG]$ /etc/rc.d/init.d/DmAPService status
    注意:提示管道文件已存在?
    删除安装目录bin下的DM_PIPE_DMAP_LSNR_*,再启动dmap
    4.3执行备份
    [dmdba@dm1 bin]$ cd /dm7/bin
    [dmdba@dm1 bin]$ ./dmrman
    RMAN> backup database ‘/dm7/data/DAMENG/dm.ini’ backupset ‘/dm7/backup/20200429’
    [dmdba@dm1 20200429]$ ls
    20200429.bak(备份文件) 20200429.meta(备份的元数据)
    4.4还原备份
    假设数据库崩溃,利用冷备份还原?
    1)restore database
    RMAN> restore database ‘/dm7/data/DAMENG/dm.ini’ from backupset ‘/dm7/backup/20200429’
    此时打开数据库会报错
    [dmdba@dm1 ~]$ /etc/rc.d/init.d/DmServiceTEST start
    Starting DmServiceTEST: [ FAILED ]
    version info: enterprise
    Use normal os_malloc instead of HugeTLB
    Use normal os_malloc instead of HugeTLB
    DM Database Server x64 V7.6.0.197-Build(2019.09.12-112648)ENT startup…
    License will expire on 2020-09-10
    instance TEST is restored,should be recovered.
    2)recover database
    RMAN> recover database ‘/dm7/data/DAMENG/dm.ini’ from backupset ‘/dm7/backup/20200429’

5、热备份:数据库必须是归档模式
5.1 检查数据库归档模式
SQL> select arch_mode from v d a t a b a s e ; N 非 归 档 模 式 5.2 打 开 归 档 : 1 ) . 数 据 库 到 配 置 模 式 S Q L > a l t e r d a t a b a s e m o u n t ; 2 ) . 配 置 归 档 文 件 S Q L > a l t e r d a t a b a s e a d d a r c h i v e l o g ′ t y p e = l o c a l , d e s t = / d m 7 / a r c h , f i l e s i z e = 64 , s p a c e l i m i t = 0 ′ ; 3 ) . 打 开 归 档 S Q L > a l t e r d a t a b a s e a r c h i v e l o g ; 4 ) . 打 开 数 据 库 S Q L > a l t e r d a t a b a s e o p e n ; 数 据 库 打 开 [ d m d b a @ d m 1 D A M E N G ] database; N 非归档模式 5.2打开归档: 1). 数据库到配置模式 SQL> alter database mount; 2). 配置归档文件 SQL> alter database add archivelog 'type=local,dest=/dm7/arch,file_size=64,space_limit=0'; 3). 打开归档 SQL> alter database archivelog; 4). 打开数据库 SQL> alter database open; 数据库打开 [dmdba@dm1 DAMENG] database;N5.21).SQL>alterdatabasemount;2).SQL>alterdatabaseaddarchivelogtype=local,dest=/dm7/arch,filesize=64,spacelimit=0;3).SQL>alterdatabasearchivelog;4).SQL>alterdatabaseopen;[dmdba@dm1DAMENG] /etc/rc.d/init.d/DmServiceTEST status
dmap服务启动
[dmdba@dm1 DAMENG]$ /etc/rc.d/init.d/DmAPService status

5.3 备份:(库,表空间,表,归档)

SQL> backup database backupset ‘/dm7/backup/db_bak’;
表空间
SQL> backup tablespace dmhr backupset ‘/dm7/backup/dmhr_bak’;

SQL> backup table dmhr.employee backupset ‘/dm7/backup/emp_bak’;
归档日志
SQL> backup archivelog backupset ‘/dm7/backup/arch_bak’;

注意:(system损坏,要重新初始化数据库,在利用整个备份还原,(dmrman))
roll表空间损坏用(dmrman)还原
5.4 还原
假设DMHR表空间损害?
SQL> alter tablespace dmhr offline;
SQL> restore tablespace dmhr from backupset ‘/dm7/backup/db_bak/’;
SQL> alter tablespace dmhr online;

6、逻辑备份(dexp dimp) 数据库,表,用户,模式
备份参数查询:
[dmdba@dm1 db_bak]$ dexp help
备份表:
[dmdba@dm1 db_bak]$ dexp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=dmhr.emp
还原表:
[dmdba@dm1 db_bak]$ dimp sysdba/SYSDBA file=/dm7/backup/emp.dmp tables=dmhr.emp

总结:物理备份备份的数据文件,不备份配置文件,redolog,控制文件。

4、DMSQL语言
一、DMSQL简介
SQL 结构化查询语言
分类:DML DDL DCL TCL
二、DML 命令
(select insert update delete)
2.1 select

  1. 简单查询
    select () from ();
    第一个括号可以接(*,列命名,||,alias,distinct,表达式)
  2. 过滤排序
    过滤 select () from () where ();
    where后边可以接(比较运算,逻辑运算,NULL/NOT NULL,in,between…and,模糊查询like)
    排序:select () from () where () order by (asc / desc);
  3. 分组查询
    聚合函数 sum avg max min count
    select 聚合函数(),column_name from () group by (column_name) having ();
  4. 多表查询
    99标准:
    内连接:
    自然连接
    using子句
    on子句
    语法:select () from () join () on ();
    找出每个用工所在的部门?
    SQL> select e.employee_name,d.department_name from employee e join department d on e.department_id=d.department_id;(问题,有员工没有部门)
    自连接(分表)
    hash join
    SQL> select e.employee_name,d.department_name from employee e hash join department d on e.department_id=d.department_id;
    第 1 行, 第 110 列[hash]附近出现错误[-2007]:
    语法分析出错.
    SQL> select e.employee_name,d.department_name from employee e inner hash join department d on e.department_id=d.department_id;
    外连接:
    左外连接
    SQL> select e.employee_name,d.department_name from employee e left join department d on e.department_id=d.department_id;(解决员工没有部门)
    右外连接(right join)
    全外连接 (full join)
  5. 子查询
    分类:单行 多行
    机制:子查询的结果是主查询的条件,子查询先于主查询运行
    单行:返回结果唯一
    select () from () where ()=(sql语句);
    找出和马学铭在同一个部门的人?(同名,可以使用in)
    SQL> select department_id,employee_name from employee where department_id= (select department_id from employee where employee_name=‘马学铭’);

SQL> select department_id,employee_name from employee where department_id =(select department_id from employee where employee_name=‘马学铭’);
[-4097]:单行子查询返回多行
解决办法:
SQL> select department_id,employee_name from employee where department_id in (select department_id from employee where employee_name=‘马学铭’);

SQL> select department_id,employee_name from employee where department_id = any (select department_id from employee where employee_name=‘马学铭’);

多行子查询:返回结果为多个 any all in exists

any(min) <any(max)
all(max) <all(min)
找出比1004部门所有人工资都高的?
SQL> select employee_name,department_id,salary from employee where salary >all (select salary from employee where department_id=1004);
in:先运行子查询,子查询运行完,在运行主查询。
exists:先运行子查询,如果存在满足查询条件的,就去运行主查询,主查询没有满足条件的,再运行子查询,直到没有满足条件的。
其他命令在表管理中进行介绍

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值