注册
达梦DCA培训学习总结
培训园地/ 文章详情 /

达梦DCA培训学习总结

Barry 2023/02/16 1332 1 0


最近参加了公司组织的DCA培训,学习了国产数据库dm8的一些发展历程以及相关操作,借此机会想将自己整理的常用操作文档分享给大家,希望能帮助大家通过DCA考试并拿到证书。

达梦配到的GUI管理工具非常完善,linux和windows都是相同的操作模式,用达梦manager、console等管理工具比较方便,推荐大家使用。

一、表空间和重做日志

表空间可以在manager管理工具中做新增、修改、删除、调整大小、重命名等操作,但是重做日志我一开始没找到在哪修改,还以为只能通过sql修改呢。

在管理工具中修改重做日志方式如下(日志文件大小只能扩大,不能缩小;只能新增文件,不能删除文件):
图片1.png

重做日志文件命令行的修改方式:

-- 添加重做日志文件
alter database add LOGFILE '/dm8/data/DAMENG/DAMENG03.log' SIZE 256;
-- Resize 重做日志文件
alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG01.log' to 300;

二、用户管理

练习案例 1:

建立用户 TEST,用户可以建立自己的表,有属于自己的表空间,用户密码要求每 90天变更一次。

需要我们先给TEST用户创建个表空间,这个我注意到了,但是在设置90天变更一次密码的时候选错了。
图片2.png

宽限期指密码过期后宽限多少天。口令有效期=60表示60天要变更一次密码。

练习案例 2:

规划一个用户 test5,用户每 60 天变更一次密码,密码的宽限期为 3 天,密码尝试连接 2 次失败,账号锁定 5 分钟,用户能查询 dmhr.eployee 表。

这道题我错在给用户赋权,“用户能查询 dmhr.eployee 表”指的是用户只有对这张表的查询权限,我勾了个ALL,把对这张表的所有权限都给test5了。
图片3.png

如果想只给test5用户dmhr.eployee表的部分列的权限,应该先收回原先授予该用户的select权限,然后再去授予查看某几个列的权限。收回权限可以在管理工具中直接把勾去掉。

这次我注意到了只勾select权限。

我之前还真没遇到过用户锁定的情况,要不是老师讲到,也没想到自己去试一下,说明我经验不够,遇到的场景太少了,这次培训真的学到了很多。

用户解锁:alter user test5 account unlock;

用户锁定:alter user test5 account lock;

三、调出图形化界面

因为我本地磁盘空间比较小,虚拟机都是最小安装,无图形化,一直无法模拟linux下调出图形化,所以在这里把老师演示的截图保留一下,以防考试的时候调不出图形化界面。

在虚拟机外面(第三方工具 xshell&xmanager)的调用方法:
图片4.png

在虚拟机里面(本机)的调用方法:
图片5.png

四、表的管理

案例1:

规划一张学员信息表

表名:STU

学号:ID char(10)

姓名:sname varchar(20) not null

性别: sex char(1)

年龄:age int

电话:tel varchar(15) not null

家庭住址:address varchar(50)

表空间:STU

约束:主键列----学号,非空----姓名和电话

备注:studentinfo
图片6.png

注意非空字段的设置及精度长度的设置,切换数据类型时精度长度会变,需要特别注意

图片7.png
注意表空间的设置。

案例2:
用脚本导入数据。

在disql中执行方式如下:
图片8.png

使用disql命令时需要注意,如果改动了默认端口,进入命令行时需要带上端口号,最全的方式连接数据库:

[dmdba@localhost bin]$ ./disql sysdba/SYSDBA@192.168.45.102:5237

用户名/密码@ip或主机名:数据库实例端口号

在windows下脚本执行方式如下:
图片9.png
图片10.png

最后别忘了commit,或者把commit写在脚本里(梦数据库默认事务提交的方式是手动提交)。

六、约束

1、主键约束

图片11.png
主键的特点是,非空,值唯一,还可以设置自增值。我试了下,int系列的可以设置自增值,char之类的字符型不行,float之类的数值型也不行。

2、唯一约束

图片12.png

3、非空约束

图片13.png

4、外键约束

图片14.png
在这一步我犯了三个错误,第一个是,我在新建表的时候,没有找到建外键的地方,后来发现建好表后,可以点开表进行创建外键和约束。

第二个错误是,我想test2表的test1_id列和test1表的id列创建外键,但是参照列却没有匹配的,检查了下发现如果把test1的id设置为主键,就可以和test2设置外键关系了。

第三个错误,test2表的test1_id列和test1表的id列数据类型不同,导致建立外键失败。这都是些小细节,仔细研究下也能解决,但是考试的时间有限,如果能提前多练习,熟练后会节约考试时间,提高通过率。

5、检查约束
图片15.png
我发现,不用指定到特定的列,直接添加约束即可,约束名不能为空,不然会报错。

