当前位置:   article > 正文

达梦数据库培训笔记_达梦 exists

达梦 exists

一、达梦数据库安装

查看cpu:lscpu或者cat /proc/cpuinfo

查看操作系统:uname -a或者cat /proc/version

查看磁盘信息:df -h

查看内存:free -m cat /proc/meminfo

创建group:groupadd dinstall

创建user:useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba

创建目录/dm chown dmdba:dinstall /dm

解压iso:mount /opt/dm.iso /mnt/dm(/dm为安装目录,/mnt/dm为解压目录)

文件打开数:ulimit -n vim /etc/security/limit.conf

指定tmp空间:DM_INSTALL_TMPDIR = /

图形化:

[root] xhost +

[root] echo %DISPLAY

:0.0

[dmdba] export DISPLAY=:0.0

卸载:/dm/uninstall.sh 或者-i

配置环境变量,就是在原来环境变量后追加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm/bin

vim .bash_profile

source .bash_profile

二、创建数据库

命令行方式:

cd /dm/bin

./dminit path=/dm/data db_name=数据库名 instance_name=实例名 port_num= page_size=

图形化的方式:

[dmdba] cd /dm/tool

./dbca.sh(图形化)

记得用root执行三个操作

三、注册数据库服务

图形化:

[dmdba] cd /dm/tool

./dbca.sh(图形化)

选中dm.ini文件后确定,执行三个命令

systemctl enable/enable 注册/关闭自启动

systemctl start 启动服务

命令行:

[root] cd /dm/script/root

./dm_service_install.sh -t dmserver -p {?实例名} -dm_ini {?dm.ini 路径}

systemctl start DmService{?达梦实例名}.service

四、连接数据库

命令行:

bin/disql

cd /dm/bin

./disql sysdba/SYSDBA:

图形化:配置DISPLAY后 /dm/tool/manager,比较常用,不记录了

五、达梦服务查看器

[root] 配置DISLPAY

root  /dm/tool/dmservice.sh启动停止服务

六、SQL语法

cross join: 交叉笛卡尔积

natural join:会议两个表中具有相同名字的列为条件,两个表中列的类型不同会报错

using 在natural join基础上指定连接列

join on常用:hash join 、 inner hash join,默认就是inner

外连接:left | right |full outer join

子查询:

in/exists

any将值与子查询中的任意一个进行比较

all与子查询的每个值进行比较 where salay > all (select salay from…)

exists和in:当结果集特别大时候in的效率没有exists高

union和union all区别:union去重

七、内存结构&参数管理

数据库和线程:数据库是指磁盘上数据文件的集合,线程是指一组正在运行的线程/进程的内存集合,达梦是单进程多线程

逻辑存储:

表空间是数据存储的地方,所有数据都存放在表空间中,存放系统数据和业务数据

表空间包括段、段包括簇,簇包括数据页,数据页会映射到磁盘块

簇是连续的数据页的集合、数据页会映射到磁盘块

簇和数据页不能跨数据文件,段可以

物理存储:一个表空间可以有多个数据文件,但是一个数据文件只能属于一个表空间

/dm/data/DAMENG/dm.ctl

控制文件,控制文件自动备份,控制文件都是二进制文件

dmctlcvt可以将控制文件转化为文本文件

dmctlcvt type= src=dm.ini dest=dmctl.txt

控制文件记录表空间和数据文件信息

控制文件可以用作数据迁移,把数据文件路径指定为新的路径

dm.ini配置文件:初始化参数管理

显示参数类型:

desc v$parameter;

desc v$dm_ini;

select distinct type from v$parameter;

v$parameter中value指当前会话的值,sys_value是内存中的值,file_value是文件中的值,description是配置描述

四种类型:

、READ_ONLY:只读参数,只能通过修改dm.ini修改,不能通过函数护着方法

、sys:动态参数,系统级参数,可以在数据库运行时修改

、session:动态(会话级)参数,可以在数据库运行时生效,只对当前会话

