达梦数据库管理与应用
文章目录
达梦数据库管理
表空间管理
表空间分类
- 系统表空间
- 用户表空间
- 回滚表空间
- 临时表空间
创建表空间
-
GUI模式
-
SQL指令
create tablespace "表空间名" datafile "表空间物理文件存储位置" size 64-- 数据库文件初始大小为64M autoextend on -- 是否自动扩容:是 next 2 -- 扩容尺寸为每次增长2M maxsize 10240 -- 扩容上限为10G -- 可以同时添加多个数据库文件,并用逗号隔开 CACHE = NORMAL -- 缓存状态
修改表空间
-
GUI模式
选中表空间右键–>修改
-
SQL指令
-
修改表空间物理文件初始大小
alter tablespace "表空间名" resize datafile "表空间物理文件名" to 128 -
修改表空间物理文件自动增长方式和最大增长上限
alter tablespace "表空间名" datafile "表空间物理文件名" autoextend on next 2 max 10240 -
修改表空间添加一个物理文件(在表空间物理文件存储满了之后常用的方法)
alter tablespace "表空间名" add datafile "表空间物理文件名" size 128 autoextend on next 1 maxsize 2048
-
删除表空间
-
GUI模式
选中表空间右键–>删除
-
SQL指令
drop tablespace "表空间名"
表空间脱机和联机切换
-
GUI模式
选中表空间右键—>联机或脱机
-
SQL指令
-- 设置表空间脱机 alter tablespace "表空间名" offline; -- 设置表空间联机 alter tablespace "表空间名" online;
用户和模式管理
用户管理
创建用户(通过系统管理员创建普通用户)
-
GUI模式
-
常规设置
-
角色授权
-
系统权限设置
-
对象权限设置
-
资源限制设置
-
@具体资源限制调整参数
资源设置项 说明 最大值 最小值 缺省值 SESSION_PER_USER 在一个实例中,一个用户可以同时拥有的会话数量 32768 1 系统所能提供的最大值 CONNET_TIME 一个会话连接,访问和操作数据库服务器的时间上限(单位:1分钟) 1440(一天) 1 无限制 CONNECT_IDLE_TIME 会话最大空闲时间(单位:1分钟) 1440(一天) 1 无限制 FAILLED_LOGIN_ATTEMPS 将引起一个账户被锁定的连续注册失败的次数 100 1 3 CPU_PER_SESSION 一个会话允许使用的CPU时间上限(单位:秒) 31536000(365天) 1 无限制 CPU_PER_CALL 用户的一个请求能够使用的CPU时间上限(单位:秒) 86400(1天) 1 无限制 READ_PER_SESSION 会话能够读取的总数据页数上限 2147483646 1 无限制 READ_PER_CALL 每个请求能够读取的数据页数 2147483646 1 无限制 MEM_SPACE 会话占有的私有内存空间上限(单位:MB) 2147483646 1 无限制 PASSWORD_LIFE_TIME 一个口令在其终止前可以使用的天数 365 1 无限制 PASSWORD_RUSE_TIME 一个口令在可以重新使用前必须经过的天数 365 1 无限制 PASSWORD_REUSE_MAX 一个口令在可以重复使用前必须改变的次数 32768 1 无限制 PASSWORD_LOCK_TIME 如果超过FAILED_LOGIN_ATTEMPS设置值,一个账户将被锁定的分钟数 1440(一天) 1 1 PASSWORD_GRACE_TIME 以天为单位的口令过期宽限时间 30 1 10
-
-
SQL指令
-- 创建一个用户"Test" create user "TEST" identitfied by "123456789" -- 设置密码 limit session_per_user 2, -- 指定单实例的一个用户的最大连接数量 failed_login_attemps 3, -- 指定登录失败最大尝试次数 password_life_time 30, -- 密码有效期 password_reuse_time 5, -- 密码等待期 password_reuse_max 2, -- 密码重用必须要经过的修改次数 password_lock_time 1, -- 登录失败最大尝试次数使用完成后锁定该用户的时间 password_grace_time 10 -- 密码宽限期 default tablespace "表空间" -- 指定用户创建的资源默认存放的表空间 default index tablespace "表空间"; -- 指定默认索引表空间 -- 将VTI角色权限授予新建的用户 grant "VTI" to "TEST"; -- 将创建表的系统权限授予TEST的用户,并且可以进行转授 grant CREATE TABLE to "TEST" with admin option; -- 将在A模式下的B表上的查询权限授予TEST用户,并且可以转授 grant select on "A"."B" to "TEST" with grant option;
修改用户
-
GUI模式
选中用户右键–>修改
-
SQL指令
alter user "TEST" identified by "123456789" limit session_per_user 1, failed_login_atttemps 5, password_life_time 20, password_reuse_time 10, password_reuse_max 5, default index tablespace "表空间"
锁定和解锁用户
-
GUI模式
选中用户右键–>锁定或解锁
-
SQL指令
alter user TEST account lock; alter user TEST account unlock;
删除用户
-
GUI模式
选中用户右键–>删除
-
SQL指令
drop user "TEST";
模式管理
模式是一种数据库对象,它属于某个用户并且只能属于一个用户,也就是一个用户可以又多个模式,一个模式只能属于一个用户,模式中存放了它所属用户劝降范围内能访问的部分或者全部数据库对象
创建模式
创建用户的时候会自动创建一个和用户名同名的模式,如果新建模式需要将改模式关联到某个特定的用户
-
GUI模式
-
SQL指令
create schema "模式名" authorization "用户名"
修改模式
选中模式右键–>修改
删除模式
-
GUI模式
选中模式右键–>删除
-
字符模式
drop schema "模式名" restrict;
权限管理
-
权限分类
-
系统权限
- 操作数据库对象本身的权限
- 常用的系统权限:create,alter,drop等操作
-
对象权限
- 操作数据库对象相关数据的权限
- 常用的对象权限:insert,delete,update,select,all
-
角色权限
- 将一组系统权限和对象权限进行组合的整体权限为角色
- 角色可以解决多个用户具备多个相同权限需要进行频繁授权的问题
-
查看用户或角色具备的权限
-
查询用户或角色具备的对象权限
select * from dba_tab_privs where grantee="用户名或角色名" -
查询用户或角色具备的系统权限
select * from dba_sys_privs where grantee="用户名或角色名" -
查询用户或角色具备的角色权限
select * from dba_role_privs where grantee="用户名或角色名"
-
-
-
授权和撤销权限
新用户默认具备VTI和PUBLIC角色权限
-
授予和撤销系统权限
grant "系统权限" to "用户" revoke "系统权限" from "用户" -
授予和撤销对象权限
grant "权限" on SCHEMA.OBJECT to "用户" revoke "权限" on SCHEMA.OBJECT from "用户" -
授予和撤销角色权限
-
创建角色以及授权给角色&将角色权限授权给用户
create role "角色名"; grant "权限" to "角色"; grant "角色" to "用户" -
删除角色
drop role "角色名"
-
-
@系统自带的角色讲解
- VTI角色:查看系统视图的一组对象权限的集合
- public角色:操作数据字典的一组系统权限和对象权限的集合
- resource角色:是一组特定的系统权限的集合
- dba角色:是一组数据库管理员具备的系统权限和对象权限的集合
-
数据表管理
-
常用数据类型
- 整数类型
int
bigint
tinyint - 小数类型
dec/decimal(m,n)
number(m,n)
double
float - 字符类型
char(n)
varchar(n) - 日期时间类型
timestamp
datetime - 大对象类型
text 存放大量字符串,字符串长度最大为2G-1
clob 存放变长字符串2G-1字节
blob 存放变长二进制大对象2G-1字节
- 整数类型
-
创建表
-
GUI模式
-
SQL命令
create table "表名"( "列名" "数据类型" ["约束"], ... )
-
-
修改表
-
修改表插入新的列
alter table "模式"."表" add column("列名" "列数据类型" "是否为空"); -
修改表删除列
alter table "模式"."表" drop column "列名"; -
修改表中列的数据类型
alter table "模式"."表" modify "列名" "数据类型"; -
删除表
drop table "模式"."表" restrict;
-
约束管理
约束是为了确保数据完整性而设定的一系列的规划;完整性又包含了准确性和有效性
-
约束类型
非空约束
主键约束
外键约束
唯一键约束
Check约束 -
创建约束
alter table "模式"."表" add primary key("主键列名"); alter table "模式"."表" add constraint "约束名" primary key("主键列名");alter table "模式"."表" add constraint "约束名" foreign key("外键列名") references "主表名"("主键列名");alter table "模式"."表" add constraint "约束名" unique("唯一键列名");alter table "模式"."表" add constraint "约束名" check("检查约束的表达式"); -
删除约束
alter table "模式"."表" drop constraint "约束名";
视图和索引
视图
-
视图基本概念
- 视图是一种虚拟表,不会占用物理空间来存储数据
- 视图中的数据是通过执行sql语句从基表中查询所得
- 视图是给用户展示基表数据的一种方式
- 视图数据也可以来自其他视图
-
视图的核心功能和使用场景
- 简化sql,提高开发效率
- 计算列的需要,将某些经常使用并且需要通过列计算得到数据创建为视图,简化操作
- 不同表字段信息的聚合,将多表联查的数据创建为视图
- 安全机制,将基表中名干数据屏蔽掉,非敏感数据创建为视图展示给用户使用
- 兼容老项目数据,老项目表中缺少某个字段的数据,可以将新字段的数据和老项目表的数据进行组合再创建成视图即可
-
视图创建和使用
create view "模式"."视图" 查询语句select * from "模式"."视图"
索引
索引是为了提高查询性能而创建的一种数据库对象
-
使用场景
- 经常查询的列
- 从大量数据中查询少量结果
- 经常用于where查询条件的列
- 联接查询的条件列
-
不适合使用索引的情况
- 字段中存在大量null值
- 整体数据量小
- 字段的数据值相对固定
-
创建索引,删除索引
create index "索引" on "模式"."表" storage( initial 1, -- 初始分配簇数 next 1, -- 下次分配簇数 minextents 1 -- 最小保留簇数 );使用索引:使用索引前,重新搜索数据库统计信息
begin dbms_stats.gather_table_stats('SCHEMA','TABLE'); end -
百万级别测试数据对比有无索引的时候查询的时间消耗
-- 创建一个学生表 create table I_student ( stu_no bigint not null primary key, stu_name varchar2(50) not null ); declare num int := 1000; firstChar text :='...'; secondChar text := '...'; -- 声明两个变量用于表示随机数 rand1 int := 0; rand2 int := 0; rand3 int := 0; begin while num<=1001000 loop -- 生成第一个随机数 rand1 := floor(rand() * (566 - 1 + 1) + 1); rand2 := floor(rand() * (6679 - 1 + 1) + 1); rand3 := floor(rand() * (10 - 1 + 1) + 1); insert into I_STUDENT values(num,concat( substring(firstChar,rand1,1), substring(secondChar,rand2,rand3) ) ); num := num + 1; end loop; end; commit;select * from I_STUDENT where STU_NAME like '欧%'; -- 没有创建索引的情况下使用时间:178ms -- 创建索引之后使用时间:2ms
DMmysql基础
-
DMSQL分类
- DDL:数据定义语言,用于操作数据库对象本身,比如create,alter,drop
- DML:数据操纵语言,用于操作数据库对象中的数据,比如insert,delete
- DQL:数据查询语言,用于查询数据操纵,比如select
- TCL:事务控制语言,用于事务控制操作,比如commit,rollback
- DCL:数据控制语言,用于权限操作,比如grant,revoke
-
基础CRUD操作
-
插入数据
-- 插入单条数据 insert into "模式"."表"("列名1","列名2"...) values("值1","值2"...); -- 插入多条数据 insert into "模式"."表"("列名1","列名2"...) values("值1","值2"...),("值1","值2"...); -- 插入多条数据(需要先创建新表tab) insert into "模式"."表" select "列名" from "模式"."表"; -- 创建新表并从其他数据表中查询数据插入到新表中 create table "模式"."表" as select "列名" from "模式"."表"; -
删除数据
delete feom "模式"."表" [where 条件] -
修改数据
update "模式"."表" set 列1=值1,....[where 条件] -
查询数据
select "列名",... from "模式"."表" [where 条件]
-
数据查询
基础查询
select 列1,...,列n from "模式"."表" [where 条件] [group by 分组列1,...,分组列n] [having 筛选分组条件] [order by 排序列1,...,排序列n]
-
条件查询常用表达式
- 查询中使用别名
- 关系运算符 >,<,=,!=,>=,<=
- 逻辑运算符and,not,or
- 范围运算
- 关系和逻辑运算符组合
- between…and
- in(值1,…,值n)
- 模糊查询
- like
%&_
- null和非空查询
- is null
- is not null
-
查询分组,多列分组,聚合函数
- sum() 求和
- count() 统计梳理
- max() 求最大值
- min() 求最小值
- avg() 求平均值
-
筛选分组
having 筛选分组条件
-
查询排序
order by 分组列名列表
-
分页查询
-
top分页
select top 每页显示条数 列名列表 from 表 where id not in( select top 偏移量条数 id from 表 ) -
limit分页
select 列名列表 from 表() limit 偏移量,每页显示条数 -
伪列分页
-
rowid
select rowid,列名列表 from 表 where rowid between 起始编号 and 结束编号 -
rownum
select t 列名列表 from( select rownum num,列名列表 from 表名 where rownum < maxValue ) t where num > minValue
-
-
多表联查
-
笛卡尔集查询
select 列名列表 from 表1,表2; -
内联接查询
select 列名列表 from 表1,表2 where 两表关联列条件表达式; select 列名列表 from 表1 inner join on 两表关联列条件表达式; -
外联接查询
-
左外联接查询
select 列名列表 from 表1 left outer join 表2 on 两表关联列条件表达式; -
右外联接查询
select 列名列表 from 表1 right outer join 表2 on 两表关联列条件表达式; -
全联接查询
select 列名列表 from 表1 full join 表2 on 两表关联列条件表达式;
-
子查询
-
where子句子查询:将一个查询的结果作为另一个查询(更新)操作的条件
select 列名列表 from 表名 where 条件列 = |in|not in( 子查询 ) [条件]; -
from子句子查询:将一个查询的结果看作一张虚拟表提供给其他查询使用
select 列名列表 from( 子查询 ) 临时表名 [条件]; -
select子句子查询:将一个查询的结果和其他查询的结果进行组合
select 列名列表,( 子查询 ) from 表名[条件]
@附录 达梦数据库相关函数
达梦数据库备份
脱机备份
GUI模式脱机全库备份
-
开启DmAPService服务,关闭数据库实例服务
-
开启备份
-
删除DMHR表空间
-
备份还原
-
备份恢复
-
更新DB
-
恢复成功后模式列表
dmrman工具脱机全库备份
-
关闭数据库实例服务
service DmServiceDMSERVER stop -
备份数据库
> backup database "实例文件" -
还原数据库
> restore database "实例文件" from backupset "备份文件" -
恢复数据库
> recover database "实例文件" from backupset "备份文件" -
更新模式
> recover database "实例文件" update db_magic -
开启数据库实例服务
service DmServiceDMSERVER start -
@注意事项
- 开启DmAP服务
- 关闭实例
- 使用dmdba账户进行备份
- 切换到dmrman命令所在目录下使用./dmrman启动备份工具
- 不要通过配置PATH变量直接执行dmrman——会导致创建命名管道失败
脱机增量备份
联机备份
-
GUI设置归档
-
SQL命令配置归档
-- 设置实例为配置状态 alter database mount; -- 配置本地归档文件 alter database add archivelog 'type=local,dest=/dm8/arch,file_size=64,space_limit=0'; -- 添加归档 alter database archivelog; -- 设置实例为开启状态 alter database open; -- 查看实例归档状态 select * from v$database;
联机增量备份
逻辑备份
GUI模式逻辑备份
- 导入导出分类
- 数据库级别
- 用户级别
- 模式级别
- 表级别
- DM管理工具逻辑导出
- 库级别导入导出
- 使用sysdba导出某个实例数据库中的所有数据
- 使用dbca.sh重新创建一个实例
- 将导出的数据文件导入新数据库实例中
- 用户级别导入导出
- 从A实例中导出X用户的数据
- 删除B实例中X用户的模式下的数据表
- 使用B实例的用户级别导入功能恢复上一步删除的数据
- 模式级别的导入导出
- 导出X模式下的数据
- 删除X模式下的数据
- 通过模式级别导入导出功能导入X模式下的数据
- 表级别的导入导出
- 导出某个表的数据
- 删除该表的数据(表级别导出的文件导出了表结构,因此可以删除表)
- 导入该表的数据
- 库级别导入导出
字符模式逻辑备份
./dexp逻辑导出和./dimp逻辑导入
-- 库级别导出
dexp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="导出日志名_exp.log" DIRECTORY="导出文件路径" FULL = Y
-- 库级别导入
dimp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="日志名_imp,log" DIRECTORY="导入文件路径" FULL = Y
-- 用户级别导出
dexp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="导出日志名_exp.log" DIRECTORY="导出文件路径" OWNER="用户名"
-- 用户级别导入
dimp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="日志名_imp,log" DIRECTORY="导入文件路径" OWNER="用户名"
-- 模式级别导出
dexp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="导出日志名_exp.log" DIRECTORY="导出文件路径" SCHEMAS = "模式名"
-- 模式级别导入
dimp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="日志名_imp,log" DIRECTORY="导入文件路径" SCHEMAS = "模式名"
-- 表级别导出
dexp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="导出日志名_exp.log" DIRECTORY="导出文件路径" TABLE="模式"."表名"
-- 表级别导入
dimp USERID=SYSDBA/123456789@192.168.1.99 FILE=db_库名.dmp LOG="日志名_imp,log" DIRECTORY="导出入文件路径" TABLE="模式"."表名"
达梦数据库作业管理
创建两个作业分别是job1和job2,job1负责每周日,周三晚上23:00做全库备份,job2负责每周一、二、四、五、六晚上0:00做增量备份
@附录
ODBC插件安装
-
安装gcc
yum install gcc -
安装odbc
-
下载unixODBC-2.30.tar.gz,并将压缩包上传到服务器并解压
tar -zxvf unixODBC-2.3.0.tar.gz -
进入解压目录并配置
./configue --enable-gui=no -
编译并安装
make make install -
检查安装情况
odbcinst -j -
配置odbc配置文件
vim /user/local/etc/odbc.ini vim /user/local/etc/odbcinst.ini!
[] Driver = mydriver SERVER = 192.168.1.99 UID = SYSDBA PWD=123456 TCP_PORT=5236[] Driver = /dm8/bin/libdodbc.so -
测试连接
-
浙公网安备 33010602011771号