本周主要从以下几个方面进行本人对达梦数据库学习的分享,学习进度和学习情况因人而异,仅供参考。
一、文本命令行工具使用的方法(Disql和dmfldr)
二、数据库备份
三、定时作业功能
四、系统表和动态视图
五、SQL调优方法
六、存储过程与触发器
七、ODBC接口与达梦集群
一、文本命令行工具使用的方法(Disql)
disql是达梦的命令行执行窗口,可以通过disql登录数据库进行相关操作。
以Windows10系统为例,调出CMD,进入到数据库的安装目录的bin下,执行disql命令,输入用户名和密码即可登录DM数据库;
在命令行工具中,可以进行数据库的DML和DDL操作 例如:查询,更新表信息等;
Dmfldr是另一个命令行工具,可以用来批量导入导出有一定格式的数据,再安装目录bin下;用的时候最少要传递两个参数:一个是用户名密码,一个是控制文件;控制文件制定了向哪个表传插入数据,数据源是哪个文件,分隔符等信息;
例如控制文件可以写成这样:
在Linux中执行的dmfldr命令:
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/test.ctl\'
二、数据库备份
备份的目的是当数据库遇到损坏的情况下,可以执行还原恢复操作,把数据库复原到损坏前的某个时间点。用于还原恢复数据库的载体是备份集,生成备份集的过程便是备份了。
逻辑备份和物理备份
逻辑备份是指利用 dexp 导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置
物理备份则直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备 份集中。物理备份过程中,不关心数据页的具体内容是什么,也不关心数据页属于哪一张表, 只是简单的根据数据库文件系统的描述,来挑选有效的数据页。
联机备份和脱机备份
数据库处于运行状态、并正常提供数据库服务情况下进行的备份操作,我们称为联机备份。数据库处于关闭状态时进行的备份操作,被称为脱机备份。
联机备份主要用manger(图形化)和disql(命令行)
脱机备份主要用console(图形化)和dmrman(命令行)
逻辑备份主要用dexp和dimp工具(命令行)
这里主要介绍下命令行备份方法:
在disql中使用backup命令进行数据库的完全备份:
路径是C:\dmdbms\data\DAMENG\bak\DB_BAK_01
用backup命令行工具做增量备份
用dmrman工具还原:
RESTORE DATABASE 'C:\dmdbms\data\DAMENG\dm.ini' FROM BACKUPSET 'C:\dmdbms\data\DAMENG\bak\DB_DAMENG_FULL_20210525_214047_237000'
数据还原后进行状态的恢复;
用dexp工具进行指定模式导出:
用dimp工具进行全库导入:
dimp USERID=SYSDBA/SYSDBA FILE=test3.dmp DIRECTORY=D:\back_test3
这里出现了警告,大家可以试一下加入IGNORE=Y这个参数,这个参数可以忽略错误继续进行;
三、定时作业功能
配置好作业任务,数据库就会在指定的时间执行操作
例:定时运行SQL语句,删除表中数据
四、系统表和动态视图
系统表和动态视图可以查看数据库的配置信息或者表的约束信息,帮助我们更好的使用数据库
这里简单列举几个:
V$PKGPROCS显示包中的方法信息
V$TABLESPACE 显示表空间信息,不包括回滚表空间信息。
V$IFUN 显示数据库提供的所有函数
V$ARCH_QUEUE 显示当前归档任务队列信息
V$LOCK显示活动的事务锁信息
五、SQL调优方法
SQL调优主要通过查看执行计划,分析每步执行的代价,建立相关的索引或者调整统计信息进行调优
例如:
select * from "E9"."WORKFLOW_REQUESTBASE" A where requestnamenew like '%zss%'
优化的方向是建立索引,正常建索引它是不走的,可以选择建立一个关于目标列截取字符串的索引,匹配到的话返回的数值是大于0的
create index idx_1 on "E9"."WORKFLOW_REQUESTBASE"(position('zss',requestnamenew));
建立IDX_1后,直接查询发现还是不走索引的,因为这个索引不是一个非常明确的索引;
接下来需要去收集这个表的统计信息
统计信息主要是描述数据库中表、索引的大小、规模、数据分布状况等的一类信息。比如,表的行数、块数、平均每行的大小、索引的 leaf blocks、索引字段的行数、不同值的大小等,都属于统计信息。CBO 正是根据这些统计信息数据,计算出不同访问路径、不同 join 方式下,各种执行计划的成本,最后选择出成本最小的执行计划执行查询操作。
对表上所有的索引生成统计信息:SP_TAB_INDEX_STAT_INIT
对库上所有模式下的所有用户表上的所有索引生成统计信息:SP_DB_STAT_INIT
对指定的索引生成统计信息:SP_INDEX_STAT_INIT
对指定的列生成统计信息,不支持大字段列:SP_COL_STAT_INIT
这里用第三个存储过程:
SP_INDEX_STAT_INIT(模式名,索引名,采样率)
call sp_index_stat_init('E9','IDX_1',100);
六、存储过程与触发器
存储过程的使用大大增强了SQL语言的功能和灵活性。
在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。
这种已经编译好的过程可极大地改善SQL语句的性能。
触发器是数据库中的表/视图发生某些特定事件时自动执行的过程(代码段)。触发器主要用于维护数据库中的完整性。
例:存储过程实现向指定表中循环插入1000条数据
创建触发器test_x5实现每次test_2表进行插入更新和删除时性inct_table插入一个序列数
CREATE OR REPLACE TRIGGER test_x5
AFTER INSERT OR DELETE OR UPDATE ON test_2
FOR EACH ROW
BEGIN
insert into inct_table(op_seq)values (test_x6.nextval);
END;
七、ODBC接口与达梦集群
使用ODBC接口可以在编写C语言的时候连接数据库进行操作,加强了编程的灵活性
达梦集群包括主备,读写分离,共享存储,大规模并行集群等,
这些内容在下周更新~