1. 数据库软件安装
(1) 以 dmdba 用户身份安装数据库,安装目录在 /dm/dmdbs 目录下 (目录需自己创建)
[root@localhost ~]# groupadd dinstall
[root@localhost ~]# useradd -g dinstall -m dmdba
[root@localhost ~]# passwd dmdba
更改用户 dmdba 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# mkdir -r /dm/dmdbms
[root@localhost ~]# chown dmdba:dinstall /dm -R
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@localhost ~]# ls /mnt
'DM8 Install.pdf' DMInstall.bin
[root@localhost ~]# cp /mnt/DMInstall.bin /home/dmdba
[root@localhost ~]# chmod 755 /home/dmdba/DMInstall.bin
------------------------窗口2
[dmdba@localhost ~]$ ls
DMInstall.bin
[dmdba@localhost ~]$ ./DMInstall.bin -i
请以root系统用户执行命令:
/dm/dmdbms/script/root/root_installer.sh
安装结束
[dmdba@localhost ~]$ sudo /dm/dmdbms/script/root/root_installer.sh
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] dmdba 的密码:
dmdba 不在 sudoers 文件中。此事将被报告。
----------------------------窗口1
[root@localhost ~]# /dm/dmdbms/script/root/root_installer.sh
----------------------------窗口2
[dmdba@localhost ~]$ vi ~/.bash_profile
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH
(2) 需要使用 root 身份执行的脚本请使用 dmdba 用户增加 sudo 执行 (脚本前加 sudo)。
2. 创建数据库实例
[dmdba@localhost ~]$ dbca.sh
数据库名 : EXAMDB
实例名 : EXAMSVR
数据库目录 : /dm/data
端口 : 5238
路径拼接数据库名 : 是
控制文件 :
/dm/data/EXAMDB/dm.ctl
数据文件 :
/dm/data/EXAMDB/SYSTEM.DBF
/dm/data/EXAMDB/ROLL.DBF
/dm/data/EXAMDB/TEMP.DBF
/dm/data/EXAMDB/MAIN.DBF
日志文件 :
/dm/data/EXAMDB/EXAMDB01.log
/dm/data/EXAMDB/EXAMDB02.log
/dm/data/EXAMDB/EXAMDB03.log
ELOG :
/dm/data/EXAMDB/
簇大小 : 32页
页大小 : 16K
日志文件大小 : 256M
时区设置 : +08:00
页面检查 : 默认
字符集 : UTF-8
USBKEY-PIN :
页分片大小 : 4096
标识符大小写敏感 : 是
空格填充模式 : 否
改进的字符串HASH算法 : 是
启用日志文件加密 : 否
启用全库加密 : 否
启用加密 : 否
修改 SYSDBA的口令
修改 SYSAUDITOR的口令
---窗口1
[root@localhost /]# mv /dm/dmdbms/bin/DmServiceEXAMSVR.service /usr/lib/systemd/system/DmServiceEXAMSVR.service
[root@localhost /]# systemctl enable DmServiceEXAMSVR.service
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceEXAMSVR.service → /usr/lib/systemd/system/DmServiceEXAMSVR.service.
[root@localhost /]#
[root@localhost /]#
[root@localhost /]# systemctl start DmServiceEXAMSVR.service
[root@localhost /]# systemctl restart DmServiceEXAMSVR.service
(1) 实例的数据文件存放目录:在 /dm/data/ 目录下。
(2) 数据库名设置为 EXAMDB,实例名设置为 EXAMSVR,端口号设置为 5238
(3) 数据库管理员 SYSDBA 和 SYSAUDITOR 密码统一设置为 Dameng123。
(4) 设置簇大小为 32 页,页大小为 16K、字符集为 GB18030
(5) 设置数据库日志文件大小为 256M,3 个联机日志文件。
3. 存储管理
[dmdba@localhost ~]$ manager
(1) 创建表空间 EXDATA:
a) 表空间数据文件存储在 /dm/data/EXAMDB。
b) 表空间包含两个数据文件,分别为 EXDATA01.DBF 和 EXDATA02.DBF。
c) 每个数据文件初始大小为 128M,打开文件的自动扩展功能,每次扩展 20M,每个数据文件最大 20G。

(2) 创建表空间 EXIDX:
a) 表空间数据文件存储在 /dm/data/EXAMDB 目录,包含 1 个数据文件 EXIDX.DBF 数据文件初始大小为 64M,打开文件的自动扩展功能,每次扩展 10M,每个数据文件最大 10G

4. 用户和用户资源管理
(1) 为提高密码安全性,创建资源限制 PRO_EXAM 管理密码安全,要求密码 180 天后过期,并且用户必须把密码修改过 3 次后,才能使用过去用过的密码。

