注册
4月9日DCP考试的一点小感悟
专栏/培训园地/ 文章详情 /

4月9日DCP考试的一点小感悟

鱼儿 2024/04/10 896 0 0
摘要

一、 前言
随着近年来数据库国产化工作推进,国产数据库在各行各业需求火热,目前公司也在推动数字化转型,用的最多的国产数据库就是达梦。几年前就考了DCA,但对于日常工作而言还是远远不够,故下定决心考DCP,从考促学,真正让自己掌握这一门技能。

二、 培训
培训时间:3月18日-3月21日
培训内容很多,程青老师讲得很好,内容丰富细致,还会结合日常运维工作扩展一些很实用的知识点,通过这次培训,让我受益匪浅。
培训DCP内容前先回顾了DCA的内容,不得不说,DCA的内容其实也很丰富,不可小看,基础知识掌握的牢固与否会直接决定会续学习的情况,只有基础知识掌握好了,在后续学习中才能更加得心应手。
这4天培训了很多内容,基于难度及感兴趣的,我对以下内容做一下简单的自我总结:
1、 分区表
分区表相关的内容很多,针对分区的概念、分区方法、维护等各方面都有细致的讲解。按不同的分区方法,有范围分区、列表分区、哈希分区、间隔分区等,每种分区都有自己适用的场景。比如范围分区适用于基于范围的查询,如日期、数字;列表分区适用于离散值的查询;哈希分区适用于大型表和动态增长的数据。
2、 外部表
外部表的数据存放在外部操作系统的文件中,并不存放在数据文件中,但可以通过数据库进行相关查询,在一些场景中也是很有用的。但是在创建外部表过程中,很容易出现问题,创建失败的原因有很多,比如分隔符设置的不对,字段不对应,数据类型错误等等都可能导致外部表创建失败。
3、 索引管理
索引管理的内容非常丰富,涉及到SQL执行计划、统计信息收集、索引的日常维护,索引的类型也很多,其中分区索引和全文索引需要重点注意。
4、 物化视图
物化视图的创建很简单,但关于刷新的内容还是需要关注下的,需要从刷新模式、刷新时机、刷新类型等方面进行全面的了解。
5、 数据迁移
数据迁移主要讲了DTS和DMHS两种迁移工具,工具简单易用,对用户很友好,达梦支持的迁移数据库种类和方式都很丰富。
6、 快速数据加载
dmfldr可用于数据快速导入、导出,是很方便的工具,操作参数与外部表的创建有些相似,操作过程中也是比较容易出错的,需要特别仔细认真。
7、 性能优化
性能优化是每个DBA的必修课,很重要,也是学习的难点,因为内容很多,需要长期深入的学习及实战,才能掌握。
8、DM数据守护
数据守护看起来搭建复杂,但其实把原理弄懂了就很好掌握。培训主要讲的是数据守护的实时主备,这套架构类似于MySQL的主从、ORACLE的ADG,是一套简单易用又较稳定的架构。
还有培训其它内容,就不一一列举了,部分操作在文后附上。

三、 考试
考试时间:4月9日,分上下午两场,分别是笔试(2小时)和机试(4小时)。笔记200道选择题,内容真的很多很多,涉及数据库的方方面面,如果不认真备考,真的很难通过考试。机试相对于笔试个人感觉更简单点,但因为我近期实在太忙,在实操这一块练习的时间太短了,有些题做得不好。

四、 总结
通过这次DCP培训和考试,确实做到了以考促学,大大加深了我对DM数据库的了解,后续需要继续学习,不断加深对各知识点的掌握。

附录:
1、关于统计信息
(1)收集统计信息:
dbms_stats.gather_table_stats('DMHR','EMPLOYEE',ESTIMATE_PERCENT=>100);

(2)导出统计信息到表中:
dbms_stats.CREATE_STAT_TABLE('DMHR','EMPLOYEETAB');---先建一个存放统计信息的表
自动创建生成的表名是 STAT$_EMPLOYEETAB
select * from dmhr. STAT$_EMPLOYEETAB; ---当前为空
dbms_stats.EXPORT_TABLE_STATS('DMHR','EMPLOYEE',STATTAB=>'EMPLOYEETAB',statid=>'v1', statown=>'DMHR');
-----注意上面导出统计信息,statid是给一个标识,内容随便写;statown要写保存统计信息的表在哪个模式下。

