zoukankan      html  css  js  c++  java
  • dm8数据库的安装和使用讲解

    Dm8数据库

    1、数据库行业
    1.1 关系型数据库
    Oracle 20c
    DB2(烟草、邮政)
    Sqlserver 2014 2017
    Mysql 8 开源(电商平台)
    PG postgresql 开源
    达梦 8 自主、原创
    金仓 PG
    神通 混元 pg mysql
    南通 pg
    高斯 pg
    Oceanbase 阿里(蚂蚁金服)
    TDSQL 腾讯
    Sybase erp
    1.2 非关系型数据库
    Mongodb 文档
    Redis 内存Mem
    cache 内存
    TimesTen
    hadoop 集合数据库
    2DM8 安装
    2.1 查看软硬件信息
    查看 cpu 信息
    [root@localhost ~]# cat /proc/cpuinfo
    要注意国产 cpu(飞腾、龙芯)
    查看内存信息
    [root@localhost ~]# free -m
    注意:物理内存至少为 1Gswap 分区一般是物理内存的 1.5
    查看磁盘及分区信息[root@localhost ~]# fdisk -l
    [root@localhost ~]# df -h
    网络要求:
    100m 网卡,支持 TCP/IP 协议
    数据库要远程访问,应该要关闭防火墙或者是开放对应的端口号。
    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    [root@localhost ~]# systemctl status firewalld
    系统要求:
    内核要在 2.6 以上
    [root@localhost ~]# uname -ar
    安装 gcc
    [root@localhost yum.repos.d]# yum install -y gcc
    2.2 规划路径
    [root@localhost yum.repos.d]# mkdir -p /dm8
    2.3 规划安装用户(不建议用 root
    [root@localhost dm8]# groupadd dinstall
    [root@localhost dm8]# useradd -g dinstall dmdba
    [root@localhost dm8]# passwd dmdba
    更改用户 dmdba 的密码 。
    新的 密码:
    无效的密码: 密码少于 8 个字符
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。
    drwxr-xr-x. 2 root root 6 11 23 11:06 /dm8
    [root@localhost dm8]# chown dmdba:dinstall -R /dm8
    [root@localhost dm8]# ls -ld /dm8
    drwxr-xr-x. 2 dmdba dinstall 6 11 23 11:06 /dm8
    2.4dmdba 用户环境变量配置(可选项)
    [root@localhost dm8]# su - dmdba

    [dmdba@localhost ~]# vi .bash_profile
    // 在.bash_profile最后增加

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

    export PATH
    export DM_HOME=/dm8
    export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
    export LD_LIBRARY_PATH=/dm8/bin:$LD_LIBRARY_PATH

    环境变量生效:[dmdba@localhost ~]$ source .bash_profile
    2.5 设置文件最大打开数
    重启服务器生效
    [root@localhost ~]# vi /etc/security/limits.conf
    dmdba soft nofile 4096
    dmdba hard nofile 65536
    临时生效
    [root@localhost ~]# ulimit -n 65536
    2.6 数据库版本
    开发版:不能作为商用,用时间和并发限制
    标准版:小型应用,不支持集群等高级特性
    企业版:支持数据库高级特性,生产环境中使用最多
    安全版:在企业版基础上,四权分立,安全性有进一步提高
    2.7 数据库软件安装
    GUI:
    [root@localhost home]# mount -o loop /home/dm8_setup_rh7.iso /mnt
    mount: /dev/loop0 写保护,将以只读方式挂载
    [dmdba@localhost ~]$ cd /mnt
    [dmdba@localhost mnt]$ ./DMInstall.bin选择 key,点击下一步
    没有 key 也可以安装,替换 key 在路径 $DM_HOME/bin,重启数据库实例生效。
    选择典型安装:选择安装路径:安装小结:
    安装中:root 账号执行脚本:
    查看 DmAP 服务
    [dmdba@localhost bin]$ ./DmAPService status
    [dmdba@localhost tool]$ ./dmservice.sh
    bin达梦数据库命令,服务,库文件
    bin2 utf8
    drivers :驱动
    license_en.txt license_zh.txt:许可信息
    release_zh.txt release_en.txt :版本信息
    uninstall uninstall.sh:数据库卸载脚本
    include c 语言头文件
    samples : 示 例
    desktop :桌面
    jarjar 包 (快速装载,导入导出,日志挖掘)
    log:数据库日志信息
    script:脚本
    Web dem 相当于 oracle oem
    doc:手册
    jdk java
    tool :客户端工具
    CLI(命令行安装)
    [dmdba@localhost mnt]$ ./DMInstall.bin -i
    2.8 数据库软件的卸载
    GUI:
    [dmdba@localhost dm8]$./uninstall.sh
    CLI:
    [dmdba@localhost dm8]$ ./uninstall.sh -i
    注意:生产环境中在卸载数据库之前,一定要记得先做好备份。
    3、创建数据库实例
    一个数据库软件是可以创建多个实例,通过端口号区别,达梦默认端口号是 5236
    GUI:
    [root@localhost ~]# su - dmdba
    上一次登录:一 11 23 11:30:46 CST 2020pts/3
    [dmdba@localhost ~]$ export DISPLAY=192.168.128.1:0.0
    [dmdba@localhost ~]$ xhost +
    access control disabled, clients can connect from any host
    xhost: must be on local machine to enable or disable accesscontrol.
    [dmdba@localhost ~]$ cd /dm8/tool/
    [dmdba@localhost tool]$ ./dbca.shroot 执行脚本查看数据库是否启动:
    [root@localhost ~]# ps -ef|grep dmserver
    [root@localhost ~]# netstat -ntl|grep 5236
    [dmdba@localhost bin]$ ./DmServiceDMSERVER status
    [dmdba@localhost tool]$ ./dmservice.sh
    CLI:
    建库查看帮助:[dmdba@localhost bin]$ ./dminit help
    [dmdba@localhost
    bin]$
    ./dminit
    db_name=DAMENG02
    instance_name=DMSERVER2
    port_num=5237 path=/dm8/data
    注册服务查看帮助:
    脚本所在路径 /dm8/script/root
    [root@localhost root]# ./dm_service_installer.sh -h
    [root@localhost root]# ./dm_service_installer.sh
    -t dmserver -p DMSERVER2 -dm_ini
    /dm8/data/DAMENG02/dm.ini
    4、数据库实例管理
    4.1 数据库状态
    Shutdown:关闭状态
    Mount:配置状态
    Open:数据库打开状态,对外提供服务
    Suspend:挂起状态
    4.2 数据库状态切换
    Shutdown - mount
    Shutdown - open
    Mount - open
    Open - mount(oracle 不支持)
    Suspend - open
    Open - suspend
    Open - shutdown
    Suspend 状态只能查询,不能写
    4.3 数据库启动过程
    Shutdown-mount
    根据 dm.ini 配置文件中的参数分配内存,启动后台进程或者线程,找到控制文件并打开控
    制文件。
    Mount-open
    根据控制文件打开所有的数据文件以及重做日志文件,校验数据库是否处于一致性状态。
    4.4 数据库启动关闭
    4.4.1 通过前台方式启动关闭数据库
    [dmdba@localhost bin]$ ./dmserver /dm8/data/DAMENG/dm.ini
    [dmdba@localhost bin]$ exit
    4.4.2 通过后台进程形式启动关闭数据库
    [dmdba@localhost bin]$ ./DmServiceDMSERVER start
    [dmdba@localhost bin]$ ./DmServiceDMSERVER stop
    4.4.3 通过服务查看器启停数据库(root
    5、数据库工具
    5.1 disql
    bin
    [dmdba@localhost bin]$ ./disql sysdba/Dameng123:5236
    tool 相 当 于 是 oracle sqlplus /nolog
    [dmdba@localhost tool]$ ./disql
    disql V8
    SQL> select status$ from v$instance;
    未连接
    SQL> conn sysdba/Dameng123:5236
    5.2manager
    [dmdba@localhost tool]$ ./manager
    5.3console
    [dmdba@localhost tool]$ ./console
    查看和修改参数
    做冷备和恢复
    5.4DTS 迁移工具
    5.5 性能监视工具
    monitor
    6DMSQL
    SQL:结构化查询语言
    DMSQL 基于 sql92sql99 标准
    6.1DMSQL 分类
    DML(数据库管理):selectinsertupdatedeleteDDL(数据库定义):create drop alter table truncate
    DCL(权限控制):grantrevoke
    TCL(事务控制):commit rollback
    6.2 sql 的书写规范
    关键字不能被拆分
    不区分大小写,除了“”’’以外
    可以换行
    6.3 简单查询
    语法
    Select () from ();
    单列查询
    查询员工表的姓名
    SQL> select employee_name from dmhr.employee;
    多列查询
    查询员工表的姓名,部门编号,工资
    select employee_name,department_id,salary from dmhr.employee;
    查询所有列
    select * from dmhr.employee;
    对列起别名
    查询员工的姓名和工资
    select employee_name,salary as gzfrom dmhr.employee;
    select employee_name,salary gz fromdmhr.employee;
    连接||
    查询“***的工资是:***
    select employee_name||'的工资是:'||salary from dmhr.employee;
    去重复 distinct(隐藏排序)
    查询部门编号
    select distinct department_id from dmhr.employee
    表达式: salary+1000
    为所有人工资加 1000
    select employee_name,salary,salary+1000 as total from dmhr.employee;
    6.4 过滤查询
    语法
    Select () from () where ()
    比较运算符、逻辑运算、inis null/is not nullbetween*** andlike
    比较运算符:= > >= < <= <> !=
    Select employee_name,salary fromdmhr.employee where employee_name='马学铭';
    Select employee_name,salary from dmhr.employee where salary>=30000;
    逻辑运算符:and or not
    select employee_name,department_id,salary from dmhr.employee
    where department_id=101
    and salary>=10000;
    select employee_name,department_id,salary from dmhr.employee
    where department_id=103
    or salary>=25000;
    模糊查询:like % _
    %匹配 0 个或多个字符
    Select employee_name,salary from dmhr.employee where employee_name like '%';
    _匹配 1 个字符
    Select employee_name,salary from dmhr.employee where employee_name like '_';
    IN
    select employee_name,department_id
    from dmhr.employee where department_id in
    (101,102);
    Is null/is not null null 为空,不等于 0
    select employee_name,job_id from dmhr.employee where job_id is null;
    Between... and ...
    select employee_name,department_id,salary from dmhr.employee where
    salary between 10000 and 20000;
    6.5 排序
    升序 asc
    select employee_name,salary from dmhr.employee order by salary asc;
    降序 desc
    select employee_name,salary from dmhr.employee order by salary desc;
    6.6 分组函数
    Count max min avg sum
    语法:
    Select () from () where () group by () having ();
    除了聚合函数不用跟在 group by 后面,其他 select 列必须要跟在 group by 后面,having
    group by 的进一步过滤,不能单独使用。
    求部门工资和大于 10 万的部门
    select department_id,sum (salary) from dmhr.employee
    group by department_id
    having sum (salary) >100000;
    6.7 多表连接查询
    6.7.1 内连接
    结果集只显示满足条件的记录
    自然连接
    查询不需要指定连接列,根据列名自己过滤,两个表连接的列名和数据类型要一致。
    select employee_name,department_id,department_name from dmhr.employee natural join
    dmhr.department;
    交叉连接(笛卡集)
    select count(*) from dmhr.employee;--856
    select count(*) from dmhr.department;--46
    39376
    select count(*) from dmhr.employee cross join dmhr.department;
    select count(*) from dmhr.employee,dmhr.department;
    USING
    在满足多个连接列时,可以指定一个列做连接,连接的列前面不能加表名或者是前缀。
    select
    employee_name,department_name,department_id
    from
    dmhr.employee
    join
    dmhr.department
    using (department_id);
    ON
    select a.city_name,b.street_address from dmhr.city a join dmhr.locationb
    on a.city_id=b.city_id
    Hash join
    可以通过 hint 强制走 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;
    6.7.2 外连接
    结果集除了显示满足条件的记录,不满足的也显示,用 null 代替
    左外连接 left join
    left join 左边的全部显示出来,右边的只显示满足条件的记录,不满足条件的用 null 代替
    select a.city_name,b.street_address from dmhr.city a left join dmhr.locationb
    on a.city_id=b.city_id;
    右外连接 right join
    right join 右边的全部显示出来,左边的只显示满足条件的记录,不满足条件的用 null
    select a.city_name,b.street_address from dmhr.city a right join dmhr.locationb
    on a.city_id=b.city_id;
    全外连接 full join
    左外+右外
    select a.city_name,b.street_address from dmhr.city a full join dmhr.locationb
    on a.city_id=b.city_id;
    6.8 子查询
    当一个查询是另一个查询的条件时,就叫子查询。子查询先运行,子查询的结果是主查询的
    件。子查询可以嵌套子查询,子查询可以做为临时表做连接。
    单行子查询
    一次只返回一条记录
    select
    employee_name,department_id
    from
    dmhr.employee
    where
    EMPLOYEE.DEPARTMENT_ID=(select EMPLOYEE.DEPARTMENT_ID from dmhr.employee
    where employee_name='马学铭');
    多行子查询
    一次返回多条记录
    select employee_name,department_id,salary from dmhr.employee where salary > all(select
    salary from dmhr.employee
    where department_id=102);
    7. DM8体系结构
    DMSERVER:C/S架构,由客户端+服务器构成
    数据库=数据库文件+实例
    数据库文件:配置文件、控制文件、数据文件、重做日志文件、归档日志文件、跟踪日志文件、
    备份文件
    实例:一组进程/线程+共享内存
    实例又分为单实例和集群(dsc
    单实例就是一个实例管理一个数据库,dsc是多个实例管理一个数据库,类似于oracle rac
    7.1DM8存储结构
    7.1.1物理结构
    配置文件
    .ini结尾的文件
    dm.ini满足oracle pfile+spfile文件
    可以查看视图v$dm_ini
    select para_name,para_value,para_type from v$dm_ini ;
    Sys:系统级,影响全局
    Session:会话级,针对当前会话有效
    Readonly:只读,只能手动编辑参数文件
    Infile:静态参数,实例重启才能生效。
    修改参数有以下几种方法:
    1Vi dm.ini 修改完成之后,无论是动态还是静态参数,都需要重启数据服务;
    2Sp_set_para_value(参数类型,’参数名’,参数值)
    1等于both,即改即生效,会同时改变内存中和参数中的值。
    2等于infile,只改变参数中的值,需要重启才能生效。
    修改数据库兼容模式 COMPATIBLE_MODE
    是否兼容其他数据库模式。
    0:不兼容,
    1:兼容SQL92标准,
    2:兼容ORACLE,
    3:兼容MS SQL SERVER,
    4:兼容MYSQL
    修改数据库为兼容oracle的模式
    sp_set_para_value(2,'COMPATIBLE_MODE',2);3)通过console工具修改参数,无论是动态还是静态参数,都需要重启数据服务;
    4Alter system修改
    数据文件
    .DBF结尾的文件
    视图:dba_data_files;
    控制文件
    .ctl结尾的文件
    控制文件中记录了数据库的模式,数据库名,oguid,上一次启动时间,启动次数,数据文件
    的版本。
    SQL> select para_name,para_value from v$dm_ini where para_name like '%PATH%';
    查看控制文件内容
    工具dmctlcvt
    查看帮助
    [dmdba@localhost bin]$ ./dmctlcvt help
    将控制文件转换为文本文件
    [dmdba@localhost bin]$ ./dmctlcvt type=1 src=/dm8/data/DAMENG/dm.ctl dest=/tmp/dmctl.txt
    重做日志文件
    重做日志文件记录的是数据库发生变化(insert,update,delete,alter,create)的信息。达梦没有
    日志组,至少需要两个重做日志文件。重做日志的特点是循环写,可覆盖。重做日志文件可以
    重命名、扩展大小,也可以添加。重做日志文件不能被删除。重做日志文件频繁切换会对数据
    库产生比较大的影响,考虑增加日志文件,或者是扩展文件大小。
    视图:v$rologfile
    查询重做日志文件新增重做日志文件
    SQL> alter database add logfile '/dm8/data/DAMENG/DAMENG03.log' size 300;
    resize重做日志文件大小
    SQL> alter database resize logfile '/dm8/data/DAMENG/DAMENG01.log' to 300;
    SQL> alter database resize logfile '/dm8/data/DAMENG/DAMENG02.log' to 300;
    迁移重做日志文件
    alter database mount;
    alter database rename logfile '/dm8/data/DAMENG/DAMENG01.log' to '/dm8/DAMENG01.log';
    alter database open;
    归档日志文件
    就是重做日志文件的副本。用来做数据库备份恢复,数据库守护集群、读写分离集群的同步。
    开启归档:
    CLI:
    SQL> alter database open;
    操作已执行
    已用时间: 00:00:01.781. 执行号:0.
    SQL> alter database mount;
    SQL> alter database archivelog;
    SQL> alter database add archivelog 'type=local,dest=/dm8/data/arch,file_size=100,space_limit=0';
    SQL> select name,arch_mode from v$database;
    行号 NAME ARCH_MODE
    ---------- ------ ---------
    1
    DAMENG Y
    SQL> alter database open;
    GUI:
    将数据库启动到mount状态开启归档模式并设定归档路径及文件大小、空间限制等。
    将数据库启动到open状态
    备份文件
    .bak为扩展名的文件。备份文件就是数据库在某一个时间点的副本。
    跟踪日志文件
    跟踪日志文件记录的是各会话执行的sql信息。还记录了数据库错误信息、性能相关问题。
    通过参数SVR_LOG,默认值为0,关闭。
    7.1.2逻辑结构
    页:默认为8k,支持4k8k16k32k。是数据库最小的分配单元。页对应的是操作系统块。
    页是由页头信息、数据、空闲空间、行偏移数组组成。页头信息包含了页类型、页地址,行偏
    移数组记录的数据和空闲空间的比例(filefactor)
    簇:
    簇:簇是一组连续的页组成,默认为16个页,支持1632个页。一个簇总是在一个数据文件
    中。
    段:是簇的上级逻辑单元,段是可以跨多个数据文件的。段又分为数据段(表、索引),临时
    段,回滚段。
    dba_segments
    表空间:可以拥有一个或多个数据文件,一个数据文件只能属于一个表空间。
    7.2内存结构
    共享内存池是DMSERVER启动时从操作系统申请的一大片内存,实例在运行中可以向共享内存
    池申请或者释放内存。
    MAX_OS_MEMORY:可以使用物理内存的百分比
    MEMORY_POOL:公共池,减少系统调用
    MEMORY_TARGET:为0表示不限制内存使用。
    运行时内存池:给特定模块单独使用,例如会话内存池和虚拟机内存池。
    数据缓冲区
    缓存的是数据页(空闲、干净、脏、正在使用),使用数据缓冲区可以提高数据库的读写性能。
    数据库缓冲区设置的太小会造成性能问题,设置的过大,又会引起资源浪费。
    参数:buffer参考值:oltp物理内存的40%-60%
    Olap物理内存的60%-80%
    数据缓冲区有4种类型:
    Normalkeep:可以手动调整。默认为normal
    达梦缓存的是表空间,oracle魂村的是表。
    Fastrecycle:系统自动管理。Recycle缓存的是临时数据。
    读多页:全表扫描比较多
    Multi_page_get_num
    日志缓冲区
    存放的是重做日志信息,单位是页,避免直接对磁盘进行操作,提升数据库的性能。
    重做日志的刷盘机制:每三秒,事务提交。
    字典缓冲区
    字典缓冲区主要缓存的是数据字典的信息,包含表,列的信息。数据库中存在大量表或者表分
    区时,应该要调整字典缓冲区。
    SQL缓冲区
    用来存放执行计划,sql结果集、包。对于sql类别比较多,应该调整sql缓冲区。
    排序区排序区就是sql排序需要的内存空间,在内存中无法完成将转移到磁盘上(临时表空间)
    7.3线程结构
    监听线程
    检测来自客户端的连接请求,把任务交给工作线程。
    IO线程
    将数据页从磁盘读入数据缓冲区中,将数据缓冲区中的脏页在一定机制(缓冲区满,数据库关
    闭,执行检查点)下刷到磁盘中。
    日志刷新线程
    将重做日志缓冲区中的记录在一定机制下刷新(事务提交,执行检查点,每3秒,缓冲区满,
    数据库关闭)到重做日志文件。
    日志归档线程
    将重做日志文件在切换时拷贝到归档路径下。
    日志重做线程
    主要用于数据库恢复。
    调度线程
    检查系统级的时间触发器;
    清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
    动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
    自动执行检查点;
    会话超时检测;
    必要时执行数据更新页刷盘;
    唤醒等待的工作线程;
    一个SQL执行过程
    A客户端发起连接请求(监听线程、工作线程)
    B语法分析(字典缓冲区、SQL缓冲区)
    C语义分析(字典缓冲区)
    D权限分析(字典缓冲区)
    E查看数据库页是否在buffer中,在内存中就会产生逻辑读,不在就会产生物理读(数据缓冲区,
    sql缓冲区,IO线程)
    F数据发生变更(日志缓冲区、日志刷新线程,数据缓冲区,IO线程,工作线程)
    G是否有可用的执行计划,有就按执行计划执行,没有则生成执行计划,执行sql,结果集返回
    客户端。(字典缓冲区、排序区、hash区、工作线程、IO线程、sql缓冲区)
    8、表空间
    8.1查看表空间介绍达梦数据库表空间:
    SYSTEM:系统表空间,存放数据字典信息、动态性能视图
    ROLL:回滚表空间,存放数据库运行中的回滚记录
    TEMP:临时表空间,做排序
    MAIN:数据库默认表空间,存放的是用户的数据。创建用户或者数据库对象时不指定表空间,
    就放在该表空间中。
    HMAINHUGE表空间
    查询表空间和数据文件
    8.2创建表空间
    案例1:创建一个初始大小为20m的表空间。
    SQL> create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' size 30m;
    create tablespace test datafile '/dm8/data/DAMENG/TEST01.DBF' size 30m;
    *
    1 , 102 [m]附近出现错误[-2007]:
    语法分析出错.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]大小无效.
    已用时间: 1.606(毫秒). 执行号:0.
    表空间数据文件初始化大小是4096*页(8192=32M
    案列2:窗机表空间TEST,数据文件初始大小为50M,每次自动扩展2M,最大可扩展1G;
    create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST01.DBF' size 50 autoextend on next 2
    maxsize 1024 CACHE = NORMAL;
    作业:
    创建表空间TEST2,包含两个数据文件,初始大小为40M,每次自动扩展1M,最大可扩展10G;
    8.3表空间状态
    脱机状态
    Alter tablespace test offline;
    连接状态
    Alter tablespace test online;
    查看表空间状态0为联机状态,1为脱机状态
    8.4维护表空间
    8.4.1表空间不足
    扩展数据文件
    alter tablespace "TEST" resize datafile 'TEST01.DBF' to 2000;
    添加数据文件
    alter tablespace "TEST" add datafile '/dm8/data/DAMENG/TEST02.DBF' size 100 autoextend on next
    1 maxsize 2000;
    8.4.2更换数据文件路径
    表空间脱机
    Alter tablespace test offline;
    更换路径
    SQL> alter tablespace test rename datafile '/dm8/data/DAMENG/TEST01.DBF' to '/dm8/TEST01.DBF';
    表空间联机
    SQL> alter tablespace test online;
    8.5维护回滚表空间
    alter tablespace "ROLL" add datafile '/dm8/data/DAMENG/ROLL02.DBF' size 100 autoextend on next
    1 maxsize 10240;
    8.6临时表空间注意:systemrolltemp表空间不允许脱机,temp表空间不能被删除。
    8.7表空间删除
    Drop tablespace test;
    9、用户管理
    9.1用户
    查看用户
    企业版数据库预定义的用户:
    Sys:不能登录,存放的数据字典和视图
    Sysdba:管理员
    Sysauditor:审计员
    Syssso:安全员
    安全版用户:
    在企业版基础上,增加sysdbo——数据库对象操作员
    规划用户:
    命名:以字母开头,a-z0-9$#_,长度不超过128个字符
    权限分配:系统权限、对象权限、角色
    存储:表空间
    密码策略:PWD_POLICY
    设置系统默认口令策略。
    0: 无策略;
    1: 禁止与用户名相同;
    2: 口令长度不小于9;
    4: 至少包含一个大写字母(A-Z);
    8 :至少包含一个数字(09);
    16:至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号;若为其他数字,则表示
    配置值的和,31+2,表示同时启用第1项和第2项策略。
    COMPATIBLE_MODE=1,PWD_POLICY的实际值均为03=2+1 6=2+4
    例:将密码策略设置为禁止与用户名相同并且口令长度不小于9
    SQL> sp_set_para_value(1,'PWD_POLICY',3);
    权限
    权限就是我能具体做哪些事情?
    权限分为系统权限和对象权限
    对象权限
    创建用户
    创建tbs用户,用户属于tbs表空间,tbs用户有建表和建视图的权限。
    1)创建tbs表空间
    create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 32 CACHE = NORMAL;
    2)创建tbs用户
    create user "TBS" identified by "Dameng123"
    limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10
    default tablespace "TBS";grant "VTI" to "TBS";
    grant CREATE TABLE,CREATE VIEW to "TBS";
    修改用户
    TBS用户可以查询dmhr.employee 的字段employee_name,salary
    grant SELECT("SALARY") on "DMHR"."EMPLOYEE" to "TBS";
    grant SELECT("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "TBS";
    不能查看dmhr.employee.salary
    不能对单个列的权限进行撤回,权限撤回是针对表级。
    revoke select on dmhr.employee from tbs;
    修改用户默认表空间
    alter user "TBS" default tablespace "TEST";
    锁定用户
    Alter user tbs account lock;
    解锁用户
    Alter user tbs account unlock;
    删除用户
    Drop user test;
    9.2角色
    角色是一组权限的集合,方便权限管理。角色是可以被授予给角色和用户的。
    创建角色
    create role "R1";
    grant "PUBLIC","RESOURCE" to "R1";
    grant CREATE TABLE,CREATE VIEW,CREATE TRIGGER to "R1";
    grant SELECT("EMPLOYEE_NAME"),UPDATE("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "R1";
    授予角色给用户
    grant "R1" to "TBS";
    撤回角色
    revoke "R1" from "TBS";
    启用角色
    禁用角色
    删除角色
    Drop role r1;
    10、模式对象管理
    模式就是一组数据库对象的集合
    模式对象:表、索引、视图、触发器、存储过程、同义词、包、序列
    模式与用户的关系:
    一个用户可以对应多个模式,一个模式只能属于一个用户,创建用户时会自动创建一个同名
    的模式。
    10.1模式
    sysdba用户登录,默认就是在sysdba模式下。
    创建模式
    SQL> create schema abc;
    /
    切换模式
    SQL> set schema abc;
    模式存在,则不允许创建与模式同名的用户。
    删除模式
    SQL>drop schema abc;
    10.2表
    系统表:数据库自己创建和维护的表,存放的是数据库信息
    用户表:自己创建的表,用户的真实数据
    DM支持表的类型:
    索引组织表、堆表、外部表、分区表
    DM默认表的类型是索引组织表,oracle默认表的类型是堆表
    10.2.1创建表
    1)命名:以字母开头,a-z,0-9,$#_
    2)数据类型:int,number,date,char,varchar,clob,long,blob
    3)存储位置:表空间,建表时没有指定表空间,就存在用户默认表空间中
    4)约束类型:主键约束、非空约束、唯一约束、外键约束、检查约束
    非空约束:
    SQL> create table test (id char(20) not null);
    SQL> insert into test values(null);
    insert into test values(null);
    [-6609]:违反列[ID]非空约束.
    SQL> select * from test;
    未选定行
    DM数据库执行sql脚本 startoracle数据库执行sql脚本用@
    SQL> start /home/dmdba/test.sql
    唯一约束;创建唯一约束会自动创建一个唯一索引,忽视空值,空不等于任何值。
    查询约束 dba_constraints
    查询索引 dba_constraints
    SQL> create table test2 (id int unique,name varchar(20));
    SQL> insert into test2 values(1,'111');
    SQL> insert into test2 values(null,'111');
    SQL> insert into test2 values(null,'111');
    SQL> commit;
    SQL> select * from test2;
    行号 ID
    NAME
    ---------- ----------- ----
    1
    1
    111
    2
    NULL
    1113
    NULL
    111
    SQL> insert into test2 values(1,'111');
    [-6602]:违反表[TEST2]唯一性约束.
    主键约束:非空+唯一,一个表只能有一个主键,设计主键尽量避免业务逻辑的列
    SQL> create table test3 (id int primary key);
    外键约束:保证数据完整性
    create table "SYSDBA"."TEST4"
    (
    "ID" INT
    );
    alter table "SYSDBA"."TEST4" add constraint foreign key("ID") references "SYSDBA"."TEST3"("ID");
    SQL> insert into test4 values(1);
    [-6607]:违反引用约束[CONS134218845].
    SQL> insert into test3 values(1);
    SQL> commit;
    SQL> insert into test4 values(1);
    SQL> commit;
    SQL> drop table test3;
    drop table test3;
    1 行附近出现错误[-2639]:试图删除被依赖对象[TEST3].
    SQL> drop table test4;
    SQL> drop table test3;
    检查约束
    SQL>create table test5 (id int check(id>5));
    SQL> insert into test5 values(6);
    SQL> insert into test5 values(5);
    insert into test5 values(5);
    [-6604]:违反CHECK约束[CONS134218846].
    10.2.2管理表
    重命名表:
    Alter table test2 rename test1;
    添加列:
    alter table "SYSDBA"."TEST1" add column("add" VARCHAR(50));
    删除列
    alter table "SYSDBA"."TEST1" drop column "add";
    10.2.3管理约束
    查看约束
    select constraint_name,table_name,status from user_constraints;
    启用约束
    Alter table test1 enable constraint CONS134218843;禁用约束
    Alter table test1 disable constraint CONS134218843;
    删除表:
    drop table test1;
    10.3视图
    视图就是一个查询语句,一张虚拟表
    DM视图:简单视图、复杂视图、物化视图
    创建视图的语法:
    Create view () as select ***;
    Create or replace view() as select ***;
    创建视图
    create view view_emp as
    select a.EMPLOYEE_ID,a.EMPLOYEE_NAME,a.DEPARTMENT_ID,a.SALARY
    from dmhr.employee a
    where a.DEPARTMENT_ID=105;
    删除视图
    drop view view_emp;
    10.4索引
    索引是数据库对象。
    索引作用:加快查询速度,对更新少量数据时,可以提高更新速度,insert时会有延迟。
    数据库会自动维护索引,索引会占用存储空间的。
    创建索引基本要求:
    经常查询的列
    Where条件中出现的列
    连接列
    返回少量或小部分数据
    不合适建立索引:
    列上有大量的重复值
    列上有大量的null
    结果集返回大量的数据
    创建索引
    create index "IND_EMP" on "SYSDBA"."EMP"("EMPLOYEE_NAME") storage(initial 1,next
    1,minextents 1,on "DMHR");
    查看索引信息
    User_indexes
    查看sql执行计划
    explain select * from emp where employee_name='aaa';搜集统计信息
    搜集统计信息后的执行计划
    维护索引:
    重建索引:提升数据库的性能
    Alter index IND_EMP rebuild;
    删除索引:
    drop index IND_EMP ;
    11、备份还原
    备份就是数据库在某一个时间点的副本
    数据库备份目的:防止数据丢失,防止天灾人祸(地震、火灾、人为操作、硬件故障)
    备份主要有物理备份和逻辑备份
    物理备份主要是备份使用过的有效的数据页,逻辑备份主要是备份数据库对象(表,索引,
    视图,存储过程等)
    物理备份:分为联机备份和脱机备份;完全备份和增量备份
    完全备份:备份的是整个数据库或者表空间的全部数据
    增量备份:备份的是上一次全备或增备后,以后每次备份只需要备份修改过的数据页
    还原就是将某个时间点的数据库副本拷贝到对应的目录下。
    恢复就是在完成数据库还原之后,应用部分或者是全部归档日志。
    11.1物理备份
    冷备:
    冷备:不需要开启归档,需要开启DmAP服务,需要关闭数据库实例,针对整库做备份
    1console工具备份
    [dmdba@localhost bin]$ ./DmServiceDMSERVER stop
    2、用dmrman工具备份,只支持冷备
    [dmdba@localhost backup]$ cd /dm8/bin
    [dmdba@localhost bin]$ ./dmrman
    dmrman V8
    RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
    热备:
    需要开启归档,数据库需要打开(open
    可以备份数据库、表空间、表、归档日志
    查看数据库归档模式:
    SQL> select name,arch_mode from v$database;
    行号 NAME ARCH_MODE
    ---------- ------ ---------
    1
    DAMENG Y
    manager工具做热备
    整库备份查看备份
    命令行做全备:disql工具
    SQL> backup database full to "DB_DAMENG_FULL";--备份到参数文件中的备份路径
    SQL> backup database full to "DB_DAMENG_FULL2" BACKUPSET '/dm8/backup';
    做增量备份backup database increment to "DB_DAMENG_INCRE_2020_11_25_14_24_14" backupset
    'DB_DAMENG_INCRE_2020_11_25_14_24_14';
    表空间备份
    表空间备份只能联机,还原只能脱机
    manager工具
    disql
    backup tablespace "DMHR" full to "TS_DMHR_FULL_2020_11_25_14_31_44" backupset
    'TS_DMHR_FULL_2020_11_25_14_31_44';
    表备份:backup table "DMHR"."DEPARTMENT" to "TAB_DMHR_DEPARTMENT_2020_11_25_14_34_57"
    backupset 'TAB_DMHR_DEPARTMENT_2020_11_25_14_34_57';
    归档备份:
    backup archivelog all to "ARCH_2020_11_25_14_36_55" backupset 'ARCH_2020_11_25_14_36_55';
    11.2物理还原
    检查备份集是否有效
    Console工具还原
    恢复dmrman工具还原
    RMAN> restore database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup';
    RMAN> recover database '/dm8/data/DAMENG/dm.ini' with archivedir '/dm8/data/arch';
    RMAN> recover database '/dm8/data/DAMENG/dm.ini' update db_magic;
    表空间还原
    RMAN>restore database '/dm8/data/DAMENG/dm.ini' tablespace MAIN from backupset
    '/dm8/backup';
    RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace MAIN;
    11.3逻辑备份
    备份的是数据库对象
    逻辑备份可以用来迁移和重组数据库,是数据库辅助型备份
    dexp/dimp四个级别导入导出:
    库级别
    用户
    模式
    查看帮助:
    [dmdba@localhost bin]$ ./dexp help
    [dmdba@localhost bin]$ ./dimp help
    全库导出:
    [dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=full.dmp log=full.log
    directory=/dm8/backup full=y
    用户导出:
    [dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=dmhr.dmp log=dmhr.log
    directory=/dm8/backup owner=dmhr
    导出表:
    [dmdba@localhost bin]$ ./dexp sysdba/Dameng123 file=emp.dmp log=emp.log
    directory=/dm8/backup tables=emp
    全库导入:
    [dmdba@localhost bin]$ ./dimp sysdba/Dameng123 file=full.dmp log=imp_full.log
    directory=/dm8/backup full=y
    注意事项:执行用户导入时,如果用户不存在,要先创建用户。
    12、作业
    新建作业1,每周三,每周日22:00做全备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/backup', 1, 2, 0, 0, NULL, 0);
    call SP_ADD_JOB_SCHEDULE('JOB1', 'd3', 1, 2, 1, 9, 0, '16:15:44', NULL, '2020-11-25 22:00:00', NULL,
    '');
    call SP_JOB_CONFIG_COMMIT('JOB1');
    新建作业2,每周一、二、四、五、六做增量备份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/incr', 1, 2, 0, 0, NULL, 0);
    call SP_ADD_JOB_SCHEDULE('JOB2', 'd2', 1, 2, 1, 118, 0, '22:00:00', NULL, '2020-11-25 22:00:00',
    NULL, '');
    call SP_JOB_CONFIG_COMMIT('JOB2');
    13、DM8开发
    Linux配置odbc
    root配置
    检查gcc
    [root@localhost home]# rpm -qa|grep gcc
    gcc-4.8.2-16.el7.ns7.03.x86_64
    [root@localhost home]# tar -xvf unixODBC-2.3.0.tar.gz
    [root@localhost home]# cd 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
    配置文件/usr/local/etc/odbcinst.ini
    配置文件/usr/local/etc/odbc.ini

    [root@localhost unixODBC-2.3.0]#cd /usr/local/etc/
    对/usr/local/etc目录下的2个文件(odbc.ini和odbcinst.ini)进行修改配置

    其中DRIVER根据达梦8数据库的安装路径而定

    [root@localhost etc]# vim odbcinst.ini
    [DM8 ODBC DRIVER]
    Description = ODBC DRIVER FOR DM8
    DRIVER = /dm8/bin/libdodbc.so

    [root@localhost etc]# vi odbc.ini
    [dm8]
    Description = DM ODBC DSND
    Driver = DM8 ODBC DRIVER
    SERVER = localhost
    UID = SYSDBA
    PWD = Dameng123
    TCP_PORT = 5238
    其中SERVER、UID、PWD、TCP_PORT可以根据实际情况进行修改

    export LD_LIBRARY_PATH=/dm8/bin:$LD_LIBRARY_PATH

     
    测试连接
    dmdba账号
    [dmdba@localhost bin]$ isql dm8
     
  • 相关阅读:
    java多线程之停止线程
    An internal error occurred during: &quot;Building workspace&quot;. java.lang.StackOverflowError
    我不是一个合格的程序猿
    数论(同余+hash)
    hdu 5119 dP
    使用fatjar来实现将包括第三方jar包的项目到处成一个jar包供其它程序使用
    JavaSwing JScrollPane的使用
    Flex4 布局 元素index
    Flex4 flash builder保留MXML转换的AS代码
    Flex 数据绑定
  • 原文地址:https://www.cnblogs.com/songyaru/p/14179799.html
Copyright © 2011-2022 走看看