一、达梦数据库简介
达梦数据库(DM Database)是武汉达梦数据库有限公司推出的具有自主知识产权的高性能关系型数据库管理系统,符合SQL标准,支持多种操作系统平台,广泛应用于政府、金融、电信、能源等行业。
二、达梦数据库安装
1. 安装前准备
- 硬件要求:
- CPU:建议4核以上
- 内存:建议8GB以上
- 磁盘空间:至少50GB可用空间
- 操作系统支持:
- Windows Server 2008/2012/2016/2019
- Linux (RedHat/CentOS/SUSE/Ubuntu等主流发行版)
- 国产操作系统(麒麟、统信UOS等)
2. Linux系统安装步骤
- 下载安装包
- 从达梦官网下载对应版本的安装包(如dm8_20230101_x86_rh6_64.iso)
- 创建安装用户
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
- 设置环境变量
vi ~/.bash_profile
# 添加以下内容
export DM_HOME=/home/dmdba/dmdbms
export PATH=$DM_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
- 挂载ISO并安装
mount -o loop dm8_20230101_x86_rh6_64.iso /mnt
cd /mnt
./DMInstall.bin -i
- 按照图形界面提示完成安装
3. Windows系统安装步骤
- 下载Windows版安装程序
- 双击运行安装程序
- 按照向导提示完成安装
- 安装完成后可通过"开始菜单"中的达梦程序组访问数据库工具
三、数据库初始化
1. 创建数据库实例
# 使用dminit工具创建数据库
dminit path=/dmdata db_name=DAMENG instance_name=DMSERVER port_num=5236
2. 启动/停止数据库服务
# 启动服务
DmServiceDMSERVER start
# 停止服务
DmServiceDMSERVER stop
# 查看服务状态
DmServiceDMSERVER status
四、SQL基础使用
1. 连接数据库
# 使用disql命令行工具连接
disql SYSDBA/SYSDBA@localhost:5236
2. 基本SQL操作
创建表
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
dept_id INT,
salary DECIMAL(10,2),
hire_date DATE,
CONSTRAINT fk_dept FOREIGN KEY(dept_id) REFERENCES departments(dept_id)
);
插入数据
INSERT INTO employees VALUES(1, '张三', 10, 8000.00, '2020-01-15');
INSERT INTO employees VALUES(2, '李四', 20, 9500.00, '2019-05-22');
查询数据
-- 基本查询
SELECT * FROM employees;
-- 条件查询
SELECT emp_name, salary FROM employees WHERE salary > 8500;
-- 分组统计
SELECT dept_id, AVG(salary) as avg_salary
FROM employees
GROUP BY dept_id
HAVING AVG(salary) > 8000;
更新数据
UPDATE employees SET salary = salary * 1.1 WHERE dept_id = 10;
删除数据
DELETE FROM employees WHERE emp_id = 2;
3. 高级SQL特性
分页查询
-- 达梦特有的分页语法
SELECT * FROM employees LIMIT 10 OFFSET 20;
-- 或使用标准语法
SELECT * FROM employees OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
窗口函数
SELECT emp_name, dept_id, salary,
RANK() OVER(PARTITION BY dept_id ORDER BY salary DESC) as dept_rank
FROM employees;
事务控制
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 'A001';
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 'B002';
COMMIT;
-- 或 ROLLBACK; 回滚事务
五、数据库管理
1. 用户与权限管理
-- 创建用户
CREATE USER test_user IDENTIFIED BY "Test@123";
-- 授予权限
GRANT SELECT, INSERT ON employees TO test_user;
-- 撤销权限
REVOKE INSERT ON employees FROM test_user;
-- 创建角色并授权
CREATE ROLE report_viewer;
GRANT SELECT ON ALL TABLES TO report_viewer;
GRANT report_viewer TO test_user;
2. 备份与恢复
# 使用dmrman工具进行物理备份
dmrman CTLSTMT="BACKUP DATABASE '/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/backup/full_bak'"
# 逻辑备份(导出)
dexp SYSDBA/SYSDBA@localhost:5236 FILE=db_full.dmp LOG=db_full.log FULL=Y
# 逻辑恢复(导入)
dimp SYSDBA/SYSDBA@localhost:5236 FILE=db_full.dmp LOG=imp_db_full.log FULL=Y
3. 性能监控
-- 查看当前会话
SELECT * FROM V$SESSIONS;
-- 查看SQL执行计划
EXPLAIN SELECT * FROM employees WHERE dept_id = 10;
-- 查看锁信息
SELECT * FROM V$LOCK;
六、达梦特有功能
1. 兼容模式
达梦支持多种兼容模式,可模拟Oracle、MySQL等数据库行为:
-- 设置兼容模式
SP_SET_SESSION_PARA('COMPATIBLE_MODE', 2); -- 2表示Oracle兼容模式
-- 查看当前兼容模式
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='COMPATIBLE_MODE';
2. 分区表
-- 创建范围分区表
CREATE TABLE sales (
sale_id INT,
sale_date DATE,
amount DECIMAL(12,2)
)
PARTITION BY RANGE(sale_date) (
PARTITION p2020 VALUES LESS THAN(TO_DATE('2021-01-01', 'YYYY-MM-DD')),
PARTITION p2021 VALUES LESS THAN(TO_DATE('2022-01-01', 'YYYY-MM-DD')),
PARTITION pmax VALUES LESS THAN(MAXVALUE)
);
3. 全文索引
-- 创建全文索引
CREATE CONTEXT INDEX idx_content ON articles(content)
LEXER DEFAULT_LEXER;
-- 使用全文检索
SELECT * FROM articles WHERE CONTAINS(content, '达梦数据库');
七、常见问题解决
- 连接失败
- 检查DmAPService服务是否启动
- 检查防火墙是否开放5236端口
- 确认用户名密码正确
- 性能问题
- 检查并优化SQL语句
- 创建适当的索引
- 调整内存参数(dm.ini中的MEMORY_TARGET等)
- 空间不足
- 扩展表空间:
ALTER TABLESPACE MAIN ADD DATAFILE '/path/to/file.dbf' SIZE 1024;
- 清理归档日志