(2) 创建角色 ROLE_EXAM,角色 ROLE_EXAM 具有创建表、视图、索引、物化视图、存储过程的权限。


(3) 为数据库创建用户 EXAM,密码为 Dameng123,默认数据表空间为 EXDATA,默认索引表空间为 EXIDX,使用资源限制 PRO_EXAM 管理 EXAM 用户的资源限制,使用角色 ROLE_EXAM 管理用户的权限


5. 表管理
在 EXAM 用户下创建表 COURSES、STUDENTS、SCORES。三个表的结构设计如下:
课程表(COURSES):存储课程信息
表格
字段名 数据类型 约束 说明(建表时不需要体现说明部分)
COURSE_ID INT PRIMARY KEY 课程 ID(主键)
COURSE_NAME VARCHAR(50) NOT NULL 课程名称
CREDIT NUMBER(3,1) NOT NULL 学分
COURSE_TYPE BIT NOT NULL 课程类型;1: 必修,0: 选修
TEACHER VARCHAR(50) NOT NULL 任课教师

学生表(STUDENTS):存储学生基本信息
字段名 数据类型 约束 说明(建表时不需要体现说明部分)
STU_ID INT PRIMARY KEY 学生ID(主键)
STU_NAME VARCHAR(50) NOT NULL 学生姓名
GENDER BIT NOT NULL 性别;0:男,1:女
BIRTH_DATE DATE NOT NULL 出生日期
CLASS VARCHAR(20) NULL 班级
EMAIL VARCHAR(50) NULL 邮箱

成绩表 (SCORES):存储学生成绩信息
字段名 数据类型 约束 说明(建表时不需要体现说明部分)
SCORE_ID INT PRIMARY KEY 成绩 ID (主键)
STUDENT_ID INT FOREIGN KEY 学生 ID (外键)
COURSE_ID INT FOREIGN KEY 课程 ID (外键)
EXAM_DATE DATE NOT NULL 考试日期
SCORE NUMBER(5,2) CHECK(0<=SCORE<=100) 成绩 (0-100)



补充要求:
其中:
(1) 根据表结构设计给三张表创建主键。
(2) 根据表结构设计,创建外键参照列和检验约束。
6. 数据统计和优化
(1) 执行/opt/exam/SQL目录下三个 sql 脚本,将数据导入至 COURSES 表、STUDENTS 表、SCORES 表。
(2) 在 EXAM 用户下按要求创建视图,要求如下:
a) 创建视图V_SCORESUMTOP,查询学生总成绩,按总成绩排行,取前十行的学生,展示学生姓名,学生总成绩。

b) 创建视图V_STUSCORE,查询展示平均分数 85 以上的学生及该学生各科成绩,展示学生姓名、课程名称、课程分数、平均分数,按平均分倒序排序 (平均分最大的排在最前面)。

(3) 在 EXAM 用户下创建物化视图MV_OSDBSCORE,查询课程名"Database systems"和"operating systems"两科的学生成绩,展示学生名、课程名和课程分数。

(4) 为了提升查询效率,请在学生表 STUDENTS 的 STU_NAME 姓名列添加索引IND_STU_NAME,索引数据存放在 EXIDX 表空间。


(三) 数据安全
7. 数据库逻辑导入导出
(1) 对 EXAM 用户逻辑导出,要求如下:
a) 备份文件存放在/dm/backup/dexp中,备份文件命名为EXAM.dmp,日志文件命名为EXAM.log。
b) 逻辑备份文件存放在其他路径下,本小题不得分。。


(2) 导入数据
a) 创建用户 TESTEXP,密码 Dameng123,并赋予 TESTEXP 用户 RESOURCE、SOI、VTI 角色相关权限。

b) 将 EXAM 用户下所有对象和数据导入到 TESTEXP 用户下。



8. 编写存储函数,查询学生成绩总分
(1) 在 EXAM 用户下创建函数EXAM.F_GETSCORE,根据指定的学生编号,返回该学生成绩总分。
(2) 如果没有该学生,抛出异常,返回 - 99。

9. 数据库安装环境配置
(1) 使用 python3 安装 dmPython 驱动,源码在达梦安装目录/dm/dmdbs/drivers/python/dmPython下,安装至默认路径。
[dmdba@localhost ~]$ cd /dm/dmdbms/drivers/python/dmPython
[dmdba@localhost dmPython]$ python3 setup.py install

(2) 编写/opt/exam/目录下test.py脚本,使其连接 DM 数据库并查询学生表 STUDENTS 的数据。

(3) 执行python3 /opt/exam/test.py成功。