、IN-FILE:静态参数,可以在数据库运行时修改,只能修改文件中的值,不能修改内存中的值

静态参数:不能修改内存中的值,需要重启数据库

动态参数:可以修改内存中的值,不需重启就生效

修改参数(必考)

alter system set ‘COMPATIBLE_MODE’ =  both;–both为生效范围

生效范围选项:MEMORY|SPFILE|BOTH 内存|文件|前两个,如果不指定范围,默认修改的是内存中的值

alter session set …改变当前会话(终端连接)

系统函数修改系统配置:

select name,id,arg_num from vi f u n w h e r e n a m e l i k e ′ s e l e c t ∗ f r o m v ifun where name like '%SET%PARA%'; select *from vifunwherenamelike

 select∗fromvifun_arg where id = ;

sp_set_para_value(scope, param , value);

scope:0:内存中 :both 文件中

./console工具中修改配置:服务器配置->示例配置->实例

*.DBF:数据库业务数据文件

联机日志:DAMENG.log和DAMENG.log是循环写的,用来记录DML的redo日志

*.ini:配置文件

八:内存结构

数据缓冲区buffer:内存区域,占据数据库内存的0——0%的空间,用来存放从磁盘读取出来的数据页,为了提高IO性能。

分为四个类型:normal、fast、recycle、keep默认为normal,创建表空间时候只能指定noramal和keep,fast和recycle是dm系统自己使用

对应的配置变量名为:buffer、fast_pool_pages、recycle、keep,一般说修改数据缓冲区大小就是指normal类型的缓冲区,即对应的buffer值

noraml常用算法为lru算法:最近最少使用的淘汰算法,latest recently used

重做日志缓冲区:

commit时候做日志的刷盘

rlog_buf_size=

会暂存dml,然后放在重做日志缓冲区,待提交的时候把数据库操作刷盘

SQL缓冲区:cache_pool_size

SQL CACHE POOL,建成SCP,用来存放包信息、执行计划,结果集默认不缓存

一条查询sql,

、先进入SQL缓冲区,如果SQL缓冲区中没有对应SQL语句,如果有查找执行计划缓冲,

、如果执行计划缓冲也没有,就分析SQL并生成和加入缓存,

、查找结果集缓存,如果结果集缓存中有,则直接返回SQL结果集,否则从数据库磁盘中查找

RS_CAN_CACHE:是否开启rs结果集缓存

USE_PLN是否开启执行计划

如果没有缓存,SQL解析过程称为硬解析,要用缓冲区减少硬解析

SQL缓冲表空间:

select * from sys.v$cacheitem;缓存的项目

select * from sys.v$cachepln;缓存的执行计划

select * from sys.v$cachesql;缓存的sql

select * from sys.v$cachers;缓存的结果集

select * from v$bufferpool;数据缓冲区,记录种类型的bufferpool的命中率情况

select *from v$mem_pool;内存池,大的内存占用

select * from v$dict_cache

select * from sys.v$dynamic_tables;  动态视图的名称,存放的是系统监控视图的名称,例如sys.v$开头的视图

对于动态sql,尽量使用绑定变量的方式插入,using关键词

字典缓冲区:主要用来判断表、字段等存在不存在,有没有数据表的查询权限等,缓存的数据字典dict_buf_size

主内存池:

数据库共享内存池,

单位:MB

memory_pool:初始化内存值大小

memory_extent_size:如果memory_pool不够,每次扩容的大小

memory_target:最大值

运行时其他内存池:

vm_pool:虚拟内存池

sess_pool:会话池

rt_heap:

排序区:

hash区:

每个会话都会占用vm和sess_pool

九、线程

监听线程:处理客户端的链接请求,生成一个会话线程

会话线程:

IO线程:读写数据页,物理读,执行检查点,检查点是用来将数据缓冲区的数据写入数据文件

日志刷新线程:将redo日志写入日志文件中,

