用途:本文只写 DCA 考试实操内容。流程按"考试准备 -> 环境检查 -> 挂载安装 -> 建库启停 -> 对象管理 -> 备份接口 -> 最后检查"整理。
说明:笔记中的 SQL 都是基础语句,不包含复杂操作,也不一定完全符合考试题目要求。考试时建议优先使用 Manager 等图形化工具完成题目要求,命令和 SQL 主要用于理解原理、查看 DDL、排错和图形化失败时兜底。
1. 考试注意
1.1 开两个终端窗口
创建dmdba用户后同时开两个 SSH 窗口:
| 窗口 | 登录用户 | 用途 |
|---|---|---|
| 窗口 1 | root |
防火墙、SELinux、挂载 ISO、建用户、注册服务、启停服务 |
| 窗口 2 | dmdba |
安装、建库、DIsql、导入导出、执行 SQL |
两个窗口都先执行图形界面 DISPLAY 配置,防止后面打开安装器或 Manager 工具失败:
bash
export DISPLAY=本机IP:0.0
echo $DISPLAY
说明:
本机IP是 Windows 上 Xmanager 监听的地址。- 如果使用 Xshell 的 X11 Forwarding,
echo $DISPLAY可能显示localhost:10.0;如果考试要求统一用 Xmanager 直连,就按export DISPLAY=本机IP:0.0。 - 两个窗口都执行一次,避免切换用户后环境变量丢失。
打开配置文件:
bash
vi /etc/ssh/sshd_config
重点检查这两项:
text
X11Forwarding yes
X11UseLocalhost yes
考试说明:
- 要利用好图形化工具,安装、建库、表空间、用户权限、日志管理等复杂操作尽量使用图形化工具完成。
- 图形化工具能减少长命令参数写错的概率;命令行模板主要作为图形化失败时的兜底和检查手段。
- 如果改过
sshd_config,通常需要重启 sshd;考试现场优先少动服务器,只有 X11 转发失败时再排查这里。
1.2 配置 DM_HOME 和 PATH
bash
export DM_HOME=/dm/dmdbms
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
检查:
bash
echo $DM_HOME
which disql
which dexp
which dimp
说明:
export只对当前终端生效。- root 窗口和 dmdba 窗口都可能需要分别执行。
- 配好后执行
disql、dexp、dimp可以少写完整路径。
1.3 关闭防火墙和 SELinux
bash
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
永久关闭 SELinux:
bash
vi /etc/selinux/config
把配置改成:
text
SELINUX=disabled
考试注意:
setenforce 0是临时关闭,重启后可能恢复。
2. 环境检查与用户准备
2.1 检查系统和资源
bash
hostname
ip addr
df -h
free -m
uname -a
lscpu
lsblk
2.2 创建安装用户和目录
bash
groupadd dinstall
useradd -g dinstall -m dmdba
passwd dmdba
id dmdba
bash
mkdir -p /dm/dmdbms /dm/data /dm/backup
chown -R dmdba:dinstall /dm
chmod -R 775 /dm
ls -ld /dm /dm/dmdbms /dm/data /dm/backup
说明:
-g dinstall指定主组。-m自动创建/home/dmdba。- 安装目录、数据目录、备份目录必须让
dmdba可写。
3. 挂载 ISO 与安装
3.1 挂载 ISO
虚拟机里已经把 DM ISO 挂到 CD/DVD 后,在 Linux 中执行:
bash
mkdir -p /mnt/dm
mount /dev/cdrom /mnt/dm
ls /mnt/dm
把安装文件复制出来:
bash
cp /mnt/dm/DMInstall.bin /home/dmdba/
chown dmdba:dinstall /home/dmdba/DMInstall.bin
chmod +x /home/dmdba/DMInstall.bin
ls -lh /home/dmdba/DMInstall.bin
复制完成后可以卸载 ISO:
bash
umount /mnt/dm
说明:
mount是把 ISO 光盘内容挂到 Linux 目录下。- 安装文件已经复制到
/home/dmdba后,后续安装不再依赖 CD-ROM,可以umount。 - 如果提示设备忙,先确认没有终端停留在
/mnt/dm目录。
3.2 启动安装
图形安装:
bash
su - dmdba
export DISPLAY=本机IP:0.0
cd /home/dmdba
./DMInstall.bin
命令行安装兜底:
bash
./DMInstall.bin -i
如果提示 /tmp 空间不足,手动指定大于 800M 的临时目录:
bash
# 若提示 /tmp 空间不足,需手动指定大于 800M 的临时目录
export DM_INSTALL_TMPDIR=/home/dmdba/ # 临时向系统广播这个环境变量
考试注意:
DM_INSTALL_TMPDIR只对当前终端临时生效,换窗口后要重新 export。- 图形界面打不开时,先检查
DISPLAY,再考虑用./DMInstall.bin -i。
4. dminit 初始化数据库
考试建议优先使用 dbca 图形化工具初始化数据库,因为它可以在建库流程里顺带完成实例服务注册,后续使用服务脚本启动更方便;dminit 命令行主要作为兜底方式和参数复习。
4.1 先看帮助
bash
cd /dm/dmdbms/bin
./dminit help
说明:
dminit help用来查看初始化参数。- 考试不确定参数名时,先看 help,不要硬背错参数。
4.2 初始化模板
bash
cd /dm/dmdbms/bin
./dminit PATH=/dm/data \
DB_NAME=DAMENG \
INSTANCE_NAME=DMSERVER \
PORT_NUM=5236 \
SYSDBA_PWD=Dameng123 \
SYSAUDITOR_PWD=Dameng123
一行版:
bash
./dminit PATH=/dm/data DB_NAME=DAMENG INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
参数重点:
| 参数 | 含义 |
|---|---|
PATH |
数据库文件生成目录 |
DB_NAME |
数据库名,常见为 DAMENG |
INSTANCE_NAME |
实例名,常见为 DMSERVER |
PORT_NUM |
监听端口,默认常见为 5236 |
SYSDBA_PWD |
SYSDBA 密码 |
SYSAUDITOR_PWD |
审计用户密码 |
初始化后重点确认:
bash
ls /dm/data/DAMENG
ls /dm/data/DAMENG/dm.ini
5. 数据库服务启动、停止与连接
5.1 服务注册
注册服务需要 root:
bash
su - root
cd /dm/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /dm/data/DAMENG/dm.ini
说明:
-t dmserver表示注册数据库服务。-p DMSERVER决定服务名后缀,通常生成DmServiceDMSERVER。-dm_ini必须指向真实实例的dm.ini。
5.2 启停方式
数据库服务启动停止常见有四种方式:
- 前台启动:直接执行
dmserver dm.ini,适合临时测试和看前台日志。 systemctl:通过系统服务管理,前提是已经注册服务。- 服务脚本:使用
DmServiceDMSERVER start/status/stop,推荐考试优先使用这种形式。 dmservice工具:图形化服务管理工具,适合图形界面可用时操作。
考试原则:
- 启停尽量使用同一种方式,不要一会儿前台、一会儿 systemctl 混着来。
- 推荐使用服务脚本形式,例如
/dm/dmdbms/bin/DmServiceDMSERVER start、/dm/dmdbms/bin/DmServiceDMSERVER stop。 - 如果前台启动,关闭时不要直接暴力关窗口,优先按题目要求规范停止。
5.3 连接验证
密码含特殊字符
bash
/dm/dmdbms/bin/disql SYSDBA/'"Dameng@1234"':5236
远程
sql
/dm/dmdbms/bin/disql SYSDBA/'"Dameng@1234"'@远程ip:远程端口
6. Manager 图形工具与 DDL 查看
表空间、用户、角色、授权、联机日志等整节内容都可以用 DM Manager 图形化工具操作。Manager 的优势是直观,适合考试里不确定 SQL 语法时快速完成对象创建。
bash
/dm/dmdbms/tool/manager
考试注意:
- Manager 创建表空间、用户、角色、授权后,一般可以查看对应 DDL。
- 会看 DDL 很重要:能确认图形化操作背后实际执行了什么 SQL。
7. 表空间、数据文件与联机日志
7.1 创建表空间
sql
CREATE TABLESPACE DMTBS
DATAFILE '/dm/data/DAMENG/DMTBS01.DBF'
SIZE 128
AUTOEXTEND ON NEXT 32 MAXSIZE 1024;
验证:
sql
SELECT NAME FROM V$TABLESPACE;
SELECT PATH, CLIENT_PATH FROM V$DATAFILE;
7.2 增加和扩展数据文件
sql
ALTER TABLESPACE DMTBS
ADD DATAFILE '/dm/data/DAMENG/DMTBS02.DBF'
SIZE 128
AUTOEXTEND ON NEXT 32 MAXSIZE 1024;
sql
ALTER TABLESPACE DMTBS
RESIZE DATAFILE '/dm/data/DAMENG/DMTBS01.DBF' TO 256;
7.3 迁移表空间数据文件
迁移表空间数据文件时,RENAME DATAFILE 类似 Linux 的 mv:既可以重命名,也可以移动路径。
操作顺序:
sql
ALTER TABLESPACE DMTBS OFFLINE;
ALTER TABLESPACE DMTBS
RENAME DATAFILE '/dm/data/DAMENG/DMTBS01.DBF'
TO '/dm/data/DAMENG/DMTBS01_NEW.DBF';
ALTER TABLESPACE DMTBS ONLINE;
考试注意:
- 迁移表空间数据文件前,该表空间必须脱机。
- 迁移完成后必须恢复为联机状态。
- 操作前后都查
V$DATAFILE,确认路径已经变更。
7.4 联机日志管理
联机日志又叫重做日志,记录数据库修改,默认两个文件,写满了就开始覆盖最旧记录。
查看日志:
sql
SELECT GROUP_ID, FILE_ID, PATH, RLOG_SIZE FROM V$RLOGFILE;
考试注意:
- 联机日志文件迁移必须在 MOUNT 状态下操作。
- 优先在manager图形界面里做,并查看 DDL。
8. 用户、角色与授权
8.1 创建用户和角色
sql
CREATE USER DMTEST IDENTIFIED BY "Dameng123" DEFAULT TABLESPACE DMTBS;
CREATE ROLE R_DCA;
GRANT CREATE TABLE, CREATE VIEW, CREATE INDEX TO R_DCA;
GRANT R_DCA TO DMTEST;
8.2 系统权限和对象权限
系统权限:
sql
GRANT CREATE TABLE, CREATE VIEW, CREATE INDEX TO DMTEST;
REVOKE CREATE VIEW FROM DMTEST;
对象权限:
sql
GRANT SELECT, INSERT, UPDATE ON DMHR.EMPLOYEE TO DMTEST;
REVOKE UPDATE ON DMHR.EMPLOYEE FROM DMTEST;
带转授权:
sql
GRANT SELECT ON DMHR.EMPLOYEE TO DMTEST WITH GRANT OPTION;
考试注意:
- 系统权限不带
ON 对象。 - 对象权限必须写
ON 模式名.对象名。 - Manager 图形化授权后,也要能看懂对应的
GRANT/REVOKEDDL。
检查:
sql
SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS WHERE USERNAME='DMTEST';
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='DMTEST';
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='DMTEST';
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='DMTEST';
9. SQL 脚本执行与提交
9.1 执行 SQL 文件
如果 SQL 文件在当前目录,先确认路径:
bash
pwd
ls
进入 DIsql 后推荐用绝对路径:
sql
START /home/dmdba/UTF-8/1-CREATESCHEMA.sql;
COMMIT;
也可以在 shell 中重定向执行:
bash
/dm/dmdbms/bin/disql SYSDBA/Dameng123@127.0.0.1:5236 < /home/dmdba/UTF-8/1-CREATESCHEMA.sql
执行后再登录补一次:
sql
COMMIT;
考试注意:
START xxx.sql后统一手写一次COMMIT;。- 因为最后一句是 DDL 才会自动提交;为了保险,所有脚本执行后统一手动提交。
- 相对路径依赖 DIsql 当前工作目录,考试推荐绝对路径。
10. 模式对象高频模板
本节 SQL 只用于理解对象类型和兜底练习。考试中表、约束、索引、视图、物化视图、序列、同义词等对象,尽量使用 Manager 图形化工具完成,并通过查看 DDL 确认实际执行语句。
10.1 表、约束、索引
sql
CREATE TABLE DMTEST.T_STUDENT(
ID INT PRIMARY KEY,
NAME VARCHAR(50) NOT NULL,
AGE INT CHECK(AGE BETWEEN 0 AND 120),
DEPT_ID INT
);
CREATE INDEX IDX_STUDENT_DEPT ON DMTEST.T_STUDENT(DEPT_ID);
sql
ALTER INDEX IDX_STUDENT_DEPT REBUILD;
DROP INDEX IDX_STUDENT_DEPT;
10.2 视图
sql
CREATE VIEW DMTEST.V_STUDENT AS
SELECT ID, NAME, AGE
FROM DMTEST.T_STUDENT
WHERE AGE >= 18;
只读视图:
sql
CREATE VIEW DMTEST.V_STUDENT_RO AS
SELECT ID, NAME
FROM DMTEST.T_STUDENT
WITH READ ONLY;
10.3 物化视图、序列、同义词
sql
CREATE MATERIALIZED VIEW DMTEST.MV_STUDENT_DEPT
REFRESH COMPLETE ON DEMAND
AS
SELECT DEPT_ID, COUNT(*) CNT
FROM DMTEST.T_STUDENT
GROUP BY DEPT_ID;
CALL DBMS_MVIEW.REFRESH('DMTEST.MV_STUDENT_DEPT');
sql
CREATE SEQUENCE DMTEST.SEQ_STUDENT_ID
START WITH 1
INCREMENT BY 1
NOCYCLE
CACHE 20;
sql
CREATE SYNONYM EMP FOR DMHR.EMPLOYEE;
CREATE PUBLIC SYNONYM PUB_EMP FOR DMHR.EMPLOYEE;
考试注意:
- 同义词只是别名,不等于授权。
- 序列第一次不能直接用
CURRVAL,先用NEXTVAL。 - 物化视图保存结果,普通视图只保存 SQL 定义。
11. 逻辑导出导入
准备目录:
bash
mkdir -p /dm/backup/dexp
chown -R dmdba:dinstall /dm/backup
cd /dm/dmdbms/bin
全库导出:
bash
./dexp SYSDBA/Dameng123 directory=/dm/backup/dexp file=fulldb.dmp log=fulldb.log full=Y
全库导入:
bash
./dimp SYSDBA/Dameng123 directory=/dm/backup/dexp file=fulldb.dmp log=imp_full.log full=Y
模式导出:
bash
./dexp SYSDBA/Dameng123 directory=/dm/backup/dexp file=dmhr.dmp log=dmhr.log schemas=DMHR
模式导入并重映射:
bash
./dimp SYSDBA/Dameng123 directory=/dm/backup/dexp file=dmhr.dmp log=imp_dmhr.log remap_schema=DMHR:DMTEST
检查:
bash
ls -lh /dm/backup/dexp
考试注意:
dexp/dimp是逻辑导出导入,不等同于物理备份。directory、file、log三个参数必须写清楚。- 模式导入前先准备目标用户、默认表空间和权限。
13. ODBC 和 dmPython
13.1 ODBC
配置驱动:
ini
[DM ODBC DRIVER]
Description = ODBC DRIVER FOR DM
Driver = /dm/dmdbms/bin/libdodbc.so
配置数据源:
ini
[DM]
Description = DM ODBC DSN
Driver = DM ODBC DRIVER
SERVER = 127.0.0.1
UID = SYSDBA
PWD = Dameng123
TCP_PORT = 5236
检查:
bash
odbcinst -j
isql DM SYSDBA Dameng123
13.2 dmPython
bash
cd /dm/dmdbms/drivers/python/dmPython
python3 setup.py install
测试:
python
import dmPython
conn = dmPython.connect(user='SYSDBA', password='Dameng123', server='127.0.0.1', port=5236)
cur = conn.cursor()
cur.execute('select 1')
print(cur.fetchone())
conn.close()
考试注意:
- ODBC 最容易错的是驱动路径。
- dmPython 最容易错的是
LD_LIBRARY_PATH、端口、密码。 - 配置完成后必须真实连接验证。
15. 高频易错点
- 两个窗口都要配置
export DISPLAY=本机IP:0.0。 - 防火墙和 SELinux 开头先处理,避免后面连接失败。
dminit是初始化数据库,不是安装软件。- 注册服务的
-dm_ini必须指向真实dm.ini。 - 启停服务尽量使用同一种方式。
- Manager 可以做表空间、授权、日志等操作,同时注意查看 DDL。
- 迁移表空间数据文件:表空间先
OFFLINE,迁移后ONLINE。 - 迁移联机日志:必须在 MOUNT 状态下操作。
START xxx.sql后统一COMMIT;。- 同义词不是授权,能解析对象名不代表有访问权限。
dexp/dimp导入前准备好目标用户、表空间、目录权限。