相关文档:
1.安装完成后在开始菜单中搜索DM
目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\达梦数据库 下有所有相关信息
2.数据迁移
https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html
https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-migrate.html
(1)达梦数据库从一个模式导入另外一个模式
新建工程:
新建迁移:
选择源模式和目标模式:
3.达梦表空间,用户,数据库之间的关系
https://www.doubao.com/thread/w78998e86d30234b3
4.RuoYi 使用达梦数据库 MySQL迁移达梦数据库
5.查看已经注册好的服务
cd /home/dmdba/dmdbms/bin
ls
6.启动/停止/重启/数据库
DMTEST :为数据库名
(1)启动数据库
[dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ls
[dmdba@localhost bin]$ ./DmServiceDMTEST start
(2)停止数据库
[dmdba@localhost bin]$ ./DmServiceDMTEST stop
(3)重启数据库
[dmdba@localhost bin]$ ./DmServiceDMTEST restart
(4)查看数据库状态
[dmdba@localhost bin]$ ./DmServiceDMTEST status
7.从windows使用dm管理工具导出 .dm 格式的文件,在openEuler/linux 服务器使用命令导入 .dm 格式文件的详细步骤
(1)windows使用dm管理工具导出 .dm 格式的文件
选中右键:
点击导出:
选择导出目录之后确定:
导出成功:
(2)在openEuler/linux 服务器使用命令导入 .dm 格式文件
a.将刚刚导出的文件上传到服务器
如/opt目录下
b.切换到dmdba用户,然后cd到bin目录
[root@localhost ~]# su - dmdba
[dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin
c.使用命令导入数据
./dimp SYSDBA/'"gg#123#123"'@127.0.0.1:5237 FILE=/opt/imp_exp_20250214105325.dmp FULL=Y
关键参数说明:
USERID:数据库登录信息(格式:用户名/密码@主机:端口)
FILE:待导入的.dmp文件路径
DIRECTORY:导出文件的目录(如果FILE参数中已包含完整路径,可省略)
LOG:导入过程的日志文件
FULL=Y:全库导入(需导出时使用了FULL=Y)
SCHEMAS:按模式导入(如SCHEMAS=TESTUSER)
TABLES:按表导入(如TABLES=table1,table2)
IGNORE=Y:忽略创建错误(如表已存在)
注意:密码处理
8.disql 常用查询
(1)登录
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/'"gg#123#123"'@localhost:5237
或你的服务器IP
./disql SYSDBA/'"gg#123#123"'@10.22.33.66:5237
(2)查询所有表
SELECT OWNER AS SCHEMA_NAME, TABLE_NAME FROM DBA_TABLES ORDER BY OWNER, TABLE_NAME;
(3)查看数据库版本
SELECT * FROM V$VERSION;
(4)查看表结构
DESC SYSOBJECTS;
DESC EXPERT_SERVICES.T_MAJOR;
EXPERT_SERVICES:模式名
(5) 查询指定表
SELECT * FROM EXPERT_SERVICES.T_MAJOR;
EXPERT_SERVICES:模式名
9.DATEDIFF用法
达梦数据库(DM)中的 DATEDIFF
函数用于计算两个日期之间的时间差,支持多种时间单位。以下是详细的语法、用法说明及实例:
语法
DATEDIFF(<unit>, <start_date>, <end_date>)
- unit:时间单位,如
YEAR
(年)、MONTH
(月)、DAY
(日)、HOUR
(小时)、MINUTE
(分钟)、SECOND
(秒)。 - start_date:起始日期。
- end_date:结束日期。
用法说明
- 返回值:返回
end_date - start_date
的时间差,结果为整数(单位取决于unit
)。 - 参数顺序:结果可能是负数(若
end_date < start_date
)。 - 日期格式:日期需为合法格式(如
DATE
、DATETIME
或字符串),建议用TO_DATE
转换字符串。 - 单位计算规则:
YEAR
/MONTH
:按日历计算(非精确天数)。DAY
/HOUR
等:按实际时间差计算。
实例
示例 1:计算天数差
SELECT DATEDIFF(DAY, TO_DATE('2023-01-01', 'YYYY-MM-DD'), TO_DATE('2023-01-10', 'YYYY-MM-DD')) AS diff_days;
结果:9
(共 9 天)。
示例 2:计算月份差
SELECT DATEDIFF(MONTH, '2023-03-15', '2023-05-20') AS diff_months;
结果:2
(3月到5月,跨2个月)。
示例 3:计算年份差
SELECT DATEDIFF(YEAR, '2020-02-29', '2023-02-28') AS diff_years;
结果:3
(尽管2023年无2月29日,仍按年份差计算)。
示例 4:跨单位计算(小时)
SELECT DATEDIFF(HOUR, '2023-05-01 08:00:00', '2023-05-01 20:30:00') AS diff_hours;
结果:12
(忽略分钟部分,仅计算整小时差)。
注意事项
- 日期合法性:非法日期(如
2023-02-30
)会报错。 - 单位缩写:达梦可能支持缩写(如
YY
表示年),但建议用全称避免歧义。 - 时间部分处理:若日期包含时间,
DAY
及以上单位会忽略时间,HOUR
及以下单位会考虑。
10.配置环境变量
• 达梦数据库可能需要配置 DM_HOME
环境变量。检查是否已设置:
echo $DM_HOME
• 如果未设置,添加到用户配置文件(如 ~/.bashrc
):
export DM_HOME=/opt/dmdbms
export PATH=$DM_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
11.达梦数据库 sysdba 密码过期处理
当达梦数据库(DM)的 sysdba 用户密码过期时,通常会出现以下情况:
密码过期后的登录情况
-
不能正常登录:密码过期后,sysdba 用户将无法通过常规方式登录数据库管理系统。
-
错误提示:尝试登录时会收到类似"用户密码已过期"或"登录被拒绝"的错误消息。
解决方法
方法一:使用操作系统认证方式登录(推荐)
- 以数据库安装用户身份登录操作系统
- 使用以下命令通过操作系统认证方式登录:
disql / as sysdba
- 登录后立即修改密码:
ALTER USER sysdba IDENTIFIED BY "新密码";
方法二:使用其他具有管理员权限的账户
如果有其他具有DBA权限的账户未过期:
- 使用该账户登录
- 执行:
ALTER USER sysdba IDENTIFIED BY "新密码";
方法三:修改数据库配置文件(需重启)
- 编辑达梦数据库的dm.ini配置文件
- 找到并修改以下参数:
PWD_POLICY = 0 # 禁用密码策略
- 重启数据库服务
- 尝试使用原密码登录
方法四:联系达梦技术支持
如果以上方法都无法解决,可以联系达梦数据库的技术支持团队获取帮助。
预防措施
为避免密码过期问题,可以:
- 定期修改密码
- 设置较长的密码有效期
- 记录密码修改日期并设置提醒
希望这些信息对您有所帮助!如需更具体的指导,请提供您使用的达梦数据库具体版本。
12. 在达梦数据库中创建SYSDBO账号并赋权
1. 创建SYSDBO账号
使用SYSDBA或具有创建用户权限的账号登录达梦数据库,执行以下SQL创建SYSDBO账号:
-- 创建SYSDBO用户,设置密码为SYSDBO(生产环境应使用更复杂密码)
CREATE USER SYSDBO IDENTIFIED BY "SYSDBO"
DEFAULT TABLESPACE MAIN
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON MAIN;
2. 授予数据库对象操作员基本权限
方案一:授予预定义角色(推荐)
-- 授予RESOURCE角色(包含创建表、视图、序列等基本对象权限)
GRANT RESOURCE TO SYSDBO;
-- 授予PUBLIC角色(基础公共权限)
GRANT PUBLIC TO SYSDBO;
方案二:精确授予特定权限
-- 对象创建权限
GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE,
CREATE SEQUENCE, CREATE TRIGGER, CREATE INDEX TO SYSDBO;
-- 数据操作权限(可按需授予特定schema下的权限)
GRANT SELECT ANY TABLE, INSERT ANY TABLE,
UPDATE ANY TABLE, DELETE ANY TABLE TO SYSDBO;
3. 可选:限制权限范围
如果需要限制SYSDBO只能操作特定schema下的对象:
-- 创建专用schema
CREATE SCHEMA OPERATOR_SCHEMA AUTHORIZATION SYSDBO;
-- 授予该schema下的全部权限
GRANT ALL PRIVILEGES ON SCHEMA OPERATOR_SCHEMA TO SYSDBO;
-- 如果需要操作其他schema的对象,单独授权
GRANT SELECT, INSERT, UPDATE, DELETE ON OTHER_SCHEMA.TABLE_NAME TO SYSDBO;
4. 验证权限
-- 查看用户系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYSDBO';
-- 查看用户对象权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'SYSDBO';
-- 查看用户角色
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'SYSDBO';
5. 安全建议
-
立即修改默认密码:
ALTER USER SYSDBO IDENTIFIED BY "新复杂密码";
-
启用审计(如需要):
AUDIT ALL BY SYSDBO BY ACCESS;
-
定期检查权限:
-- 检查用户权限 SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYSDBO';
-
考虑使用角色管理:
-- 创建对象操作员角色 CREATE ROLE OBJ_OPERATOR_ROLE; -- 为角色赋权 GRANT CREATE TABLE, CREATE VIEW TO OBJ_OPERATOR_ROLE; -- 将角色授予用户 GRANT OBJ_OPERATOR_ROLE TO SYSDBO;
注意:以上SQL需要根据实际达梦数据库版本进行调整,不同版本语法可能略有差异。生产环境中应遵循最小权限原则,只授予必要的权限。
13.脚本备份
(1)脚本文件
#!/bin/bash
# 达梦数据库备份脚本
# 功能:备份TEST用户数据,压缩备份文件,清理旧备份
# 作者:AI助手
# 日期:$(date '+%Y-%m-%d')
source /home/dmdba/.bash_profile
# 配置参数
BACKUP_DIR="/dmdata/backup" # 备份目录
DB_USER="SYSDBA" # 数据库用户名
DB_PASS="112233" # 数据库密码
EXP_USER="SYSDBA" # 要备份的用户名
PARALLEL=4 # 并行度
KEEP_DAYS=60 # 保留天数
LOG_FILE="${BACKUP_DIR}/backup_$(date '+%Y%m%d').log" # 日志文件
# 创建备份目录(如果不存在)
mkdir -p ${BACKUP_DIR}
# 记录日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a ${LOG_FILE}
}
# 错误处理函数
error_exit() {
log "[ERROR] $1"
# 这里可以添加邮件或短信通知
exit 1
}
# 开始备份
log "========== 开始备份 ${EXP_USER} 用户数据 =========="
# 定义备份文件名前缀
BACKUP_PREFIX=$(date '+%y%m%d')_${EXP_USER}
# 1. 执行数据库导出
log "开始导出数据库..."
dexp ${DB_USER}/'"gzsExp#wjw#632"'@10.12.27.53:5239 owner=${EXP_USER} directory=${BACKUP_DIR} \
file=${BACKUP_PREFIX}-%U.dmp log=${BACKUP_PREFIX}.log parallel=${PARALLEL}
if [ $? -ne 0 ]; then
error_exit "数据库导出失败,请检查错误信息!"
fi
log "数据库导出完成。"
# 2. 压缩备份文件
log "开始压缩备份文件..."
tar zcvf ${BACKUP_DIR}/${BACKUP_PREFIX}.tar.gz \
${BACKUP_DIR}/${BACKUP_PREFIX}*.dmp \
${BACKUP_DIR}/${BACKUP_PREFIX}.log \
--remove-files
if [ $? -ne 0 ]; then
error_exit "备份文件压缩失败!"
fi
log "备份文件压缩完成。"
# 3. 清理旧备份
log "开始清理${KEEP_DAYS}天前的备份文件..."
find ${BACKUP_DIR} -mtime +$((${KEEP_DAYS}-1)) -name "*.tar.gz" -exec rm -vf {} \; | tee -a ${LOG_FILE}
# 检查磁盘空间
log "磁盘空间使用情况:"
df -h ${BACKUP_DIR} | tee -a ${LOG_FILE}
# 备份完成
log "备份完成。备份文件: ${BACKUP_DIR}/${BACKUP_PREFIX}.tar.gz"
log "========== 备份流程结束 =========="
# 可选:发送备份结果通知
# send_notification "备份完成" "TEST用户备份已完成,详情请查看${LOG_FILE}"
(2)定时任务(每天00点执行一次)
[dmdba@rww01 ~]$ crontab -e
00 00 * * * /dmbak/backup.sh