🐉 达梦数据库(DM)等效脚本转换(Oracle → 达梦)

LEO-屹铭 2025-10-17 PM 122℃ 0条

🤖 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迁移到达梦的场景。若您使用的是特定版本的达梦数据库,建议先在测试环境验证!


扫描二维码,在手机上阅读!
标签: none

非特殊说明,本博所有文章均为博主原创。

上一篇 与大模型的交流对话
下一篇 没有了

评论啦~


选择表情