达梦数据使用笔记

相关文档:

达梦官网
达梦技术文档

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:结束日期。

用法说明

  1. 返回值:返回 end_date - start_date 的时间差,结果为整数(单位取决于 unit)。
  2. 参数顺序:结果可能是负数(若 end_date < start_date)。
  3. 日期格式:日期需为合法格式(如 DATEDATETIME 或字符串),建议用 TO_DATE 转换字符串。
  4. 单位计算规则
    • 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(忽略分钟部分,仅计算整小时差)。


注意事项

  1. 日期合法性:非法日期(如 2023-02-30)会报错。
  2. 单位缩写:达梦可能支持缩写(如 YY 表示年),但建议用全称避免歧义。
  3. 时间部分处理:若日期包含时间,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 用户密码过期时,通常会出现以下情况:

密码过期后的登录情况

  1. 不能正常登录:密码过期后,sysdba 用户将无法通过常规方式登录数据库管理系统。

  2. 错误提示:尝试登录时会收到类似"用户密码已过期"或"登录被拒绝"的错误消息。

解决方法

方法一:使用操作系统认证方式登录(推荐)

  1. 以数据库安装用户身份登录操作系统
  2. 使用以下命令通过操作系统认证方式登录:
    disql / as sysdba
    
  3. 登录后立即修改密码:
    ALTER USER sysdba IDENTIFIED BY "新密码";
    

方法二:使用其他具有管理员权限的账户

如果有其他具有DBA权限的账户未过期:

  1. 使用该账户登录
  2. 执行:
    ALTER USER sysdba IDENTIFIED BY "新密码";
    

方法三:修改数据库配置文件(需重启)

  1. 编辑达梦数据库的dm.ini配置文件
  2. 找到并修改以下参数:
    PWD_POLICY = 0  # 禁用密码策略
    
  3. 重启数据库服务
  4. 尝试使用原密码登录

方法四:联系达梦技术支持

如果以上方法都无法解决,可以联系达梦数据库的技术支持团队获取帮助。

预防措施

为避免密码过期问题,可以:

  1. 定期修改密码
  2. 设置较长的密码有效期
  3. 记录密码修改日期并设置提醒

希望这些信息对您有所帮助!如需更具体的指导,请提供您使用的达梦数据库具体版本。

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. 安全建议

  1. 立即修改默认密码

    ALTER USER SYSDBO IDENTIFIED BY "新复杂密码";
    
  2. 启用审计(如需要):

    AUDIT ALL BY SYSDBO BY ACCESS;
    
  3. 定期检查权限

    -- 检查用户权限
    SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYSDBO';
    
  4. 考虑使用角色管理

    -- 创建对象操作员角色
    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值