七、备份还原

听一个同事说,他在DCA考试的时候,第八题要求执行一个脚本,因为没有执行权限,所以他先放着了,把其他题目完成后,用root修改脚本权限,执行脚本,数据库就被破坏了,还好他比较冷静,用归档恢复了,最后成功考过DCA,所以我在这里模仿破坏表空间,用归档恢复。

1、数据准备

注意:最好都用dmdba用户来操作。

1)dmdba用户创建GRC表空间和GRC用户

SQL> create tablespace GRC datafile 'GRC.DBF' size 100;

SQL> create user GRC identified by "888888888" default tablespace GRC;

SQL> grant create table to GRC;

SQL> grant insert table to GRC;

SQL> grant select table to GRC;

创建用户后会自动创建和用户同名的模式。

2)在GRC模式下创建表test1

[dmdba@dameng1 bin]$ ./disql GRC/888888888

SQL> create table test1(id int,name varchar);

SQL> insert into test1 values(1,'test');

SQL> commit;

SQL> select * from test1;

3)先开启归档

SQL> ALTER DATABASE MOUNT;

SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST = /dm8/data/DAMENG/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';

SQL> ALTER DATABASE ARCHIVELOG;

SQL> alter system set 'ARCH_INI'=1 both;

SQL> select arch_mode from v$database;

SQL> ALTER DATABASE OPEN;

4)切换回GRC用户在GRC模式下创建表test2

[dmdba@dameng1 bin]$ ./disql GRC/888888888

SQL> create table test2(id int,name varchar,type int);

SQL> insert into test2 values(1,'test',1);

SQL> commit;

SQL> checkpoint(100);

5)切换到dmdba用户备份

SQL> backup database backupset '/dm8/data/DAMENG/BAK/bak1';

6)切换回GRC用户在GRC模式下创建表test3

[dmdba@dameng1 bin]$ ./disql GRC/888888888

SQL> create table test3(id int,name varchar,type int,sex char);

SQL> insert into test3 values(1,'test',1,'1');

SQL> commit;

SQL> checkpoint(100);

在这里我做了个checkpoint操作,因为担心数据还没进归档日志。

2、破坏表空间

mv GRC.DBF GRC2.DBF

图片16.png

3、再查询刚刚在GRC表空间新建的表

图片17.png
发现还能查到

4、重启实例

systemctl restart DmServiceDMSERVER

5、再查询测试表

图片18.png
重启后再用disql连接,发现数据库是mount状态,也查不到test3表了。

6、恢复

可以直接恢复被破坏的表空间,也可以恢复整个数据库,效果是一样的。

我是直接恢复的整个数据库,只能用dmrman恢复。

‘bak1’这个备份集,是在创建test3表之前做的备份,如果直接从备份集恢复,test3数据就不存在了,所以需要从归档恢复。

1)root用户关闭实例

[root@dameng1 DAMENG]# systemctl stop DmServiceDMSERVER

2)dmdba用户做还原

[dmdba@dameng1 bin]$ ./dmrman

RMAN> restore  database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/data/DAMENG/BAK/bak1';

RMAN> recover  database '/dm8/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm8/data/DAMENG/arch';

RMAN> recover  database '/dm8/data/DAMENG/dm.ini' update db_magic;

3)root用户启动实例

[root@dameng1 DAMENG]# systemctl start DmServiceDMSERVER

4)dmdba用户验证表空间是否恢复

图片19.png
恢复成功。

7、测试直接还原表空间

接着上面的数据,模拟直接从表空间还原,这里踩了个坑。我之前做了个备份,备份集是bak1,然后模拟破坏表空间,全库恢复后,更新了magic,我再次破坏表空间,就无法用原来的备份集恢复直接恢复表空间了,也没有做新的备份,这种情况下,还是只能做全库恢复。全库恢复后,再做个备份,备份集是bak2。

1)切换到dmdba用户备份

SQL>backup database backupset '/dm8/data/DAMENG/BAK/bak2';

2)root用户破坏表空间

mv GRC.DBF GRC3.DBF

root用户关闭实例

[root@dameng1 DAMENG]# systemctl stop DmServiceDMSERVER

3)dmdba用户还原表空间

restore database '/dm8/data/DAMENG/dm.ini' tablespace GRC from backupset '/dm8/data/DAMENG/BAK/bak2';

recover database '/dm8/data/DAMENG/dm.ini' tablespace GRC;

4)root用户启动实例

[root@dameng1 DAMENG]# systemctl start DmServiceDMSERVER

5)GRC用户测试是否还原成功

图片20.png

8. 结束

以上就是个人在学习和实践中进行的一些总结,DCA培训虽然结束,但是达梦数据库的学习不会终止,在公司的国产化战略中,我们也是以达梦数据库为首选,在今后的工作中,还需要多学习达梦官网文档及和官方的技术人员交流。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服