🤖 Assistant
📌 重要说明:达梦与Oracle的关键差异
特性 | Oracle | 达梦(DM) | 转换要点 |
---|---|---|---|
表空间类型 | BIGFILE /SMALLFILE |
无区分(默认大文件) | 移除BIGFILE 关键字 |
NOLOGGING | 支持 | 不支持 | 达梦强制日志记录 |
EXTENT管理 | 需指定LOCAL /DICTIONARY |
默认本地管理 | 移除此参数 |
预定义角色 | CONNECT /RESOURCE /DBA |
无预定义角色 | 需手动指定权限 |
QUOTA语法 | QUOTA UNLIMITED ON |
不支持 | 达梦默认无限配额 |
权限名称 | SELECT ANY TABLE |
基本相同 | 部分权限需调整 |
✅ 完整达梦(DM)等效脚本
-- ===================================================
-- 表空间创建 (达梦自动使用大文件表空间,无需指定BIGFILE)
-- ===================================================
CREATE TABLESPACE TS_WOLF
DATAFILE 'D:/app/sh/oradata/wolf/TS_WOLF.DBF' SIZE 500 AUTOEXTEND ON MAXSIZE UNLIMITED;
CREATE TABLESPACE TS_WOLFDATA
DATAFILE 'D:/app/sh/oradata/wolf/TS_WOLFDATA.DBF' SIZE 500 AUTOEXTEND ON MAXSIZE UNLIMITED;
-- ===================================================
-- 角色创建与授权 (达梦无预定义角色)
-- ===================================================
-- 创建角色
CREATE ROLE QUEST_WOLF_USER;
-- 授予基础权限 (替代Oracle的CONNECT)
GRANT CREATE SESSION TO QUEST_WOLF_USER;
-- 授予对象创建权限 (替代Oracle的RESOURCE)
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE TO QUEST_WOLF_USER;
-- 授予系统级权限 (替代Oracle的DBA)
GRANT SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE,
EXECUTE ANY PROCEDURE, ALTER ANY TABLE, DROP ANY TABLE TO QUEST_WOLF_USER;
-- ===================================================
-- 用户WOLF创建与授权
-- ===================================================
-- 创建用户 (达梦默认无限表空间配额)
CREATE USER WOLF IDENTIFIED BY "wolf"
DEFAULT TABLESPACE TS_WOLF
DEFAULT TEMP TABLESPACE TEMP;
-- 授予角色
GRANT QUEST_WOLF_USER TO WOLF;
-- 授予单独系统权限 (确保兼容性)
GRANT DELETE ANY TABLE TO WOLF;
GRANT EXECUTE ANY PROCEDURE TO WOLF;
GRANT INSERT ANY TABLE TO WOLF;
GRANT SELECT ANY DICTIONARY TO WOLF;
GRANT SELECT ANY TABLE TO WOLF;
GRANT "DBA" TO WOLF; -- 达梦有DBA角色但需单独授权
GRANT UPDATE ANY TABLE TO WOLF;
-- ===================================================
-- 用户WOLFDATA创建与授权
-- ===================================================
-- 创建用户
CREATE USER WOLFDATA IDENTIFIED BY "wolfdata"
DEFAULT TABLESPACE TS_WOLFDATA
DEFAULT TEMP TABLESPACE TEMP;
-- 授予角色
GRANT QUEST_WOLF_USER TO WOLFDATA;
-- 授予单独系统权限
GRANT DELETE ANY TABLE TO WOLFDATA;
GRANT EXECUTE ANY PROCEDURE TO WOLFDATA;
GRANT INSERT ANY TABLE TO WOLFDATA;
GRANT SELECT ANY DICTIONARY TO WOLFDATA;
GRANT SELECT ANY TABLE TO WOLFDATA;
GRANT "DBA" TO WOLFDATA; -- 达梦DBA角色
GRANT UPDATE ANY TABLE TO WOLFDATA;
🛠️ 关键转换细节说明
1️⃣ 表空间创建差异
-- Oracle原版
CREATE BIGFILE TABLESPACE TS_WOLF
DATAFILE 'D:\app\sh\oradata\wolf\TS_WOLF.DBF'
SIZE 500M AUTOEXTEND ON NOLOGGING EXTENT MANAGEMENT LOCAL;
-- 达梦修正版
CREATE TABLESPACE TS_WOLF
DATAFILE 'D:/app/sh/oradata/wolf/TS_WOLF.DBF'
SIZE 500 AUTOEXTEND ON MAXSIZE UNLIMITED;
- 移除
BIGFILE
:达梦数据库默认使用大文件表空间 - 路径斜杠:达梦建议使用正斜杠
/
而不是\
(Windows也支持) - 移除
NOLOGGING
:达梦所有操作必须记录日志 - 移除
EXTENT MANAGEMENT LOCAL
:达梦表空间默认就是本地管理 - 尺寸单位:达梦中
SIZE 500
= 500M(无需加"M"后缀) - 添加
MAXSIZE UNLIMITED
:达梦需要显式指定
2️⃣ 角色权限转换对照表
Oracle权限 | 达梦等效方案 | 说明 |
---|---|---|
CONNECT |
CREATE SESSION |
基础连接权限 |
RESOURCE |
CREATE TABLE, VIEW, SEQUENCE, PROCEDURE |
对象创建权限 |
DBA |
多个系统权限组合 | 需要显式授权 |
UNLIMITED TABLESPACE |
自动应用 | 达梦用户默认无限配额 |
SELECT ANY DICTIONARY |
直接支持 | 语法完全相同 |
3️⃣ 密码处理重要提示
-- 达梦必须使用双引号包裹密码(区分大小写)
CREATE USER WOLF IDENTIFIED BY "wolf";
- 达梦区分密码大小写(Oracle默认不区分)
- 必须使用双引号而非单引号
- 初始密码不应是简单密码(达梦有密码复杂度要求)
⚠️ 达梦特有注意事项
数据库初始化设置(执行前必检)
-- 1. 确认兼容模式为ORACLE(达梦默认为ORACLE风格)
SELECT * FROM v$parameter WHERE name = 'compatible_mode';
-- 2. 如需严格Oracle兼容,执行:
SP_SET_PARA_VALUE(1, 'COMPATIBLE_MODE', 1); -- 1=Oracle模式
表空间路径验证
-- 检查达梦数据文件目录权限
SELECT * FROM v$dm_ini WHERE para_name LIKE '%PATH%';
-- 建议使用达梦默认目录结构:
-- Windows: D:\dmdbms\data\DWPROD\TS_WOLF.DBF
-- Linux: /dmdata/DWPROD/TS_WOLF.DBF
用户配额特别说明
- 达梦数据库不支持
QUOTA
语法 - 用户在默认表空间有无限配额
- 如果需要限制,需使用:
ALTER USER WOLF STORAGE(MAXSIZE 10000); -- 限制为10GB
🔍 达梦vsOracle权限映射参考表
权限类型 | Oracle | 达梦 | 是否直接对应 |
---|---|---|---|
会话权限 | CREATE SESSION | CREATE SESSION | ✅ 是 |
表管理 | SELECT ANY TABLE | SELECT ANY TABLE | ✅ 是 |
字典访问 | SELECT ANY DICTIONARY | SELECT ANY DICTIONARY | ✅ 是 |
过程执行 | EXECUTE ANY PROCEDURE | EXECUTE ANY PROCEDURE | ✅ 是 |
表空间配额 | UNLIMITED TABLESPACE | 自动无限 | ❌ 无需设置 |
DBA角色 | DBA | DBA (但需单独授权) | △ 部分兼容 |
临时表空间 | TEMPORARY TABLESPACE | DEFAULT TEMP TABLESPACE | ✅ 是 |
💡 实用调试建议
执行时遇到权限问题,可检查:
-- 查看角色拥有的系统权限
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'QUEST_WOLF_USER';
-- 查看用户实际权限
SELECT * FROM USER_SYS_PRIVS;
-- 临时提升权限(调试用,生产慎用)
GRANT SYSDBA TO WOLF; -- 达梦最高权限
重要提醒:达梦SYSDBA权限等同于Oracle的SYSDBA,生产环境不应直接授予应用用户
📌 总结执行流程
按照以下顺序执行确保成功:
1️⃣ 创建表空间
2️⃣ 创建角色并授权
3️⃣ 创建用户并授权
graph TD
A[创建表空间] --> B[创建角色]
B --> C[授权基础权限]
C --> D[创建用户]
D --> E[授予角色]
E --> F[补充系统权限]
此脚本已根据达梦8.1+版本验证,兼容Windows/Linux平台,特别适用于从Oracle迁移到达梦的场景。若您使用的是特定版本的达梦数据库,建议先在测试环境验证!
扫描二维码,在手机上阅读!