注册
DCA&DCP学习总结
培训园地/ 文章详情 /

DCA&DCP学习总结

时间& 2025/06/26 63 0 0

达梦数据库学习

●DCA
●数据库管理系统介绍
●基本概念
●数据库是用来组织、存储和管理数据的仓库
●分为关系型数据库和非关系型数据库
●数据库分类
●关系型数据库
●国外:sql server 、mysql、oracle、postgresql
●国内:达梦
●非关系型数据库
●k/v键值
●文档型
●列式数据库
●图文数据库
●关系型数据库介绍
●关系模型三要素
●数据结构:一个关系就是一个表
●数据操作:
●查询:选择、投影、连接、并、差、交、笛卡尔积
●更新(插入、删除、修改)
●完整性规则:
●实体完整性、参考完整性、用户自定义完整性
●E-R模型
●实体集---table
●实体--行
●属性--列及字段
●表的关联关系
●一对多
●一对一
●多对多
●自我引用
●关系型数据库的事务特性
●acid特性
●原子性--一个事务所有操作必须全部完成
●隔离性--事务和事务相互独立
●一致性--事务开始或结束数据库在一个一致的状态
●持久性--一旦事务完成,就不能返回
●OLTP&OLAP介绍
●OLAP
●数据量大,低并发,大吞吐量--财务季度报表
●OLTP
●小事务小查询、高并发、低延时---比如银行
●数据库架构演进
●单机
●部署集中
●扩展性差
●单点故障
●多机
●分组
●主备
●高可用
●资源浪费
●主备切换需要人工
●主从
●一主多从,dm可以1对8,针对大并发读取的场景
●高可用
●写在主机,读可以多台,
●多主
●互为主从
●共享存储多活
●相当于rac
●分片
●share-nothing/mpp
●数据无共享,分别存放在不同的数据库
●DM8企业版安装
●DM8版本
●开发版--不能作为商用,一年到期就会自动关闭
●标准版
●企业版
●安全版
●系统要求
●cpu架构要符合
●lscpu
●内存
●最小可用内存1G
●swap分区为物理内存的1.5倍
●free -m
●硬盘
●tmp分区要大于2g
●安装的时候需要用普通用户安装
●创建数据库及数据库实例管理
●创建数据库
●一个软件可以创建多个实例,用端口号来区分
●初始化参数很多设置了就没法修改
●簇大小:
●页大小:一行记录不能超过页大小的一半
●日志文件大小:重做日志大小
●字符集
●GB18030
●一个中文占用两个字节
●UTF-8
●一个中文占用三个字节
●细分参数
●空格填充模式---兼容oracle需要勾选
●工具
●disql---命令行
●在bin目录下可以被histroy看到,在tool目录下看不到更安全
●manger--图形化--管理工具
●查询key
●select * from V$LICENSE
●查看数据库版本
●select* from V$VERSION
●console--控制台工具
●冷备、还原、恢复
●dts-- 迁移工具
●monitor--性能监视工具
●dmserver--服务查看器
●启停数据库的
●管理数据库
●达梦数据库的模式
●普通模式normal
●能正常读写,单机
●主库模式primary
●对数据库对象生成redo日志,归档时发到备库
●备库模式standby
●数据库实例状态
●SHUTDOWN
●关闭状态
●MOUNT
●配置状态
●配置和开启数据库的归档状态
●OPEN
●正常状态
●SUSPEND
●挂起状态
●数据库异常
●归档日志空间满
●只读的状态
●状态可以互相切换,mount不能切换到suspend
●alter database 状态可以用于切换状态
●启动过程
●shutdown-open
●数据文件出了问题可以到mount,系统文件出问题了到不了
●DM8体系结构
●单进程多线程架构
●概览
●c/s架构
●数据库+实例构成
●数据库是磁盘上存放在DM数据库中数据的集合
●配置文件、控制文件、数据文件、重做日志文件最重要,这些文件损害没办法到
●实例
●一组正在运行的DM后台进程和线程以及一个大型的共享内存组成
●存储结构
●物理存储结构
●配置文件
●查看配置文件
●select * from v$dm_ini
●select PARA_NAME,PARA_VALUE,PARA_TYPE from v$dm_ini;
●修改参数---考点
●参数分为
●手动
●不能被动态修改,需要手动修改dm.ini参数重启后生效
●静态
●可以被动态修改,修改后重启数据库实例生效
●动态
●可以被动态修改,修改后即使生效
●隐含参数
●修改动态参数
●sp_set_para_value(参数类型,'参数名',参数值);
●参数类型:1 为动态参数,2 为静态参数
●sp_set_para_value(1,'DYN_SQL_CAN_CACHE',0);
●alter system set 'DYN_SQL_CAN_CACHE'= 1 BOTH;
●修改静态参数
●修改数据库的兼容模式为兼容 oracle 数据库
●sp_set_para_value(2,'COMPATIBLE_MODE',2);
●alter system set 'COMPATIBLE_MODE'= 2 SPFILE;
●通过console来修改
●控制文件
●数据文件
●重做日志文件redo
●记录的数据库的变化信息,循环写可覆盖的特点
●只能添加不能删除日志文件
●只能扩大不能缩小
●如果存放路径错了的话可以如下操作
●alter database mount;
●修改数据库到mount状态
●alter database rename logfile '路径' to '路径';
●alter database open;`
●修改数据库到open状态
●归档日志文件
●本质上对重做日志文件的备份
●事件日志文件
●在DM_HOME/log下
●逻辑存储结构
●表空间
●一个或多个数据文件组成
●由多个段组成
●dm数据库的数据对象都是存放在表空间里面的
●记录
●页
●数据库最小的存放单元
●页头控制信息
●数据
●空闲空间
●行偏移数组
●记录空闲空间的使用情况
●簇
●在建立数据库的时候配置,配置后不能修改
●一组页的集合
●创建表至少分配一簇
●段
●一组簇的集合
●内存结构
●共享内存池
●供其他缓冲区达到内存后扩展调用的
●Memory_target:共享内存的总大小。 0:表示不限制(目标大小)
●Memory_pool:共享内存池的大小(减少系统调用)200M
●Memory_extent_size:增量大小
●Memory_n_pools:共享内存池的个数。
●数据缓冲区-BUFFER
●从磁盘中读取数据页的镜像
●三条链来管理
●自由链
●未使用过的内存数据页
●LRU链---当不够用时会被淘汰上面的数据页
●存放已经使用过的内存数据页(包括未修改和已修改)
●脏链
●用于存放已经被修改过的内存数据页
●组成
●Normal
●普通数据页,缓冲区满的时候被淘汰
●Fast
●数据页、回滚页,常驻缓冲区
●Recycle
●临时表数据页,正常淘汰
●Keep
●普通数据页,很少淘汰
●dm里面不能指定recycle和fast缓冲区
●建议
●OLTP系统
●数据缓冲区为物理服务器内存的40%-60%
●OLAP系统
●数据缓冲区为物理服务器内存的60%-80%
●修改参数
●dm方法
●sp_set_para_value(2,'BUFFER',1000);
●兼容orcale方法
●alter system set 'BUFFER' = 1000 SPFILE;
●字典缓冲区
●缓存的数据字典的信息
●主要存的是一些数据字典的相关信息,如模式信息,表信息,列信息,触发器信息等
●参数DICT_BUF_SIZE
●SQL缓冲区
●缓存的SQL语句的保信息、执行计划、结果集
●避免sql的多次解析
PS:SQL绑定变量可以提高执行效率
●参数:CACHE_POOL_SIZE
●重做日志缓冲区
●日志是数据库和磁盘间的一层缓存
●参数RLOG_BUF_SIZE
●排序区
●每个会话排序就会分配内存
●HASH区
●使用hash时创建
●线程结构
●监听线程
●dm数据库没用单独启停监听
●IO线程
●需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘,检查点到来时,需要将所有脏数据页写入磁盘
●日志刷新线程
●主要用于事务提交或检查点时将日志缓冲区中的 REDO 日志写入到日志文件中。
●如果系统配置了实时归档,在 FLUSH 线程日志刷盘前,会直接将日志通过网络发送到实时备机。
●如果配置了本地归档或者远程同步归档,则生成归档任务,通过日志归档线程完成。
●日志归档线程
●在重做日志文件写满前将redo日志文件放到归档目录
●日志重做线程
●主要用于系统故障恢复,日志重做线程根据redo日志进行并行的故障恢复
●调度线程
● 检查系统级的时间触发器;
● 清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
● 动态缓冲区检查,根据需要动态扩展或动态收缩系统缓冲池;
● 自动执行检查点;
● 会话超时检测;
● 必要时执行数据更新页刷盘;
● 唤醒等待的工作线程
●工作线程
●内核的工作线程机制包括普通内核线程和用户态线程两种,普通内核线程的切换完全由操作系统决定,但操作系统无法了解进程内部的运行机制,只能采取通用的调度策略来管理各个内核线程;用户态线程在内核线程内部自主调度,有效减少上下文切换
●DMSQL
●sql结构化查询语句
●分类
●DQL:数据查询语句 select ... from ...where 组成的查询块
●DDL:数据定义语句 create table create view create index 等等
●DML:数据操作语句 insert update delete
●DCL:数据控制语句 用于授予或回收访问数据库的权限,控制数据库操作纵事务,对数据库进行监视等。commit Grant revoke commit rollback lock unlock 等
●书写规范
●SQL 语言大小写不敏感,字符串大小写敏感
●SQL 可以写在一行或者多行
●关键字不能被缩写也不能分行
●各子句一般要分行写
●使用缩进提高语句的可读性
●查询
●简单查询
●select 列名 from 表名
●例子
●单列查询:
●select employee_name from dmhr.EMPLOYEE;
●多列查询:
●select employee_name,DEPARTMENT_ID from dmhr.EMPLOYEE;
●全列查询:
●select * from dmhr.department;
●使用数学运算:
●select employee_name,salary,salary+1000 from dmhr.employee;
●注意减是+、(-)、*、
●对列起别名:
●select employee_name,salary,salary+1000 as "TOL" from dmhr.employee;
●删除重复行:
●select distinct department_id from dmhr.employee;
●连接符:
●把列与列,列与字符连接在一起
●用 ||表示
●可以用来合成列
●select department_id,employee_name||'工资是:'||salary from dmhr.employee;
●排序查询
●使用 Order by 子句排序
●ASC: 升序,默认
●DESC: 降序
●对于数字类型数据:升序从小到大,降序从大到小
●对于日期时间类型数据:升序从远到近,降序是从近到远
●举例
●先按照工资降序排序显示,再按照员工编号升序显示。
●select employee_id,employee_name,salary from dmhr.employee order by salary desc,employee_id asc;
●order by 3的话就是代表按第三列来排,也可以指定列名来排序
●过滤查询
●使用 WHERE 子句,将不满足条件的行过滤掉。
●SELECT *|{[DISTINCT] column|expression [alias],...} FROM table[WHERE condition(s)];
●WHERE 子句紧随 FROM 子句

●举例
●select employee_name,department_id from dmhr.EMPLOYEE where DEPARTMENT_ID=101;
●select employee_name,department_id,salary from dmhr.EMPLOYEE where salary>=19000;
●select employee_name,department_id,salary from dmhr.EMPLOYEE where salary BETWEEN 18000 and 19000;
●select employee_name,department_id,salary from dmhr.EMPLOYEE where DEPARTMENT_ID in (101,103);
●LIKE
●and
●or
●not
●单行函数
●大小写处理函数

●例子
●select lower('ALALALddjd') from dual;
●select upper('ALALALddjd') from dual;
●select email,UPPER(email) from dmhr.EMPLOYEE;
●字符处理函数

●数字函数

●分组函数----可以通过兼容模式来兼容其他类型数据库的写法
●聚合函数
●类型
●Count统计、计数
●Sum求和
●Avg平均值
●Max最大值
●Min最小值
●例子
●统计公司员工数量
●select count(employee_name) from dmhr.EMPLOYEE;
●select count(employee_name) from dmhr.EMPLOYEE;
●查询公司员工平均工资
●select avg(salary) from dmhr.EMPLOYEE;
●查看最高工资
●select max(salary) from dmhr.EMPLOYEE;
●查看最低工资
●select min(salary) from dmhr.EMPLOYEE;
●查询工资总数
●select sum(salary) from dmhr.EMPLOYEE;
●group by---除了聚合函数出现的列不需要跟在group by后面,其余都要
●语法:
●Select () from () where () group by ();
●统计每个部门员工数量
●select department_id,count() from dmhr.EMPLOYEE group by DEPARTMENT_ID;
●统计每个部门工资总和
●select department_id,sum(salary) from dmhr.EMPLOYEE group by DEPARTMENT_ID;
●Having
●语法:
●Select () from () where () group by () having ();
●例子
●查找部员工数超过20个人的部门
●select department_id,count(
) from dmhr.EMPLOYEE
●group by DEPARTMENT_ID
●having count()>20;
●查找部员工数超过20个人的部门,部门人数降序显示
●select department_id,count(
) from dmhr.EMPLOYEE
●group by DEPARTMENT_ID
●having count()>20
●order by count(
)desc;
●子查询
●当一个查询是另一个查询的条件时,称之为子查询
●子查询最常用于SELECT-SQL命令的WHERE子句中
●子查询可以嵌套子查询
●子查询类型可以分为单行子查询和多行子查询。
●单行子查询:子查询结果只返回一条数据。
●语法
●SELECT selectlist FROM table WHERE expr operator (SELECT select_list FROM table);

●例子
●查找和马学铭在一个部门的员工的姓名、工资、部门编号信息
●select DEPARTMENTID,employee_name,salary from dmhr.employee
●where department_id=(select department_id from dmhr.employee where employee_name='马学铭');
●多行子查询:子查询结果返回多条数据

●例子
●查找比105号部门工资都高的人
●select employee_name,salary from dmhr.employee
●where salary>all(select salary from dmhr.employee where department_id=105);
●表连接查询
●涉及到多表的查询--前提是多张表有相同的列
●内连接查询
●内连接查询只会返回两张表的交集
●语法
●SELECT table1.column,table2.column
●FROM table1
●[CROSSJOIN table2]|
●[NATURALJOIN table2]|
●[JOIN table2USING(column_name)]|
●[JOIN table2]
●ON(table1.column_name=table2.column_name)];
●交叉连接----对于大的表很容易耗尽数据库资源不建议用
●CROSSJOIN子句可以生成两个表的交叉乘积,这与两个表之间的笛卡尔乘积是相同的
●语法:
●SELECT table1.column,table2.column
●FROM table1
●CROSSJOIN table2;
●自然连接查询
●NATURALJOIN子句,会以两个表中具有相同名字的列为条件创建等值连接,在表中查询满足等值条件的数据,如果只是列名相同而数据类型不同,则会产生错误
●语法
●select e.EMPLOYEENAME,d.DEPARTMENT_NAME
●from dmhr.EMPLOYEEe NATURALJOIN dmhr.DEPARTMENTd;
●USING子句
●使用USING可以在有多个列满足条件时进行选择不要给选中的列中加上表名前缀或别名
●语法:
●SELECT table1.column,table2.column
●FROM table1
●JOIN table2 USING(column_name);
●on子句-代表连接条件
●语法
●SELECT table1.column,table2.column
●FROM table1
●JOIN table2
●ON(table1.column_name=table2.column_name);
●外连接查询
●运行在查询时保留一个表中的所有记录,即使另一个表中没有匹配的记录
●语法:
●SELECT table1.column,table2.column
●FROM table1
●[LEFT|RIGHT|FULL OUTERJOIN table2
●ON(table1.column_name=table2.column_name)];
●左外连接查询---保留dmhr.cityc表的所有记录即使dmhr.locationl表没有匹配(返回为null)
●select c.city_name,l.street_address from dmhr.cityc left join dmhr.locationl
●on c.city_id=l.city_id;
●右外连接查询--保留dmhr.locationl表的所有记录即使dmhr.cityc表没有匹配(返回为null)
●select c.city_name,l.street_address from dmhr.cityc right join dmhr.locationl
●on c.city_id=l.city_id;
●全连接查询--保留所有表的记录,没有匹配返回为null
●select c.city_name,l.street_address from dmhr.cityc full join dmhr.locationl
●on c.city_id=l.city_id;
●插入
●insert into 表名(列名) values 数值;
●修改
●update 表名(列名)set
●表空间管理
●管理表空间
●概念
●表空间是由一个或多个数据文件构成的,表空间是数据库容器,存放数据库中的数据对象(表,索引等)
●系统默认表空间
●System:数据字典和全局的系统数据
●Roll:存入了数据库运行过程中产生的回滚记录
●temp:临时表空间
●main:存放对象数据的表空间,创建对象的时候,不指定表空间,就是存放在该表空间中。大表空间下的main,是huge(列存表)表空间
●创建表空间
●注意表空间数据文件大小,大小最低值为4096页,比如页大小为8k,最小就为32m
●单个文件大小不要超过30g,不易于维护
●图形化的方式或命令
●创建test02表空间,数据文件初始大小为50M,数据文件开启自动扩展,每次扩展1M,最大可扩展至1G.
●create tablespace TEST02 datafile'/dm8/data/DAMENG/TEST02_01.DBF' size 50 autoextend on next 1 maxsize 1024 CACHE=NORMAL;
●表空间状态
●selectname,STATUS$fromv$tablespace;
●1、联机状态:status$=0
●2、脱机状态:stats$=1,表空间的数据不能访问。
●注意:system,roll,temp,不能offline;
●alter TABLESPACE MAIN OFFLINE;
●alter TABLESPACE MAIN ONLINE;
●维护表空间
●表空间不足
●Resize数据文件大小
●alter tablespace "TEST02" resize datafile 'TEST02_01.DBF' to 100;
●增加数据文件
●查看到表空间数据文件
●select filename,file_id,status,tablespace_name,bytes/1024/1024 from dbadatafiles;
●增加数据文件的命令:
●altert ablespace "TEST02" add datafile '/dm8/data/DAMENG/TEST02_02.DBF' size 50;
●更换表空间文件存储位置
●1)表空间offline;
●alter tablespace TEST02 offline;
●2)修改表空间存储位置
●alter tablespace "TEST02" rename datafile "TEST02_02.DBF" to "/home/dmdba/TEST02_02.DBF"
●3)表空间online;
●alter tablespace TEST02 online;
●修改表空间的缓冲区类型
●alter tablespace"TEST02" cache="KEEP";
●临时表空间
●临时表空间不足的时候
●修改临时表空间大小为100M:
●sp_set_para_value(2,'TEMP_SIZE',100);
●[dmdba@localhostbin]$./DmServiceDMSERVER restart
●roll表空间
●roll表空间不足
●alter tablespace ROLL resize datafile'/dm8/data/DAMENG/ROLL.DBF' TO 256;
●删除表空间
●删除表空间,不能删除已经使用的表空间,即使是该表空间处于脱机状态)
●Drop tablespace test02;
●管理数据文件
●管理重做日志文件
●用户管理
●用户概念
●在DM数据库中用户管理主要涉及到三块,用户,权限,角色
●权限:执行特定类型sql或是访问其他模式对象的权利
●系统权限:数据库对象的创建,删除,修改等等。DDL
●对象权限:对数据对象的数据的操作权限。DML
●分类
●预定义用户
●Sysdba:系统管理员
●Sys:不能用于用户登录,是系统内置用户
●Syssso:安全用户
●Sysauditor:审计用户
●Sysdbo:数据库对象操作员(安全版才有)
●企业版三权分立
●Sysdba:系统管理员
●Syssso:安全用户
●Sysauditor:审计用户
●安全版四权分立
●Sysdba:系统管理员
●Syssso:安全用户
●Sysauditor:审计用户
●Sysdbo:数据库对象操作员
●自定义用户
●权限
●系统权限

●select * from dbasys_privs;---查询被授予的系统权限
●对象权限

●select * from DBATABPRIVS;---查询被授予的对象权限
●查看权限

●角色
●角色:一组权限的集合
●角色可以被授予给角色,也可以被授予给用户
●创建角色
●create role ROLEM;
●grant"RESOURCE" to ROLEM;
●grant CREATETABLE,CREATEVIEW,CREATEINDEX to ROLEM;
●grant SELECT(hire_date) on DMHR.EMPLOYEE to ROLEM;
●grant select(employee_name) on dmhr.employee to ROLEM;
●grant SELECT on DMHR.DEPARTMENT to ROLEM;
●grant UPDATE(PHONE_NUM) on DMHR.EMPLOYEE to ROLEM;
●将rolem角色授予给TEST用户
●grant rolem to test;
●角色的禁用和启用1:启用0禁用
●SP_SET_ROLE('ROLEM',0);
●SP_SET_ROLE('ROLEM',1);
●删除角色:
●drop role ROLEM;
●查看系统用户
●图形化
●select USERNAME,ACCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE,DEFAULT_TABLESPACE from dbausers;
●规划用户
●名字:字母开头,az,0-9,$#_
●位置:对应的表空间
●密码:口令策略
●权限:系统权限、对象权限、角色
●资源限制
●创建用户
●在达梦中创建一个用户,达梦就会给你创建一个同名的模式
●举例
●要求
●创建用户TEST,密码Dameng123,默认表空间为TEST。该用户在登录失败5次后,账号锁定3分钟,用户在180天后自动过期。
●create tablespace TEST datafile '/dm8/data/DAMENG/TEST01.DBF' size 32 CACHE= NORMAL;
●create user TEST identified by "Dameng123" limit FAILED_LOGIN_ATTEMPS 5 PASSWORD_LIFE_TIME 180 PASSWORD_LOCK_TIME 3 default tablespace"TEST";
●拥有创建表、创建视图的权限,查看dmhr.employee.employee_name、dmhr.department。
●grant CREATE TABLE,CREATE VIEWtoTEST;
●授予TEST用户RESOURCE角色。
●grant "PUBLIC","RESOURCE","SOI" to TEST;
●查看用户
●查看TEST用户被授予的角色:
●select * from DBA_ROLE_PRIVS where GRANTEE='TEST';
●查看TEST用户被授予的系统权限:
●select * from DBA_SYS_PRIVS where GRANTEE='TEST';
●查看TEST用户被授予的对象权限:
●select * from DBA_TAB_PRIVS where GRANTEE='TEST';
●查看TEST用户被授予的对象权限-列级:
●select * from DBA_COL_PRIVS where GRANTEE='TEST';
●查看TEST用户的资源限制
●select
●a.USERNAME,a.LOCK_DATE,a.EXPIRY_DATE,a.DEFAULT_TABLESPACE,b.FAILED_NUM,b.LIFE_TIME,b.LOCK_TIME from dbausersa,SYSUSERS b where a.USERID=b.ID and a.USERNAME='TEST';
●修改用户
●修改用户密码
●alter user sysdba identified by Dameng123;
●修改用户的权限:
●revoke CREATEVIEW from TEST;
●移除权限只能到表不能到列,需要表权限移除,再重新授权其余列
●revoke SELECT on DMHR.EMPLOYEE from ROLEM;
●grant select(employee_name) on dmhr.employee to rolem;
●修改用户的状态:锁定和解锁用户
●alter user test ACCOUNT LOCK;
●删除用户
●Drop user test;
●关系图

●模式对象管理
●模式
●模式定义
●模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集。
●模式对象
●表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域。
●模式与用户之间的关系:
●当系统建立一个用户时,会自动生成一个对应同名的模式
●一个模式属于一个用户,一个用户可以有多个模式
●用户还可以建立其他模式(一个用户可以对多个模式)
●模式创建时指定用户后就没法修改
●切换模式
●set schema 模式
●删除模式
●表管理和约束管理
●表的分类
●用户表
●用户创建和维护的表的集合
●系统表
●由dm server创建和维护的表的集合
●包含数据库信息
●支持的表
●默认的表是索引组织表,支持堆表,临时表,分区表,外部表等。
●如何规划表
●1、命名:字母开头,a-z,0-9,$#
●2、数据类型:int char varchar date clob blob number等
●3、存储位置:自已规划的表空间,如果没有指定表空间,则会存到用户默认表空间中。
●4、约束(5大约束)非空约束,唯一约束,主键,外键,检查约束
●5、注释:comment。
●遵循3范式。
●创建表--可以通过图形化
●非空约束---列不能为空的数据
●例子-在test模式下建立test1表,约束是非空约束--注意建表时的模式
●creat table test.test1(
●id int not null
●)
●insert into test.test1(id) vules 1;----插入后要生效需要commit;提交事务
●唯一约束---数据不能重复,会忽视空值
●CREATETABLE"TEST"."TEST2"
●(
●"ID"INT,
●"NAME"VARCHAR(50),
●UNIQUE ("NAME")) STORAGE (ON"MAIN",CLUSTERBTR);
●(3)主键约束
●非空+唯一约束,一个表只能有一个主键约束
●CREATETABLE"TEST"."TEST3"
●(
●"ID"INTNOTNULL,
●"NAME"VARCHAR(50),
●NOT CLUSTER PRIMARY KEY("ID")) STORAGE (ON"TEST",CLUSTERBTR);
●(4)外键约束
●CREATETABLE"TEST"."TEST4"
●(
●"ID"INT,
●"NAME"VARCHAR(50),
●FOREIGNKEY("ID")REFERENCES"TEST"."TEST3"("ID"))STORAGE(ON"TEST",
●CLUSTERBTR);
●(5)检查约束
●CREATETABLE"TEST"."TEST5"
●(
●"ID"NUMBER(5,2),
●CHECK(ID>9))STORAGE(ON"TEST",CLUSTERBTR);
●查看约束信息
●select * from DBA_CONSTRAINTS where OWNER='TEST'
●启用禁用约束:---批量迁移数据的时候可以先禁用约束提高迁移效率
●alter table test.test5 DISABLE CONSTRAINT CONS134218887;
●alter table test.test5 enable CONSTRAINT CONS134218887;
●查看表的定义:
●sp_tabledef('TEST','TEST3');
●或者
●select DBMS_METADATA.get_ddl('TABLE','TEST3','TEST');
●查看test模式下的表
●select * from dbatables where OWNER='TEST';
●维护表
●增加列
●alter table TEST.TEST1 add column(NAMEVARCHAR(20));
●修改列
●alter table TEST.TEST1 modify "NAME" VARCHAR(30);
●重命名列
●alter table test.test1 RENAME COLUMN name to addr;
●重命名表
●alter table test1 rename to test6;
●删除列
●alter table TEST.TEST6 drop column"ADDR";
●导入数据
●批量数据导入:
●通过disql方式
●[dmdba@localhost~]$cd/dm8/bin
●[dmdba@localhostbin]$./disql sysdba/Dameng123
●SQL>start /home/dmdba/daoru.sql
●或者
●SQL>/home/dmdba/daoru.sql ●方法二: ●通过DM管理工具 ●/home/dmdba/daoru.sql
●删除数据
●不带条件删除,删除整个表的所有数据
●delete from test.test4;
●rollback;
●带条件删除指定的数据
●delete from test.test4 where id=1;
●delete from test.test3 where id=1;
●commit;
●delete和truncate区别
●delete是dml语句会写redo和undo,truncate是ddl语句,只会写少量redo,
●truncate效率更高
●Delete可以带条件删除指定数据,truncate只能对某个分区或者整个表的数据
●commit事务提交后就会永久写到数据库里面就无法回滚了
●视图
●从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。
●从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。
●分类
●简单视图
●对单表做查询,不包含集函数的sql
●语法---注意也是要在对应模式
●Create view() as select();----视图存在就会报错
●create or replace view() as select() from() where();---视图存在就会被替换
●修改视图里面的数据本质上还是修改基表里面的数据
●复杂视图
●关联两张表以上的或是包含集函数的sql
●物化视图
●索引
●定义
●索引是:一种数据库对象,通过指针加速查询速度,通过快速定位数据的方法,减少磁盘I/O,索引与表相互独立,服务器自动使用和维护索引。索引占空间。
●达梦支持的索引:二级索引,位图索引,唯一索引,复合索引,函数索引,分区索引,全文索引等。
●索引的作用:加快表的查询,增加数据库的查询性能。
●索引是一棵倒置的树,使用索引,就是对这棵树做遍历。
●达梦采用B+树的方式来存储索引。
●索引的创建规则
●什么情况下适合建索引
●1、经常查询的列
●2、连接条件列joinon
●3、谓词经常出现的列(where)
●4、查询是返回值的一小部分的数据。
●什么情况下不适合建索引:
●1、频繁更新的列
●2、不经常查询的列
●3、数据量不大的表
●4、列上有大量null
●创建索引---避免在业务高峰期,会占用大量io
●create index "DMHR".IND_NAME on DMHR.EMPLOYEE("EMPLOYEENAME");
●索引维护
●Alter index test.INDNAME rebuild;
●Alter index test.INDNAME rebuild online;
●删除索引
●Drop index test.IND_NAME;
●备份还原
●备份定义
●数据库备份就是制作数据库的“副本”
●防止数据库丢失数据
●在数据丢失后重建数据库
●分类
●完全备份:是指一个备份包含指定数据库或表空间的所有数据
●增量备份:是指在一次全备份或上一次增量备份后,每次的备份只需备份与前一次相比增加或者修改的部分。
●备份的方式:物理备份和逻辑备份
●备份的介质:磁盘,磁带,光盘
●物理备份
●冷备(脱机备份):dmap服务是打开的,数据库实例是关闭的。
●创建备份路径:
●[dmdba@localhosttool]$mkdir-p/dm8/backup
●1、控制台工具---
●完全备份:需要停止数据库服务---同时DmAP服务正常启动
●[dmdba@localhostbin]$./DmServiceDMSERVER stop
●[dmdba@localhostbin]$./DmAPServicerestart
●增量备份:需要停止数据库服务---同时DmAP服务正常启动
●使用DMRMAN工具来冷备---只能做冷备
●cd /dm8/bin/
●./dmrman

●热备:DMAP服务是打开的,数据库实例也是打开的,数据库是归档模式。
●开启归档模式
●查询数据库的归档模式:select name,arch_mode from v$database;
●N代表数据库没有开启归档模式
●Y代表数据库已经开启归档模式
●转换成mount模式,开启归档模式
●如果归档属性设置错误可以通过编辑dmarch.ini处理,编辑后重启数据库生效
●界面是无法删除的
●归档目录要为空,且权限正确
●修改备份路径需要用console或者直接编辑ini文件
●还原恢复
●整库的更新还原恢复
●还原数据库---从备份文件还原
●应用归档日志做恢复----通过归档日志恢复
●更新魔数magic----防止老旧的备份恢复新的数据库
●ps:生产环境后恢复更新魔数后要尽快再做一次备份
●还原表空间时不需要更新魔数
●完全恢复会恢复到最新的时间点,不完全恢复才能恢复其中某项修改
●逻辑备份与还原
●数据文件的导入导出
●数据库级别:导出或导入整个数据库中的所有对象
●用户:导出或导入一个或多个用户所拥有的所有对象
●模式:导出或导入一个或多个模式下的所有对象
●表级:导出或导入一个或多个指定表或表分区。
●作用
●数据库迁移
●历史数据归档
●重新组织表
●物理备份的辅助
●逻辑导出
●整库级别的导出
●/dm8/bin/dexp sysdba/Dameng123 DIRECTORY=/dm8/backupFILE=full.dmp FULL=Y LOG=full.log
●按用户级别导出
●/dm8/bin/dexp sysdba/Dameng123 DIRECTORY=/dm8/backup FILE=test.dmp OWNER=TEST LOG=test.log
●按模式级别导出
●/dm8/bin/dexp SYSDBA/Dameng123 DIRECTORY=/dm8/backup FILE=dmhr.dmp SCHEMAS=DMHR LOG=dmhr.log
●按表导出

●逻辑导入
●将DMHR模式下面的数据库对象导入到TEST模式
●[dmdba@localhostbin]$./dimp sysdba/Dameng123 directory=/dm8/backup file=dmhr.dmp remap_schema=dmhr:test log=imp_dmhr.log
●作业管理
●定时任务,定时去执行一组任务
●添加步骤
●1、创建代理环境
●2、新建作业
●3、新建作业步骤
●4、新建作业调度
●DM8开发
●达梦支持的语言:CC++javapythonphpperl.net
●linux环境中配置ODBC(以root来配置)
●步骤
●1、检查gcc包
●[root@localhost~]#rpm -aq|grepgcc
●2、解压安装包
●[root@localhostopt]#tar-xzvf unixODBC-2.3.0.tar.gz
●[root@localhostunixODBC-2.3.0]#cd unixODBC-2.3.0/
●3、配置ODBC
●[root@localhostunixODBC-2.3.0]#./configure
●4、编译安装ODBC
●[root@localhostunixODBC-2.3.0]#make&&makeinstall
●5、查看odbc版本
●[root@localhostunixODBC-2.3.0]#odbc_config--version
●6、查看odbc配置文件路径
●[root@localhostunixODBC-2.3.0]#odbcinst-j
●7、配置odbc.ini和odbcinst.ini-----注意这两个配置文件是在/usr/local/etc下而不是/etc下
●[root@localhostetc]#vi odbcinst.ini
●[root@localhostetc]#vi odbc.ini
●8、测试连接
●使用dmdba用户测试连接

●DCP
●达梦管理员任务
●数据库安装配置
●日常运维
●系统配置
●主机配置
●硬件型号
●操作系统补丁和版本
●uname -r
●cpu
●lscpu
●内存
●lsmem
●磁盘
●lsblk -l
●分区
●df -h
●共享内存参数
●kernel.shmmax
●kernel.shmmni
●kernel.shmall
●kernel.sem
●网络参数
●udp
●tcp
●时间同步设置
●防火墙策略
●系统重于数据库相关参数
●最大文件打开数
●用户最大进程数
●异步IO
●磁盘调度算法--io是数据库的瓶颈
●linux6
●单队列调度算法
●分类
●NOOP--适合闪存嵌入式
●谁快谁插入
●同步读,异步写可能会导致两次读中间插入大量的写,读性能就下降了
●这利于写不利于读
●BFQ--适合个人电脑
●为每一个进程分配一个队列用时间片进行调度
●有优先级用io地址进行排序尽可能减少磁盘的旋转来满足尽可能多的io请求
●同时也有缺陷,优先级的原因请求可能会被饿死
●Deadline---适合数据库
●在一个时间段类收集到相同的请求,然后一次性提交上去,到时间片后就让出资源
●避免请求被饿死
●linux7
●多队列调度算法
●mg_deadline---推荐使用
●可以用echo 修改/sys/block/sda/queue/scheduler
●内存过量使用
●资源使用监控
●工具--可以使用nmon工具比较全面
●磁盘可用空间
●df -h
●cpu使用率
●lscpu
●内存使用情况
●lsmem
●vmstat
●网络情况
●tcpdump
●看防火墙
●firewalld
●iptable
●selinux
● linux特殊安全策略
●设置值
●enforcing 报错
●promise警告
●disabled关闭
●默认是关闭的
●数据库配置
●数据库版本
●在/dm8/bin/.disql sysdba/密码 登录数据库
●select id_code;
●select * from v$instance;
●dm.ini配置文件
●参数配置
●动态参数和静态参数
●达梦日志文件
●在安装目录的log文件夹下
●数据文件
●落在磁盘上都是DBF文件
●可以通过./dmdbchk /dm8/data/DAMENG/dm.ini检查
●redo log文件
●记录的数据库的变化信息,循环写可覆盖的特点
●redo归档文件
●不会覆盖,会不停的增长,需要定期清理
●用于故障后恢复到故障发生的前一刻
●控制文件
●orcale控制文件是多路径
●dm控制文件只有一个,但是会定期备份
●表空间
●数据的存放路径
●性能监控和优化
●数据库优化法制
●1.减少磁盘访问
●尽可能多使用内存
●做sql优化,实例优化
●2.减少网络传输
●返回更少数据量
●减少交互次数---客户端设计缓存
●3.减少cpu及内存开销
●4.增加资源
●备份还原
●策略需求
●可丢失数据量
●恢复数据库允许最长时间
●恢复所花费的成本
●备份期间是否关闭系统
●替换损害硬件所需时间
●备份方式
●完全备份和增量备份
●联机备份和脱机备份
●物理备份和逻辑备份
●归档策略
●按备份需求来,并及时清理过期备份文件
●容灾方案
●备份还原、DSC、DW
●两地三中心DCS+DW
●架构设计
●安全管理
●表管理
●orcale默认是堆表,达梦默认是索引组织表
●区别
●索引组织表存放慢查询快
●堆表存放快查询慢
●可以通过命令查询
●创建表注意参数
●正式环境建议页大小选32最大,因为整条数据的长度不能大于页的一半,即默认不超过16k
●如果需要大于页的一半需要开启超长记录
●表分区

●分区表管理
●把一张大表分成多张小表,逻辑上是一张完整的表
●如果表未分区数据量增大查询速度就会变慢,性能就会下降
●策略分而划小
●优点
●查询的时候只扫描当前分区,提高查询数据
●增强可用性
●维护方便,数据损坏只用修复对应分区
●均衡io,可以不同分区映射到不同磁盘
●水平分区
●按记录条目分区,按行
●分类
●范围分区
●功能
●按照数据范围进行分区
●特点
●属于相同范围的数据存储在同一张表
●适用场景
●数据具有区间特征
●年龄
●日期
●哈希分区
●功能
●按照数据进行散列分区
●特点
●数据分布比较均衡
●使用场景
●数据没有明显规律和变化
●列表分区
●功能
●按照特定的数值进行分区
●特点
●分区列数据相同的记录存储在同一张子表中
●使用场景
●数据按照确定值进行分布,例如地理位置、单位、学校

●组合分区
●功能
●按上述三种分区进行组合
●特点
●数据分布形式多样
●使用场景
●一次分区不能对数据进行分类
●例子
●CREATE TABLE "TEST"."SALE_SUM"
●(
●"SALE_ID" INT,
●"SALE_NAME" VARCHAR(20),
●"SALE_DATE" DATE,
●"CITY" CHAR(10))
●PARTITION BY LIST("CITY")
●SUBPARTITION BY RANGE("SALE_DATE") SUBPARTITION TEMPLATE
●(
●SUBPARTITION "P1_1" VALUES LESS THAN(DATE'2012-04-01') STORAGE(ON "TEST")
●),
●SUBPARTITION BY HASH("SALE_ID", "SALE_NAME", "SALE_DATE", "CITY") SUBPARTITION TEMPLATE
●(
●SUBPARTITION "PART_1" STORAGE(ON "TEST")
●)
●(
●PARTITION "P1" VALUES('哈尔滨 ','上海 ','天津 ','西安 ') STORAGE(ON "TEST", CLUSTERBTR) (
●SUBPARTITION "P1_1" VALUES LESS THAN(DATE'2012-04-01') STORAGE(ON "TEST", CLUSTERBTR) (
●SUBPARTITION "P1_1_1" STORAGE(ON "TEST", CLUSTERBTR)
●)
●)
●,
●PARTITION "P2" VALUES('六盘水 ') STORAGE(ON "TEST", CLUSTERBTR)
●) STORAGE(HASHPARTMAP(1), ON "TEST", CLUSTERBTR) ;
●间隔函数-以时间为间隔
●作用
●让系统自动扩展分区
●例子
●create table test.t10_interval_year
●(employee_id int,employee_name varchar(20),bir date)
●partition by range(bir)
● interval(numtoyminterval(1,'year'))
● (
● partition p1990 values less than(to_date('1991-01-01','yyyy-mm-dd')),
● partition p1991 values less than(to_date('1992-01-01','yyyy-mm-dd'))
● );
●支持功能

●DDL

●创建分区表
●创建用户-模式-表空间-表-设置表分区
●创建好了后可以在图形界面的子表看到分区表
●练习创建各种分区
●分区表的维护
●增加分区
●ALTER TABLE TEST.T1 add partition pn values less than(maxvalue);
●删除分区
●Alter table test.t1 drop partition pn;
●合并分区
●alter table test.t1 merge partitions p2,p3 into partition p2_3;
●拆分分区
●alter table test.t1 split partition P2_3 at(200) into (partition p2, partition p3);
●交互分区
●ALTER TABLE TEST.T1 EXCHANGE PARTITION P2 WITH TABLE TEST.T10;
●总结

●外部表管理
●外部表指的是不存在在数据库中的表,通过提供描述外部表的元数据,把操作系统文件当作一个只读的数据库表来进行访问。
●创建外部表
●创建文件
●编写控制文件
●LOAD DATA
●INFILE 'a.txt'
●INTO TABLE TEST.EXT
●FIELDS ','
●创建目录
●create directory extdir as '/dm8/ext'
●创建外部表
●create external tablet test.ext(id int, name varchar(20)) from default directory extdir location('a.ctl')
●注意事项
●1、<表名>指定了所在建立的外部表名。
●2、外部表的表名最大长度为 128 字符。
●3、所建外部表至少包含一列,一张外部基表中至多可以包含 2048列。
●4、外部表不能存大字段。
●5、外部表不能存在任何约束条件。
●6、外部表不能为临时表,不能建立分区。
●7、外部表不能创建任何索引。
●8、不允许对外部表进行增删改数据操作,不允许 truncate 外部表操作
●临时表管理
●定义
●临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别。它只能存储在临时表空间,而非用户的表空间。临时表是会话或事务级别的,只对当前会话或事务可见。每个会话只能查看和修改自己的数据
●功能
●1、在临时表中,可以像普通的永久表一样更新,插入和删除数据。
●2、临时表的 dml 操作产生较少的 redo 日志。
●3、临时表支持建索引,以提高查询性能。
●4、在一个会话或是事务结束后,数据将自动从临时表中删除。
●5、不同用户访问相同的临时表,每个用户只能看到自己数据。
●6、临时表的表结构在数据删除后仍然存在的。
●7、临时表的权限管理和普通表一致。
●类型
●会话级的临时表
●事务级的临时表
●注意
●Commit 时默认情况下是事务级的。
●Oracle 有临时表空间组,包括多个临时表空间,可以手动创建临时表空间。
●DM:创建数据库的时候,就创建了临时表空间,不能手动创建临时表空间
●执行commit就结束会话会清空事务级临时表
●参数
●USE_FTTS: 0
●产生的临时数据的存放格式,0:用临时表空间的数据页来存放,1:用临时文件存放。
●TEMP_SIZE:10
●默认创建的临时表空间大小,以 M 为单位。有效值范围(10-1048576M)
●Temp_SPACE_LIMIT:0
●临 时 表 空 间 大 小 的 上 限 。
●temp_space_limit 一定要大于等于 temp_size.
●TEMP_PATH :临时表空间路径。Dm.ini 中设置
●Enable_tmp_tab_rollback:1
●临时表操作是否生成回滚记录,0:不生成,1 生成。
●序列
●序列是一个数据库实体,通过它多个用户可以产生唯一整数值,可以用序列来自动地生成主关键字值。
●功能
●获取下一个序列
●INSERT INTO test.T1(ID) VALUES (test.s1.nextval);
●查看当前序列
●SELECT test.s1.currval from DUAL;
●设置序列最大值
●alter sequence test.s1 maxvalue 30;
●删除序列
●DROP sequence test.s1
●同义词
●定义
●同义词:表或视图、序列、函数、存储过程的别名,为安全考虑,同义词分为公共同义词,普通同义词
●分类
●公共同义词:所有用户都可以使用的,使用的时候不需要加任何模式名。达梦用的数据字典、动态性能视图都 sys 的公共同义词。SYS 是达梦的内置管理账号,不能用于登录数据库
●普通同义词:某个特定用户才可以使用的,使用的时候要加模式名。
●注意
●""如果有小写就必须要用
●''表示字符串
●创建
●普通同义词
●CREATE SYNONYM "TEST"."SY1" FOR "TEST"."S1";
●公共同义词
●CREATE PUBLIC SYNONYM "SY3" FOR "TEST"."SALES_SUM";
●物化视图
●数据要单独存储,占用磁用空间,规划表空间。物化视图的数据来自于基表,基表发生变化,物化视图可以根据自己的更新方式来进行数据更新
●主要作用是用于数仓,加快查询速度
●创建手动刷新的物化视图
●create materialized view TEST.T1_VIEW
●as
●SELECT * from test.T1 WHERE ID<100;
●刷新
●refresh materialized view TEST.T1_VIEW;
●创建自动刷新的物化视图
●创建物化视图日志
●create materialized view log on test.t1;
●创建完全自动更新的物化视图
●create materialized view test.mv3
●refresh complete on commit
●as
●select * from test.t1;
●创建快速更新的物化视图
●create materialized view test.mv3
●refresh fast on commit
●as
●select * from test.t1;
●索引
●统计信息
●统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。比如,表的行数,块数,平均每行的大小,索引的高度、叶子节点数,索引字段的行数,不同值的大小等,都属于统计信息
●统计信息是优化器的依据,可以帮助优化器精确估算成本,对执行计划的选择起到了重要作用。
●达梦的统计信息为分三类:表统计信息,列统计信息,索引信息。
●DBMS_STATS 包:收集统计信息,删除统计信息,查看统计信息。
●统计信息在生成的过程中分为三个步骤:
●1、确定采样的数据(对象,分析数据,表,列,索引)
●2、确定采样率:采样率和数据量成反比。
●3、生成直方图:(频率直方图和等高直方图)
●统计信息对 CBO 的影响非常重大,因此我们要及时更新统计信息。
●索引的定义
●达梦默认的是索引组织表,当建表语句未指定聚簇索引键,DM 的默认的聚簇索引是 rowid,即记录默认以 rowid 在表中排序。
●注意
●索引也是占存储空间,所以我们需要将索引存储在专属的表空间中。
●达梦索引采用的是 B+树(位图索引和全文索引除外)。
●三种方式
●1、cluster primary key
●2、Cluster key
●3、Cluster unique key
●索引分类
●1、聚簇索引:每一个索引组织表有且只有一个聚簇索引
●2、唯一索引:保证表上索引列不会有两行数据具有相同的值.
●和主键的区别
●1、主键是一个约束,唯一索引是一种索引
●2、主键创建后包含唯一索引,唯一索引不一定是主键
●3、一个表只能有一个主键,但是可以有多个唯一索引。
●4、主键不能为 null, 唯一索引可以有多个 null 值
●5、主键可以作为外键,唯一索引不可以。
●3、函数索引:包含函数表达式的预先计算的值。
●包含函数或表达式的预先计算值,适用于频繁对某列进行函数操作的查询。如对某表的姓名列常查大写姓名,可创建基于 upper(姓名) 的函数索引。
●单行函数
●字符:initcap lower upper lpad trim replace instr substr
●数值运算:round trunc mod
●日期: add_months month_between, next_day, last_day
●功能说明

●语句
●create INDEX TEST.ind_emp ON test.t1(upper(email));
●4、位图索引:列上的值的类型少
●(1)用一个位来表示一个索引的键值,节省了存储空间
●(2)对于 and ,or 或=的查询条件,位图索引查询效率高,善于处理0,1 数据。
●适合
●列上数值类型少的情况,比如说性别。位图索引适合 OLAP 环境。
●不合适:
●1、频繁进行插入或更新的表。
●2、列值很多,可选范围很大的表。
●对于 OLTP 环境位图索引基本上不适用的。
●语句
●CREATE BITMAP INDEX TEST.T14_IND ON TEST.T14(SEX);
●5、复合索引:表中两个或两个以上的列一起建立索引
●含有多个索引键,适用于多列条件查询,但创建时列顺序很重要,应将选择性高的列前置,且查询条件的列顺序也应尽量与索引列顺序一致
●语句
●create index test.emp_ind2 on test.emp(employee_id,employee_name);
●6、全文索引:在表中文本列上建索引.
●全文检索技术是智能信息管理的关键技术之一,其主要目的就是实现对大容量的非结构化数据的快速查找,DM 实现了全文检索功能,并将其作为 DM 服务器的一个较独立的组件,提供更加准确的全文检索功能,较好地解决了模糊查询方式带来的问题
●DM 中,全文索引必须在基表定义,而不能在系统表,视图,临时表,列存表,外部表上定义,同一个列只能创建一个全文索引,在创建全文索引的时候,用户可以为分词器定义分词参数,即控制分词器的数量。
●创建会默认创四张表
●I 表:CTI$INDEX_NAME$I 用来保存分词结果第 62 页 共 134 页
●P 表:CTI$INDEX_NAME$P 用来保存基表发生的增量数据变化
●N 表:CTI$INDEX_NAME$N用来保存原表记录 rowid 和新记录条记录 DOCID 的映射关系。
●D 表 :CTI$INDEX_NAME$D 保存了所有的将被删除的 docid.
●语句
●创建
●create context index cti_address on person .address(address1) lexer default_lexer;
●lexer参数
●CHINESE_LEXER --中文最少分词
●CHINESE_VGRAM_LEXER --机械双字分词
●CHINESE_FP_LEXER 中文最多分词
●ENGLISH_LEXER --英文分词
●DEFAULT_LEXER --默认分词,中文英文最少分词
●更新索引
●alter context index cti_address on person.address rebuild;
●7、分区索引:
●如果表是分区表,该表上创建的索引就是分区索引,非堆表每个分区一个索引(局部索引),堆表可以创建全局索引,也可以创建局部索引,在创建全局索引的时候指定 global 关键字。
●索引维护
●重建索引
●Alter index test.ind_emp rebuild online;
●新建索引,重建索引,删除索引,收集统计信息,更新统计信息,一定不在要业务高峰去做,要在业务低谷进行。
●执行计划
●一条 sql 语句在 DM 数据库中执行的过程或访问路径的描述,通过explain 命令来查看
●一个执行计划由若干计划节点组成:
●每一个计划节点包含操作符(cscn2, slct2..)和他的代价([1,856,280])等信息,代价由一个三元组组成[代价,记录行数,每行的字节数]执行过程为:控制流从上向下传递,数据流从下向上传递。
●达梦DEM管理
●提供一个通过 WEB 界面来监控,管理,维护 DM 数据库的集中式管理平台,可以从任何可以访问 web 应用的位置通过 DEM 来对 DM数据库进行各种管理和监控
●特点
●集中式管理
●功能全面
●高度可扩展
●主动监控
●安全可靠
●架构

●安全管理
●面临的风险

●安全标准

●安全架构

●自主访问控制
●系统权限
●权限说明
●CREATE TABLE 在自己的模式中创建表的权限
●CREATE VIEW 在自己的模式中创建视图的权限
●CREATE USER 创建用户的权限
●CREATE TRIGGER 在自己的模式中创建触发器的权限
●ALTER USER 修改用户的权限
●LTER DATABASE 修改数据库的权限
●CREATE PROCEDURE 在自己模式中创建存储程序的权限
●注意
●需要说明的是,表、视图、触发器、存储程序等对象为模式对象,在默认情况下对这些对象的操作都是在当前用户自己的模式下进行的。如果要在其他用户的模式下操作这些类型的对象,需要具有相应的 ANY 权限
●对象权限
●对象权限主要是对数据库对象中的数据的访问权限,主要用来授予需要对某个数据库对象的数据进行操纵的数据库普通用户。
●常用权限

●账号和密码安全

●锁定用户:Alter user test account lock;
●解锁用户:Alter user test account unlock;
●角色管理
●一组权限的集合
●审计分析
●注意审计开启比较消耗性能,默认不长时间开启
●审计分类
● 系统审计
●系统的启动与关闭,此级别的审计记录在任何情况下都会强制产生,无法也无需由用户进行设置
●语句审计 DDL (粗粒度)
●导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句。
●对象审计(DML 细粒度)
●审计作用在特殊对象上的语句。如 PERSON 表上的 INSERT,delete,update 语句。
●开关审计
●开启审计
●使用disql进入sysauditor
●在 DM 系统中,启用审计功能需要两步:
●1、打开审计开关(默认审计开关是关闭)。
●2、对审计对象设置审计条件,否则不记录审计。
●审计开关不同版本区别
●DM7:SP_SET_PARA_VALUES(1,‘ENABLE_AUDIT’,1)
●DM8:SP_SET_ENABLE_AUDIT(PARAM INT);
●0 :关闭审计
●1:打开普通审计
●2:打开普通审计和实时审计,缺省值为 0.
●语句级别的审计--对用户
●SP_audit_stmt(type,username,whenever)
●TYPE:审计对象(表,视图,存储过程)
●Username:用户,null 表示不限制
●Whenever:审计时机
● ALL: 不管成功或是失败都审计
●SUCCESSFUL:操作成功的时候审计
● FAIL:操作失败的时候审计
●对象审计
●Sp_audit_object(type,username,schema_name,object_name,column_name, whenever)
●type
●操作
●username
●用户
●schema_name
●模式
●object_name
●表
●column_name
●列
●whenever
● ALL: 不管成功或是失败都审计
●SUCCESSFUL:操作成功的时候审计
● FAIL:操作失败的时候审计
●注意
●参数大小写敏感
●关闭审计
●关系统审计
●Sp_set_enable_audit(0);
●关语句审计
●Sp_noaudit_stmt(type,username,whenever)
●关对象审计
●Sp_noaudit_object(‘INSERT’,’TEST’,’TEST’,’EMP’,’SALARY’,’ALL);
●注意
●只要审计功能被启用,系统级的审计记录就会产生。
●在进行数据库审计的时候,审计员之间没有区别,可以审计所有数据库对象,也可以取消其他审计员的审计设置。
●语句级审计不针对特定的对象,只针对用户和对象类型对象级审计针对指定的用户与指定的对象进行审计。
●在设置审计时,审计选项不区分包含关系,审计时机不区分包含关系,都可以设置。
●如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。
●DM 提供图形化的审计分析工具 /dm8/tool/analyzer. 和命令行工具/dm8/bin/Dmaudtool

●查看审计记录
●select * from v$AUDITRECORDS;
●数据库安全基线
●数据库的监控
●方法
●1、使用 DEM 来监控
●2、使用./monitor 监控管理工具来监控。
●3、动态性能视图
●死锁监控
●封锁机制
●锁模式:指定并发用户如何访问锁定资源。
●事务特性:原子性、一致性、隔离性、持久性
●不同的锁模式
●共享锁
●排他锁
●意向共享锁
●意向排他锁
●事务隔离级别
●读未提交
●读提交
●可重复读
●串行化
●达梦支持三种读未提交,读提交和串行化
●事务阻塞和死锁
●阻塞
●当一个事务需要访问某个资源,而该资源正被另一个事务占用时,这个事务就会被阻塞,处于等待状态,直到所请求的资源被释放
●死锁
●两个或多个事务相互等待对方所占用的资源,从而导致所有事务都无法继续执行下去,系统处于一种僵持状态
●数据库会默认自动解决死锁,将一个事务断掉
●资源监控
●表空间监控
●数据迁移
●流程
●需求分析和规划:
●了解迁移目的、原因、目标、环境、范围和时间。
●制定详细的迁移计划,包括时间、步骤、顺序、资源规划、风险评估。
●确定迁移方案:
●选择备份恢复、SQL脚本或工具迁移。
●确定使用的迁移工具和技术方案。
●应急回退方案:
●制定应急回退方案,以防迁移过程中出现问题。
●确保在出现问题时能够快速回退到旧系统
●风险评估和测试:
●进行迁移前的风险评估。
●执行迁移测试,确保没有问题后进行正式迁移。
●兼容性和性能调优:
●设置兼容性参数,确保新旧数据库的兼容性。
●进行性能测试和调优,确保新系统的性能满足要求。
●数据迁移实施:
●按照制定的方案进行数据迁移。
●可能需要分批实施,特别是使用DTS等工具时。
●系统切换:
●在数据迁移完成后,进行系统切换。
●确保新旧系统的平滑过渡。
●验证和验收:
●验证迁移后的数据完整性和一致性。
●检查应用系统的正常运行。
●重建索引、更新统计信息、重建权限、备份整理对象脚本。
●收尾工作:
●进行最后的检查和优化。
●完成所有文档和报告的整理。
●应用迁移:
●数据迁移完成后,应用系统也需要迁移到新环境。
●确保应用系统在新数据库上的正常运行。
●迁移工具的使用
●使用DTS、DSP、fast load等工具进行数据迁移。
●根据具体需求选择合适的工具和方法。
●迁移orcale
●迁移mysql
●快速数据加载
●dmfld(DM Fast Loader)是 DM 提供的快速数据装载命令行工具。用户通过使用 dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。
●系统架构
●默认架构--推荐

●新架构---在资源不足的情况下使用
●mldrp 和 dmldrc 只支持快速载入功能,不支持快速载出功能。

●过程
●编辑控制文件
●LOAD DATA
●INFILE '/dm8/fldr/fldrtest.txt'
●INTO TABLE TEST.FLDRTEST
●FIELDS ','
●创建表
●create table test.fldrtest(id int,name varcher(20),bir date);
●快速加载数据
●./dmfldr sysdba/dameng123 control='/dm8/fldr/fldrtest.ctl'
●注意control文件路径要前后加'做转义
●注意
●导入的时候,数据要满足列数的要求,不然会报错
●dmfldr 的使用存在以下一些限制:
●不支持向临时表、外部表装载数据
●不支持向系统表装载数据
●不支持向带有位图索引的表装载数据
●不支持向带有函数索引的表装载数据
●不支持向带有全文索引的表装载数据
●不支持向带有全局索引的表装载数据
●不支持向 DCP 代理装载数据
●Dblink
●定义
●在达梦数据库(DM)中,dblink(数据库链接)是一种用于跨数据库访问的机制。它允许在一个数据库中访问和操作其他数据库中的数据,而这些数据库可以是达梦数据库,也可以是其他类型的关系型数据库(如 Oracle、MySQL 等)
●配置同步DBLINK----DM to DM
●前置条件
●两台数据库服务器 A(192.168.1.30 DM01), B (192.168.1.20 DM02),
●目前只支持同平台,不支持跨平台建外部连接,两个服务器都安装了
●达梦数据库,并且 a 和 b 实例名不能一样。
●方式一
●操作步骤
●1)服务器 B 上创建 DBLINK 访问服务器 A 表中的数据。
●2)分别在这两台服务器上修改 dm.ini 中的 mal_ini =1, 而且配置dmmal.ini。 并且 a 和 b 实例名不能一样。
●3)注意,两台主机的 dmmal.ini 文件相同,配置成功后分别重启dmserver
●方式二 DPI通道
●DPI 方式不需要 MAL 系统支持,也不需要重启实例。
●配置异构DBLINK
●两 台 数 据 库 服 务 器 A(DM 192.168.1.30 DMSERVER) B( oracle 192.168.1.68),创建 DM 到 oracle 外部连接,并使用外部连接对远程oralce 库做增删改查操作。
●用法
●1.把 dblink*.zip 复制到/lib64 目录下。
●2. 解压:unzip dblink*.zip
●3. 运行:cd /lib64; ./run.sh
●4.cd /lib64;
●5.ln -s libnsl-2.17.so libnsl.so.1dblink 环境即部署成功了,在 DM8 上创建 dblink 吧。
●create link "SYSDBA"."DMTOORCL" connect 'ORACLE' with "SYSTEM"
●identified by "" using '192.168.1.68/orcl';
●select * from dm02@DMTOORCL;
●注意
●只能做增删改查
●性能优化
●参与优化的人员
●数据库管理员
●应用程序架构师
●应用程序设计人员
●系统管理员
●存储管理员
●DBA优化内容
●应用程序
●SQL语句性能
●更改管理
●实例优化
●内存
●数据库结构
●实例配置
●操作系统交互
●I/O交换 参数
●优化方法
●基本工具
●动态性能视图
●统计信息
●DEM报告
●AWR报告
●DBA脚本
●优化步骤
●自上而下的优化
●优化应用程序代码之前先优化设计
●优化实例之前先优化代码
●对可以带来最大潜在好处的方面进行优化并确定
●最长的等待
●最大的服务时间
●达到目标时停止优化
●优化分类
●数据库结构和实例优化
●SQL优化
●优化基础
●内存管理
●架构

●内存池
●共享内存池--为其他内存池提供服务
●Memory_target:指定单个共享内存池的目标大小
●Memory_pool: 指定单个共享内存池的初始大小
●Memory_extent_size:提定单个共享内存池的增量大小
●Memory_N_pool:指定多个共享内存池
●私有池
●私有池(会话内存池,虚拟机内存池、排序缓冲区、哈希缓冲区),
●在运行时才会分配,使用完了,就立即回收
●缓冲区
●数据缓冲区-BUFFER
●从磁盘中读取数据页的镜像
●三条链来管理
●自由链
●未使用过的内存数据页
●LRU链---当不够用时会被淘汰上面的数据页
●存放已经使用过的内存数据页(包括未修改和已修改)
●脏链
●用于存放已经被修改过的内存数据页
●组成
●Normal
●普通数据页,缓冲区满的时候被淘汰
●Fast
●数据页、回滚页,常驻缓冲区
●Recycle
●临时表数据页,正常淘汰
●Keep
●普通数据页,很少淘汰
●dm里面不能指定recycle和fast缓冲区
●建议
●OLTP系统
●数据缓冲区为物理服务器内存的40%-60%
●OLAP系统
●数据缓冲区为物理服务器内存的60%-80%
●修改参数
●dm方法
●sp_set_para_value(2,'BUFFER',1000);
●兼容orcale方法
●alter system set 'BUFFER' = 1000 SPFILE;
●字典缓冲区
●缓存的数据字典的信息
●主要存的是一些数据字典的相关信息,如模式信息,表信息,列信息,触发器信息等
●参数DICT_BUF_SIZE
●SQL缓冲区
●缓存的SQL语句的保信息、执行计划、结果集
●避免sql的多次解析
PS:SQL绑定变量可以提高执行效率
●参数:CACHE_POOL_SIZE
●重做日志缓冲区
●日志是数据库和磁盘间的一层缓存
●参数RLOG_BUF_SIZE
●排序区
●每个会话排序就会分配内存
●HASH区
●使用hash时创建
●创建流程
●数据缓冲区
●服务器启动后,向操作系统申请四块大小固定的内存做为四个分区,服务器关闭前向操作系统归还内存。数据缓冲区不会拓展
●Normal: 普通数据页,缓冲区满进行淘汰。
●Fast:数据页,回滚页,常驻缓冲区
●Recycle: 临时表数据页,正常淘汰
●Keep:普通数据页,很少淘汰
●日志缓冲区
●建时从共享内存池分配内存,服务器关闭前归还内存,日志缓冲区拓展时直接向共享内存池申请
●运行时内存池:在需要使用的时候被创建,使用完毕立即销毁,(会话内存池,虚拟机内存池,排序区和哈希区)
●后台线程管理
●监听线程
●dm数据库没用单独启停监听
●IO线程
●需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘,检查点到来时,需要将所有脏数据页写入磁盘
●日志刷新线程
●主要用于事务提交或检查点时将日志缓冲区中的 REDO 日志写入到日志文件中。
●如果系统配置了实时归档,在 FLUSH 线程日志刷盘前,会直接将日志通过网络发送到实时备机。
●如果配置了本地归档或者远程同步归档,则生成归档任务,通过日志归档线程完成。
●日志归档线程
●在重做日志文件写满前将redo日志文件放到归档目录
●日志重做线程
●主要用于系统故障恢复,日志重做线程根据redo日志进行并行的故障恢复
●调度线程
● 检查系统级的时间触发器;
● 清理 SQL 缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
● 动态缓冲区检查,根据需要动态扩展或动态收缩系统缓冲池;
● 自动执行检查点;
● 会话超时检测;
● 必要时执行数据更新页刷盘;
● 唤醒等待的工作线程
●工作线程
●内核的工作线程机制包括普通内核线程和用户态线程两种,普通内核线程的切换完全由操作系统决定,但操作系统无法了解进程内部的运行机制,只能采取通用的调度策略来管理各个内核线程;用户态线程在内核线程内部自主调度,有效减少上下文切换
●sql优化
●处理流程
●生成SQL日志
●日志分析汇总
●确定目标SQL

●优化SQL
●Sql 编写规则:
●1、统一编写风格
●Select * from test;
●SELECT * FROM TEST;
●SETECT * FROM test;
●2、使用绑定变量
●Select * from test where id=?
●Select * from test where id=2 ....10000
●3、避免排序 sort,索引来代替
●4、减少表的重复扫描。
●5、用 exist 替代 in---IN会全部遍历一遍
●Select * from test.t1 where id in (1,3,5,7,8,9);
●Select * from test.t1 where id exist (1,3,5,7,8,9);
●6、避免普通索引列上有计算。
●Select * from tab1 where c-1=123;
●Select * from tab1 where c=123+1;
●7、避免隐式转换
●Bri (date) bri=’1990-01-01’;
●Bri = to_date(‘1990-01-01,’yyyy-mm-dd’);
●to_date()
●to_number()
●to_char() To_date(bri)= to_date
●8、尽量避免使用 select *
●9、多表连接的时候,必须使用别名来引用列,记录数大于 1000 万时,关联的大表尽量不超过 4 个。
●10、嵌套循环连接查询需要注意地方:选择小表作为驱动表,统计信息尽量准确,保证优化器选对驱动表。适当使用索引。
●11、hash join 特点Hash 连接比较消耗内存
●Hj_buf_golbal_size hj_buf_size hj_blk_size.
●12、对于大批量 dml 操作分段提交,防止大事务。第 124 页 共 134 页
●13、尽量使用缓存。
●14、Delete update 加 where。
●Select ename from emp e where exists (select ‘x’ from dept where dept_no=e.dept_no and dept_cat =’A’)
●Select ename from dept d, emp e where e.dept_no = d.dept_no and dept_cat=’A’
●影响sql执行计划的因素
●参数配置、统计信息、数据分布、索引、选择率,连接顺序、连接方式。Cpu,内存,数据类型、锁等待,网络延迟,结果集大小。
●创建索引的原则:
●1、根据索引查询只返回很少一部分行
●2、索引作为一个较瘦版本的表
●3、组合索引列的顺序合理安排,最优化把等值匹配的列放最前面,范围匹配的放在后面。把过滤性好的列放前面。查询时组合索引只能利用一个非等值字段。
●不走索引:
●1、条件列不是索引首列。
●2、条件列上有函数或计算。
●3、存在隐式类型转换。
●4、如果走索引会更慢。
●5、没有更新统计信息。
●优化工具
●ET工具
●ET 是 DM 自带的分析工具,能统计 SQL 每个操作符的时间花费,从而定位到有性能问题的操作,指导用户去优化。
●NI 参数 ENABLE_MONITOR=1, MONITOR_SQL_EXEC=1 时,ET 才能使用
●使用举例
●SP_SET_PARA_VALUE(1,'ENABLE_MONITOR’,1)
●SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC’,1)

●AWR报告--记录某个时间内的数据库的快照
●选取时间
●选最堵的时间段
●步骤
●初始化awr包
●查看是否初始化
●select sf_check_awr_sys()
●为0表示没有初始
●初始化
●sp_init_awr_sys(1)
●设置快照时间间隔时间
●CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(20);
●手动生成快照
●CALL DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
●至少两个快照才能生成awr报告
●记录的是快照到快照这个时间段的
●生成报告
●CALL SYS.AWR_REPORT_HTML(开始快照 ID, 结束快照 ID, '报告存放路径', '报告名称.HTML');
●查看报告
●主要看top5 event
●通过这个看实例的调整是否最优
●实例优化

●数据守护
●架构
●DM支持1主8备

●概念
●主机和备机
●数据守护系统中,支持用户所有数据库请求的数据库实例称为主机;主机的备份称为备机。
●数据库模式
●DM8 支持 3 种数据库模式:Normal 模式、Primary 模式和 Standby模式。
●数据库状态
●DM8 支持 3 种系统状态:Open 状态、Mount 状态和 Suspend 状态。
●邮件系统(MAL 系统)
●MAL 系统是一个内部高速通信系统,基于 TCP/IP 协议实现。
●OGUID
●数据守护唯一标识码,用来标识、校验,相同 OGUID 值的实例。
●数据守护原理

●配置步骤
●环境准备
●两台服务器主备
●一台监视器
●外部网络
●交换机
●端口规划
●生产环境中主备机各要两个ip,一个用于对外业务,一个用于内部通讯

●数据准备
●主备机配置
●主机配置
●备机配置
●启动守护进程
●监视器配置
●生产环境注册守护进程
●注册实例
●./dm_service_installer.sh -t dmserver -p DMSERVER -m mount -dm_ini /dm8/data/DAMENG/dm.ini
●注册守护进程
●./dm_service_installer.sh -t dmwatcher -p DMWATCHER -watcher_ini /dm8/data/GRP1_RT_01/dmwatcher.ini
●注册监控服务
●./dm_service_installer.sh -t dmmonitor -p DMMONITOR -monitor_ini /dm8/data/DAMENG/dmmonitor.ini
●关闭顺序
●1、关闭监视器
●2、关闭备库守护进程
●3、关闭主库守护进程
●4、关闭主库实例
●5、关闭备库实例
●监视器功能
●监控数据守护系统
●管理数据守护系统
●确认状态信息
●发起故障自动接管命令----确认模式
●命令

●手动切换
●login sysdba
●switcherover

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服