赞
踩
一、达梦数据库安装
查看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中用到过
增删改操作会更新索引,所以发现经常更新的表会查询变慢,这种的表不该建立过多索引
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。