最近参加了公司组织的DCA培训,学习了国产数据库dm8的一些发展历程以及相关操作,借此机会想将自己整理的常用操作文档分享给大家,希望能帮助大家通过DCA考试并拿到证书。
达梦配到的GUI管理工具非常完善,linux和windows都是相同的操作模式,用达梦manager、console等管理工具比较方便,推荐大家使用。
表空间可以在manager管理工具中做新增、修改、删除、调整大小、重命名等操作,但是重做日志我一开始没找到在哪修改,还以为只能通过sql修改呢。
在管理工具中修改重做日志方式如下(日志文件大小只能扩大,不能缩小;只能新增文件,不能删除文件):
重做日志文件命令行的修改方式:
-- 添加重做日志文件
alter database add LOGFILE '/dm8/data/DAMENG/DAMENG03.log' SIZE 256;
-- Resize 重做日志文件
alter database RESIZE LOGFILE '/dm8/data/DAMENG/DAMENG01.log' to 300;
建立用户 TEST,用户可以建立自己的表,有属于自己的表空间,用户密码要求每 90天变更一次。
需要我们先给TEST用户创建个表空间,这个我注意到了,但是在设置90天变更一次密码的时候选错了。
宽限期指密码过期后宽限多少天。口令有效期=60表示60天要变更一次密码。
规划一个用户 test5,用户每 60 天变更一次密码,密码的宽限期为 3 天,密码尝试连接 2 次失败,账号锁定 5 分钟,用户能查询 dmhr.eployee 表。
这道题我错在给用户赋权,“用户能查询 dmhr.eployee 表”指的是用户只有对这张表的查询权限,我勾了个ALL,把对这张表的所有权限都给test5了。
如果想只给test5用户dmhr.eployee表的部分列的权限,应该先收回原先授予该用户的select权限,然后再去授予查看某几个列的权限。收回权限可以在管理工具中直接把勾去掉。
这次我注意到了只勾select权限。
我之前还真没遇到过用户锁定的情况,要不是老师讲到,也没想到自己去试一下,说明我经验不够,遇到的场景太少了,这次培训真的学到了很多。
用户解锁:alter user test5 account unlock;
用户锁定:alter user test5 account lock;
因为我本地磁盘空间比较小,虚拟机都是最小安装,无图形化,一直无法模拟linux下调出图形化,所以在这里把老师演示的截图保留一下,以防考试的时候调不出图形化界面。
在虚拟机外面(第三方工具 xshell&xmanager)的调用方法:
在虚拟机里面(本机)的调用方法:
规划一张学员信息表
表名:STU
学号:ID char(10)
姓名:sname varchar(20) not null
性别: sex char(1)
年龄:age int
电话:tel varchar(15) not null
家庭住址:address varchar(50)
表空间:STU
约束:主键列----学号,非空----姓名和电话
备注:studentinfo
注意非空字段的设置及精度长度的设置,切换数据类型时精度长度会变,需要特别注意
注意表空间的设置。
案例2:
用脚本导入数据。
在disql中执行方式如下:
使用disql命令时需要注意,如果改动了默认端口,进入命令行时需要带上端口号,最全的方式连接数据库:
[dmdba@localhost bin]$ ./disql sysdba/SYSDBA@192.168.45.102:5237
在windows下脚本执行方式如下:
最后别忘了commit,或者把commit写在脚本里(梦数据库默认事务提交的方式是手动提交)。
主键的特点是,非空,值唯一,还可以设置自增值。我试了下,int系列的可以设置自增值,char之类的字符型不行,float之类的数值型也不行。
在这一步我犯了三个错误,第一个是,我在新建表的时候,没有找到建外键的地方,后来发现建好表后,可以点开表进行创建外键和约束。
第二个错误是,我想test2表的test1_id列和test1表的id列创建外键,但是参照列却没有匹配的,检查了下发现如果把test1的id设置为主键,就可以和test2设置外键关系了。
第三个错误,test2表的test1_id列和test1表的id列数据类型不同,导致建立外键失败。这都是些小细节,仔细研究下也能解决,但是考试的时间有限,如果能提前多练习,熟练后会节约考试时间,提高通过率。
5、检查约束
我发现,不用指定到特定的列,直接添加约束即可,约束名不能为空,不然会报错。
听一个同事说,他在DCA考试的时候,第八题要求执行一个脚本,因为没有执行权限,所以他先放着了,把其他题目完成后,用root修改脚本权限,执行脚本,数据库就被破坏了,还好他比较冷静,用归档恢复了,最后成功考过DCA,所以我在这里模仿破坏表空间,用归档恢复。
注意:最好都用dmdba用户来操作。
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;
创建用户后会自动创建和用户同名的模式。
[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;
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;
[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);
SQL> backup database backupset '/dm8/data/DAMENG/BAK/bak1';
[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操作,因为担心数据还没进归档日志。
mv GRC.DBF GRC2.DBF
发现还能查到
systemctl restart DmServiceDMSERVER
重启后再用disql连接,发现数据库是mount状态,也查不到test3表了。
可以直接恢复被破坏的表空间,也可以恢复整个数据库,效果是一样的。
我是直接恢复的整个数据库,只能用dmrman恢复。
‘bak1’这个备份集,是在创建test3表之前做的备份,如果直接从备份集恢复,test3数据就不存在了,所以需要从归档恢复。
[root@dameng1 DAMENG]# systemctl stop DmServiceDMSERVER
[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;
[root@dameng1 DAMENG]# systemctl start DmServiceDMSERVER
恢复成功。
接着上面的数据,模拟直接从表空间还原,这里踩了个坑。我之前做了个备份,备份集是bak1,然后模拟破坏表空间,全库恢复后,更新了magic,我再次破坏表空间,就无法用原来的备份集恢复直接恢复表空间了,也没有做新的备份,这种情况下,还是只能做全库恢复。全库恢复后,再做个备份,备份集是bak2。
SQL>backup database backupset '/dm8/data/DAMENG/BAK/bak2';
mv GRC.DBF GRC3.DBF
root用户关闭实例
[root@dameng1 DAMENG]# systemctl stop DmServiceDMSERVER
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;
[root@dameng1 DAMENG]# systemctl start DmServiceDMSERVER
以上就是个人在学习和实践中进行的一些总结,DCA培训虽然结束,但是达梦数据库的学习不会终止,在公司的国产化战略中,我们也是以达梦数据库为首选,在今后的工作中,还需要多学习达梦官网文档及和官方的技术人员交流。
文章
阅读量
获赞