(3)spool导出统计信息到本地:
SQL> spool /dm8/EMPLOYEETAB.txt
SQL> select * from dmhr. STAT$_EMPLOYEETAB; (这种虽然能查到,但是格式不友好,可用下面的方法:)
SQL> dbms_stats.table_stats_show('DMHR','EMPLOYEE'); ----收集表信息
SQL> dbms_stats.column_stats_show('DMHR','EMPLOYEE','JOB_ID'); ---收集列信息
SQL> more --展示更多列信息
SQL> spool off

2、关于分区表
create table t_partrangetab
(logtime datetime,
userid int,
username varchar(20),
areaid int,
optype int) PARTITION BY RANGE(logtime)
( PARTITION p202401 VALUES LESS THAN('2024-01-01') TABLESPACE tbs01,
PARTITION p202402 VALUES LESS THAN('2024-02-01') TABLESPACE tbs02,
PARTITION p202403 VALUES LESS THAN('2024-03-01') TABLESPACE tbs03,
PARTITION p202404 VALUES LESS THAN('2024-04-01') TABLESPACE tbs04);

insert into t_partrangetab(logtime, userid, username, areaid, optype)
select sysdate - numtodsinterval(level,'day'), level, DBMS_RANDOM.STRING('A',20), mod(level,5),
mod(level,10)
from dual
connect by rownum <=10000;

select * from t_partrangetab limit 5;
select count(*) from t_partrangetab;

SELECT count() FROM t_partrangetab PARTITION (p202401 );
SELECT count(
) FROM t_partrangetab PARTITION (p202402 );
SELECT count() FROM t_partrangetab PARTITION (p202403 );
SELECT count(
) FROM t_partrangetab PARTITION (p202404 );

alter table t_partrangetab add PARTITION p202405 VALUES LESS THAN ('2024-05-01') TABLESPACE tbs05;

alter table T_PARTRANGETAB MERGE PARTITIONS p202401, p202402 INTO PARTITION p202402;
alter table T_PARTRANGETAB SPLIT PARTITION p202402 AT ('2024-01-01') INTO
(PARTITION p202401,PARTITION p202402);

分区交换
分区交换可以将分区表数据与普通表数据交换(但交换后的数据不一定满足分区条件,不满足分区条件的数据可以通过分区拆分来重组数据) 。
create table t_testtab as select * from t_partrangetab where 1=0;
select count() from t_testtab;
alter table t_partrangetab EXCHANGE PARTITION p202401 WITH TABLE t_testtab;
select count(
) from t_partrangetab PARTITION(p202401 );
select count(*) from t_testtab;

将普通表的数据交换至分区表中:
create table t_partrangetesttab
(logtime datetime,
userid int,
username varchar(20),
areaid int,
optype int) PARTITION BY RANGE(logtime)
( PARTITION p202201 VALUES LESS THAN('2022-01-01') TABLESPACE tbs01,
PARTITION p202202 VALUES LESS THAN('2022-02-01') TABLESPACE tbs02,
PARTITION p202203 VALUES LESS THAN('2022-03-01') TABLESPACE tbs03,
PARTITION p202204 VALUES LESS THAN('2022-04-01') TABLESPACE tbs04,
PARTITION p202205 VALUES LESS THAN('2022-05-01') TABLESPACE tbs01,
PARTITION p20226 VALUES LESS THAN('2022-06-01') TABLESPACE tbs02,
PARTITION p202207 VALUES LESS THAN('2022-07-01') TABLESPACE tbs03,
PARTITION p202208 VALUES LESS THAN('2022-08-01') TABLESPACE tbs04,
PARTITION p202209 VALUES LESS THAN('2022-09-01') TABLESPACE tbs01,
PARTITION p202210 VALUES LESS THAN('2022-10-01') TABLESPACE tbs02,
PARTITION p202211 VALUES LESS THAN('2022-11-01') TABLESPACE tbs03,
PARTITION p202301 VALUES LESS THAN('2023-01-01') TABLESPACE tbs04);
alter table t_partrangetesttab EXCHANGE PARTITION p202301 WITH TABLE t_testtab;
select count(*) from t_partrangetesttab PARTITION(p202301);