日志重做线程:如果数据库突然宕机,一部分数据缓冲区没有进行commit然后刷盘,这时候日志重做线程会从rlog中比对lsn和当前检查点的lsn,然后进行恢复

调度线程:线程调度的线程,计划器

工作线程:核心线程

查看线程:

先看进程:ps -ef | grep dmserver

再看线程:ps -T -p pid,pid为线程号

其中dm_sql_thd就是客户端会话线程,会话越多,这个越多,一个会话会对应一个dm_sql_thd

top -H -p pid,监控线程内存使用情况

select * from v$process;进程

select * from v$thread;线程

select * from v$session;会话

select * from v$sql_history order by time_used desc;SQL历史执行时间倒序

内存分配推荐的方案:

/dm/samples/sql_script/UTF-/

MAX_SESSION_STATEMENT 句柄  相当于ORACLE的open_cursors

十、表空间管理

system:系统表空间,存放数据字典的定义,例如表定义、字段声明等

roll:回滚表空间,保证数据的一致性,在一个会话提交数据之前,另一个会话中读取的数据为roll表空间的数据

main:users的空间,如果创建用户时候,没有指定用户表空间,就会使用main表空间

temp:临时表空间,

hmain:huge表空间

查看表空间:

user_tablespaces

v$tablespace

select * from dba_data_files;

联机脱机状态

select * from dba_segments t where t.segment_name like '表名';

dba_segments中的bytes字段是表占用空间大小,表越大,占用空间越大

