前言
一开始用来记录 oracle 配置的,由于这学期学了达梦数据库的使用遂合并在一起 —— 2025.3.12
参考:
https://juejin.cn/post/7063141828706435085
https://blog.csdn.net/javaboyweng/article/details/125486242
docker安装oracle_11g
docker pull iatebes/oracle_11g
大概5g这样子,挺久的
然后启动容器,配置一下 oracle 数据库端口在1521
进入容器,快速开始
在oracle用户下,进入sqlplus,使用 sys as sysdba 登录,解锁 scott 用户,查询表数据。
su oracle
sqlplus /nolog
conn sys/123456 as sysdba
# alter user scott account unlock;
create user orcltt identified by orcltt; #创建用户
grant connect,resource,dba to orcltt; #权限
# conn scott/tiger (默认需要修改密码,重复输入新设置的密码即可)
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
其中的每个模式的名字都代表着一个用户,如 scott、sys
静态数据脱敏
识别敏感数据
对于示例的 DMHR.Employee 表
employee_name、identity_card、email、phone_num、salary 都属于敏感信息
设置数据脱敏规则
针对 employee_name、identity_card、phone_num 数据脱敏:将原始数据的中间一段转换为 '*'
针对 email 数据脱敏:由于 email 数据具有唯一性约束,如果采用 '*' 替换,极大可能会违背约束。所以采用随机 MD5 值替换
针对 salary 数据脱敏:由于 salary 是 int 型数据,且不具备唯一性约束限制,最方便的脱敏方式是直接变成统一的数字
数据脱敏
开启数据库归档模式
Oracle 数据库要使用实时热备份功能必须要开启归档模式,达梦数据库也是如此
检查数据库环境是否为归档模式:
select arch_mode from v$database;
返回 Y 才是开启
修改数据库为 MOUNT 状态:
转换为配置状态,此时状态为 mount
对应的DDL:(注:oracle 需要 shutdown 关库才能修改状态)
ALTER DATABASE MOUNT;
开启归档模式:这里设置本地 LOCAL 归档,配置完需要先确定进行修改
DDL:
alter database archivelog;
alter database add archivelog 'DEST=C:\Users\Asus\Desktop\archive, TYPE=LOCAL, FILE_SIZE=64, SPACE_LIMIT=0, ARCH_FLUSH_BUF_SIZE=0, HANG_FLAG=1';
路径配置完成之后,重新把状态转换为打开
DDL:
ALTER DATABASE OPEN;
此时成功打开归档
全量备份
backup database backupset 'db_bak_01';
默认备份文件存在 data/DAMENG/bak 目录内,修改 dm.ini 文件内的 BAK_PATH 参数,即可修改备份文件存放目录
新建一个新的空的数据库实例 DAMENG_new,用于测试环境使用
数据库脱敏
姓名:
update DMHR.EMPLOYEE set EMPLOYEE_NAME=concat(left(EMPLOYEE_NAME,1),repeat('*',2));
身份证:
update DMHR.EMPLOYEE set IDENTITY_CARD=concat(left(IDENTITY_CARD,5),repeat('*',9),right(IDENTITY_CARD,4));
邮箱:
尝试用 * 脱敏
update DMHR.EMPLOYEE set EMAIL=concat(left(EMAIL,3),repeat('*',5), '@dameng.com');
这样子会提示违反唯一性约束,采用随机 md5 脱敏
update DMHR.EMPLOYEE set EMAIL=concat(left(EMAIL,3),lower(substring(md5(rand()),1,6)), '@dameng.com');
手机号:
11位手机号,保留前3位和后4位,剩余部分脱敏
update DMHR.EMPLOYEE set PHONE_NUM=concat(left(PHONE_NUM,3),repeat('*',4),right(PHONE_NUM,4));
薪水:
使用 cast(FLOOR(RAND()*10000)+1 as int)
生成一个 0~10000 的随机整数
update DMHR.EMPLOYEE set SALARY=cast(FLOOR(RAND()*10000)+1 as int);
最终效果:
注意DM默认是手动提交,执行完sql语句之后需要执行 COMMIT;
提交才能更新数据库
DM数据库逻辑导出
使用 dexp 命令行工具进行逻辑导出,工具在 dmdbms/bin 下
导出模式 DMHR 下的所有对象
dexp USERID=SYSDBA/password@127.0.0.1:5236 FILE=db_str.dmp LOG=db_str.log SCHEMAS=DMHR DIRECTORY=C:\Users\Asus\Desktop\DEXP
或者导出表:
dexp USERID=SYSDBA/password@127.0.0.1:5236 FILE=db_str.dmp LOG=db_str.log TABLES=DMHR.EMPLOYEE DIRECTORY=C:\Users\Asus\Desktop\DEXP
DM数据库逻辑导入
使用 dimp 工具进行逻辑导入
dimp USERID=SYSDBA/password@127.0.0.1:5237 FILE=C:\Users\Asus\Desktop\DEXP\db_str.dmp DIRECTORY=C:\Users\Asus\Desktop\DEXP
导入成功,查看新数据库
成功脱敏并导入到测试环境