[root@localhost ~]# free -m
注意:物理内存至少为
1G
,
swap
分区一般是物理内存的
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.4
dmdba
用户环境变量配置(可选项)
[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
[root@localhost ~]# vi /etc/security/limits.conf
dmdba
soft
nofile
4096
dmdba hard nofile 65536
[root@localhost ~]# ulimit -n 65536
2.6
数据库版本
开发版:不能作为商用,用时间和并发限制
标准版:小型应用,不支持集群等高级特性
企业版:支持数据库高级特性,生产环境中使用最多
安全版:在企业版基础上,四权分立,安全性有进一步提高
2.7
数据库软件安装
[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
:桌面
jar
:
jar
包 (快速装载,导入导出,日志挖掘)
log
:数据库日志信息
script
:脚本
Web
:
dem
相当于
oracle oem
doc
:手册
jdk
:
java
包
tool
:客户端工具
CLI(
命令行安装
)
:
[dmdba@localhost mnt]$ ./DMInstall.bin -i
2.8
数据库软件的卸载
[dmdba@localhost dm8]$./uninstall.sh
[dmdba@localhost dm8]$ ./uninstall.sh -i
注意:生产环境中在卸载数据库之前,一定要记得先做好备份。
3
、创建数据库实例
一个数据库软件是可以创建多个实例,通过端口号区别,达梦默认端口号是
5236
[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.sh
root
执行脚本
查看数据库是否启动:
[root@localhost ~]# ps -ef|grep dmserver
[root@localhost ~]# netstat -ntl|grep 5236
[dmdba@localhost bin]$ ./DmServiceDMSERVER status
[dmdba@localhost tool]$ ./dmservice.sh
建库查看帮助:
[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
[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.2
manager
[dmdba@localhost tool]$ ./manager
5.3
console
[dmdba@localhost tool]$ ./console
查看和修改参数
做冷备和恢复
5.4
DTS
迁移工具
5.5
性能监视工具
monitor
6
、
DMSQL
SQL
:结构化查询语言
DMSQL
基于
sql92
,
sql99
标准
6.1
DMSQL
分类
DML
(数据库管理)
:select
、
insert
、
update
、
delete
DDL
(数据库定义):
create drop alter table truncate
DCL
(权限控制):
grant
、
revoke
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 ()
比较运算符、逻辑运算、
in
、
is null/is not null
,
between*** and
,
like
比较运算符:
= > >= < <= <> !=
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 '
李
_';
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
dmhr.employee
dmhr.department
using (department_id);
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
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
:静态参数,实例重启才能生效。
修改参数有以下几种方法:
1
)
Vi dm.ini
修改完成之后,无论是动态还是静态参数,都需要重启数据服务;
2
)
Sp_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
工具修改参数,无论是动态还是静态参数,都需要重启数据服务;
4
)
Alter 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;
归档日志文件
就是重做日志文件的副本。用来做数据库备份恢复,数据库守护集群、读写分离集群的同步。
开启归档:
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
---------- ------ ---------
DAMENG Y
SQL> alter database open;
将数据库启动到
mount
状态
开启归档模式并设定归档路径及文件大小、空间限制等。
将数据库启动到
open
状态
以
.bak
为扩展名的文件。备份文件就是数据库在某一个时间点的副本。
跟踪日志文件
跟踪日志文件记录的是各会话执行的
sql
信息。还记录了数据库错误信息、性能相关问题。
通过参数
SVR_LOG
,默认值为
0
,关闭。
7.1.2
逻辑结构
页:默认为
8k
,支持
4k
,
8k
,
16k
,
32k
。是数据库最小的分配单元。页对应的是操作系统块。
页是由页头信息、数据、空闲空间、行偏移数组组成。页头信息包含了页类型、页地址,行偏
移数组记录的数据和空闲空间的比例
(filefactor)
。
簇:簇是一组连续的页组成,默认为
16
个页,支持
16
、
32
个页。一个簇总是在一个数据文件
段:是簇的上级逻辑单元,段是可以跨多个数据文件的。段又分为数据段(表、索引),临时
段,回滚段。
dba_segments
表空间:可以拥有一个或多个数据文件,一个数据文件只能属于一个表空间。
7.2内存结构
共享内存池是
DMSERVER
启动时从操作系统申请的一大片内存,实例在运行中可以向共享内存
池申请或者释放内存。
MAX_OS_MEMORY
:可以使用物理内存的百分比
MEMORY_POOL:
公共池,减少系统调用
MEMORY_TARGET
:为
0
表示不限制内存使用。
运行时内存池:给特定模块单独使用,例如会话内存池和虚拟机内存池。
数据缓冲区
缓存的是数据页(空闲、干净、脏、正在使用),使用数据缓冲区可以提高数据库的读写性能。
数据库缓冲区设置的太小会造成性能问题,设置的过大,又会引起资源浪费。
参数:
buffer
参考值:
oltp
物理内存的
40%-60%
Olap
物理内存的
60%-80%
数据缓冲区有
4
种类型:
Normal
、
keep
:可以手动调整。默认为
normal
。
达梦缓存的是表空间,
oracle
魂村的是表。
Fast
、
recycle
:系统自动管理。
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
:数据库默认表空间,存放的是用户的数据。创建用户或者数据库对象时不指定表空间,
就放在该表空间中。
HMAIN
:
HUGE
表空间
查询表空间和数据文件
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临时表空间
注意:
system
,
roll
,
temp
表空间不允许脱机,
temp
表空间不能被删除。
8.7表空间删除
Drop tablespace test;
9、用户管理
9.1用户
企业版数据库预定义的用户:
Sys
:不能登录,存放的数据字典和视图
Sysdba
:管理员
Sysauditor
:审计员
Syssso
:安全员
安全版用户:
在企业版基础上,增加
sysdbo
——数据库对象操作员
规划用户:
命名:以字母开头,
a-z
,
0-9
,
$#_,
长度不超过
128
个字符
权限分配:系统权限、对象权限、角色
存储:表空间
密码策略
:PWD_POLICY
设置系统默认口令策略。
0:
无策略
;
1:
禁止与用户名相同
;
2:
口令长度不小于
9;
4:
至少包含一个大写字母
(A-Z);
8 :
至少包含一个数字
(0
-
9);
16:
至少包含一个标点符号
(
英文输入法状态下
,
除“和空格外的所有符号
;
若为其他数字
,
则表示
配置值的和
,
如
3
=
1+2,
表示同时启用第
1
项和第
2
项策略。
当
COMPATIBLE_MODE=1
时
,PWD_POLICY
的实际值均为
0
3=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
脚本
start
,
oracle
数据库执行
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
---------- ----------- ----
111
3
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
服务,需要关闭数据库实例,针对整库做备份
1
、
console
工具备份
[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
---------- ------ ---------
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