创建表空间:(默认单位是MB

craete tablespace "TBS" datafile '/dm/data/DAMENG/TBS0.DBF' size ;

定义的表空间大小不可低于page大小的0倍,即select 0*page/0/0;

扩表空间

添加数据文件:alter tablesapce"" add datafile '/dm/data/DAMENG/TBS0.DBF' size ;

改表空间大小:alter tablespace "" resize DATAFILE "" TO ;

限制自动扩展的属性,默认是打开的:alter tablespace dmdbs "" datafile "" autoextend off;

修改每次扩展的大小(MB):alter tablespace dmdbs "" datafile "" autoextend on next  maxsize 00;

更换数据文件存储位置:

alter tablespace  "" rename datafile to "新路径"

删除表空间:

drop tablespaces "";有表结构的表空间不可删除

界面操作:

./manager中,左侧打开链接后,表空间,右键新建表空间

右键脱机、联机、修改

临时表空间:

收缩临时表空间方法:

、重启

、临时表空间的在线收缩sp_trunc_ts_file(group_id,file_id,收缩大小)

undo表空间:

v$parameter.undo_retation:闪回查询数据报表时长,dm默认闪回查询是关闭的,闪回查询可以找回误删操作,根据时间点找到数据

快照过旧或者叫查询记录过旧问题解决:(A会话在查询表的过程中,B在更新表,就需要保证A查询到的是B更新之前的数据,这个就是快照过久问题)

、优化SQL

、扩大roll表空间

、调整undo_retention

十一、联机日志/重做日志

联机日志默认两个日志循环使用:DAMENG0.LOG和dameng0.log,默认是M,如果设置过小,会导致两个日志频繁切换,过大会浪费空间

调整联机日志大小:alter database resize logfile “/aaa.log” to 00;

增加联机日志文件;alter database add logfile “/aaa.log” size 00;

联机日志大小查看:

v$rlogfile

v$log;cur_file对应v$rlogfile的id

更改联机日志位置:只能在mount状态下更改:

alter database rename logfile "/aaa" to "新路径"

界面操作:

./manager

数据库连接上右键->管理服务器->日志文件

十二、归档

归档是对redo日志的归档,记录事务日志

归档的功能主要用于数据还原与恢复,数据同步(数据同步主要就是redo日志的同步),也可以做日志分析和挖掘

select arch_mode from v$data_base;默认都是非归档状态

开启归档:(也可以直接改dm.ini,修改和arch相关的参数)

alter database mount

alter database archivelog;(noarchivelog为归档的关闭)

alter database add/(delete) archivelog "type=local, dest=/dm/arch,file_size=,space_limit=00"

alter database open;

注意:设置归档的时候,不要设置空间大小过大,不然考试时候备份会提示空间不足

图形化界面:

./manager管理服务器->归档配置(如果不能操作,需要切换成mount状态),点击,添加,为防止磁盘被撑爆,最好设置空间限制space_limit

转换为mount状态:管理服务器->状态转换,点击配置,再点转换

查看归档设置和归档文件:

select * from  sys.v$archived_log;

select * from sys.v$arch_file;

arch_file中arch_lsn和clsn是开始和结束的序列,正常来讲,上一个结束的lsn和下个开始的lsn都是连续的。

造成不连续的原因:数据库不是正常关闭(直接kill进程),可以用redo日志进行归档日志的修复 切换归档日志文件:(三个语句都可以

alter system switch logfile;

alter database archivelog current;

alter system archive log current;`在这里插入代码片`

归档日志空间常常过大,怎么维护归档日志文件?,删除的前提是已经做了备份了,全备或者增量备份

select SF_ARCHIVELOG_DELETE_BEFORE_LSN();删除某个lsn之前的归档日志文件

select sf_archivelog_delete_before_time(sysdate-);删除三天之前的归档日志文件

十三、用户管理

创建用户

create/alter user 用户名 identified by "密码"

select * from v$parameter where name = 'PWD_POLICY';密码安全策略,默认是(密码长度不小于)

图形化:

用户->管理用户->右键新建用户

连接限制可以限制IP登陆

修改pwd_policy:

alter system set 'PWD_POLICY' =  both;

alter user 用户名 limit failed_login_attemps , password_lock_time ,session_per_user ;--设置用户次登陆尝试,冻结分钟,个连接会话

session_per_user和max_session结合起来,max_session系统级别如果到达最大连接,即使session_per_user不达到最大连接,也不可再发起会话,

当业务达到最大session,是预留了一个sysdba会话可以连接的

如果密码有特殊字符,需要用双引号括起来

disql需要用单引号加双引号:disql dmtest dmtest/'"DAMENG@"'

select * from dba_users;可查看lock_date被锁定时间,默认表空间,密码策略

删除用户

drop user 用户名

系统权限(数据库权限):

创建表 create table

修改数据库 alter database

创建表空间 create tablespace

alter tablespace 修改表空间

创建用户、视图、存储过程、函数、角色、模式

授权/收回权限:

grant create table to 用户名

grant select(id,lastname) on dmhr.employee to 用户名;--精确到表列的权限

revoke ... from  ..

对象权限,对对象的操作权限:

表、视图、序列、存储过程的alter delete execute insert references select update 等

grant select on DMHR.CITY to 用户名,给用户名授予city表的select 权限

revoke select on 表明 from 用户名,收回权限

系统角色:

select * from dba_roles;

DBA:具有几乎所有的权限,除了审计和强制访问之外的权限,默认赋给sysdba用户

public:具有对当前模式下对象的dml数据操作权限

resource:具有在当前模式下对象定义权限(创建表、索引、视图等)

soi:具有查询sys开头系统表的权限

vti:具有查询v$开头的动态视图权限

角色是一组权限的集合,方便给用户授权

create tole r;

grant create table to r;

grant r to user;

启用禁用角色:sp_set_role('r', 0/); 是启用

操作系统验证?DM安全手册中讲到了(不是考点)

就是直接用disql / as sysdba

十四、模式对象管理(schema)

模式定义:模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集。

模式对象:表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域

模式就是对象的属主,一个用户可以查看多个属主下的对象

在ora中,模式和用户是一对一的关系,在DM中,一个用户可包含多个模式,默认模式和用户名一致。

创建模式

create schema dameng autorization sysdba;

select * from sys.sysobjects ;--系统中的 所有对象信息

where type$ = 'SCH'--查看模式信息

sysobjects表中的pid对应的是自己表中的id

查看当前模式:select sys_context(‘USERENV’,‘CURRENT_SCHEMA’);

设置当前模式:set schema dmhr;设置后查询语句的对象名之前就不用加模式名+点了,仅对当前会话有效

模式本身没有权限,权限是在用户上

表:

select * fro user_tables;查所有表的信息,和表空间信息

desc user_tab_columns;查表列信息

alter table xx move tablespace xx;修改表的表空间,达梦中切换表空间、索引不会失效,oracle会失效

number(p,s)类型字段,DM中number(,)的格式为000.00,oracle中为00000,ora没有s的概念,唯一

DM中的varchar是以字节为保存,nvarchar是以字符保存

例如varchar()中保存不了个汉字,但是nvarchar()就可以,默认国标中一个汉字是个字符

新版本DM中支持nvarchar,但是老版本不行,可以修改字段类型为:varchar(, char),括号中加char

time 和 date类型

布尔类型 bit

create table a as selct * from b;--oracle的方式,会丢失列索引,主键等

create table a as select * from b where =0;只复制了表结构

create table a like b;--mysql的方式

约束:

select * from dba_constraints;所有的约束信息

select * from dba_cons_columns;所有的约束字段信息,constraint_name

主键primary key和唯一键unique key:

主键只能定义一个,唯一键可以定义多个

唯一键不一定是主键

not null + unique = primary key

定义主键时自动创建聚簇索引。相反,Unique键生成非聚集索引。

外键:

设置外键索引后,字表中的pid字段插入时候会校验主表ID是否存在

alter table sonT add constraint 约束名 foreign key(pid) refereneces parentT(id);

设置外键时候,一定是要指向主表的主键或者唯一键,否则建立约束时候会报错

如果子表外键关联了主表,删除主表时候也会校验主表这条数据是否被外键引用

check:

例如最低工资标准,不得低于000

alter table ..... check(salary >= 000);

十五、数据导入导出

、导出为sql文件:表名上右键->浏览数据->选中所有,右键导出为sql

、切换至目标用户conn hrtest/

、用前面的符号执行脚本:`sql文件

、也可以用start xx.sql文件命令导入

、界面客户端中的窗口要commit(很多容易在这里丢分)

十六、视图

select * from user_views;

create view if not exists xx as select xx

drop view if exists xx

十七、索引

索引优势:

通过指针加速查询速度

通过快速定位数据的方法,减少磁盘IO

索引与表互相独立

服务器自动使用和维护索引

索引相关操作:

create index xx on tablname(col) tablespace sbspname

 - 删除索引:drop index xx

alter index xx rebuild;--重建,删除数据后会产生索引随便,可以考虑重建索引

explain sql语句; 查看sql语句执行计划

创建完索引后,执行计划中可以看到要走二级索引,就是secondary index seek

执行计划视图中,代价字段是耗时(ms),结果集是行数(预估),行数据处理长度是网络消耗

执行计划中的结果集是预估的,需要手动收集信息后执行

dbms_stats.gather_table_stats("模式名","表明")

dbms_stats.table_stats_show("模式名","表明");

dbms_stats.index_stats_show("模式名","索引名")

DM默认的索引类型是聚簇索引,表默认的是索引组织表:全表扫描,ORA默认的表是堆表

索引组织表:查询效率可能没有堆表的高,索引组织表按照rowid排序,rowid是逻辑的,如果创建主键,主键是默认的聚簇索引键

堆表:排序的字段是物理的

监控索引:

ALTER INDEX XX MONITORING USAGE;-- 开启索引监控

ALTER INDEX XX MONITORING USAGE;--关闭索引监控

select * from sys."v$object_usage";--used字段为yes时候,就表示索引在sql中用到过

增删改操作会更新索引,所以发现经常更新的表会查询变慢,这种的表不该建立过多索引

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/630306
推荐阅读
相关标签
  

闽ICP备14008679号