分区拆分
分区交换后,数据集中在某个分区中,如果要分区数据重新分布到各自分区中,可以做分区拆
分。
alter table t_partrangetesttab SPLIT PARTITION p202301 AT ('2022-12-15') INTO
(PARTITION p20221215,PARTITION p202301);
分区删除:
alter table t_partrangetesttab drop PARTITION p202211;
分区查询:
select * from USER_TAB_PARTITIONS;
select count() from t_partrangetesttab PARTITION(p202301); -- 16178
select count(
) from t_partrangetesttab PARTITION(p202207);
select count() from t_partrangetesttab PARTITION(p202209);
select count(
) from t_partrangetesttab PARTITION(p202208);

3、关于冷备(用dmrman)
1、原库停库
2、原库备份:DMRMAN>BACKUP DATABASE '/dm8/dmdata/MM01/dm.ini'; 存放到BAK_PATH参数路径下
3、传输到目标库 :scp -r $BAK_PATH/* dmdba@X.X.X.X:/dm8/bak1
4、目标库只安装了软件,用DMRMAN还原:
DMRMAN>RESTORE DATABASE '/dm8/dmdata/MM01/DAMENG/dm.ini' FROM BACKUPSET '/dm8/bak1/DB_MM01_FULL_20240406_012317_588256';
DMRMAN>recover DATABASE '/dm8/dmdata/MM01/DAMENG/dm.ini' FROM BACKUPSET '/dm8/bak1/DB_MM01_FULL_20240406_012317_588256';
DMRMAN>recover DATABASE '/dm8/dmdata/MM01/DAMENG/dm.ini' update db_magic;

4、关于审计
1) V$AUDITRECORDS
显示审计文件路径下的审计文件的审计记录,审计文件路径由INI参数AUD_PATH指定,
若未指定,则默认为 SYSTEM_PATH 路径。
此动态性能视图只有在审计开关打开时才有内容,且只有审计用户可以查询。
conn SYSAUDITOR/Dameng123
SP_SET_ENABLE_AUDIT (1);
--审计记录(能查详细SQL):
select * from V$AUDITRECORDS;
--审计信息查阅:
select * from SYSAUDITOR.SYSAUDIT;

审计日志存放路径:
审计日志存放在操作系统文件中(AUDIT_开头.log 文件,默认在 SYSTEM_PATH 下,
也可以配置 AUD_PATH 设置审计日志文件存放路径),但是是加密的,无法明文读取;
LINEID PARA_NAME PARA_VALUE


1 SYSTEM_PATH /dm8/dmdata/MM01

审计日志的解析工具:
1)命令行工具 dmaudtool
dmaudtool USERID=SYSAUDITOR/SYSAUDITOR@192.168.40.20:5236 AFIL_PATH=/dm8/dmdata/MM01 OUT_PATH=/dm8/dmdata/MM01/aud_out R_SEP=AAAA
2)DM 审计分析工具
[dmdba@Kylin10DCA01 ~]$ cd /dm8/tool
[dmdba@Kylin10DCA01 tool]$ ./analyzer
查审计日志查看器中直接添加审计文件,即可查看解析。

5、关于外部表
create user dmtest identified by "password1";
grant create any directory to dmtest;
grant select any directory to dmtest;
提示Grantor no granted privilege.——sysdba没有赋权权限,是因为参数默认为0,默认禁止给用户授"any"权限。需修改此参数为1:
SP_SET_PARA_VALUE(1,'ENABLE_DDL_ANY_PRIV',1);
grant create any directory to dmtest; 执行成功
connect dmtest/password1
create directory dir_data as '/dm8/dmdata/test/outdir';
conn sysdba/Dameng123
grant read,write on directory dir_data to dmtest;
grant connect,resource to dmtest;

drop table t_extemp;
create EXTERNAL TABLE t_extemp
(
"EMPLOYEE_ID" INT,
"EMPLOYEE_NAME" VARCHAR(20),
"IDENTITY_CARD" VARCHAR(18),
"EMAIL" VARCHAR(50),
"PHONE_NUM" VARCHAR(20),
"HIRE_DATE" DATE,
"JOB_ID" VARCHAR(10),
"SALARY" INT,
"COMMISSION_PCT" INT,
"MANAGER_ID" INT,
"DEPARTMENT_ID" INT)
from DATAFILE DEFAULT DIRECTORY DIR_DATA LOCATION ('EMPLOYEE.txt')
parms (fields DELIMITED by '|', records 0x0d0a, skip 1, character_code 'UTF-8');

查询外部表:
select * from t_extemp;

---创建外部表语句见《DM8 SQL.pdf 3.6.1.2 定义外部表》

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服