DM-V8数据库证书过期处理过程记录

目录

1、问题背景

2、解决方案尝试

2-1、咨询官方客服申请可延续的授权使用期

2-2、重新下载最新版本的数据库安装(包括旧数据的导出与导入)

[2-2-1、打开 CMD,进入旧 DM 的 bin 目录](#2-2-1、打开 CMD,进入旧 DM 的 bin 目录)

2-2-2、停止达梦数据库服务

2-2-3、卸载停止达梦数据库服务

2-2-4、清理残留目录

2-2-5、安装新版本的达梦并创建数据库服务

2-2-6、导入dmp,恢复数据(dimp)

2-2-7、登录新版本的数据库验证证书有效期与数据恢复情况

3、遇到原先创建的表空间没有成功被迁移

3-1、解决方案1

3-2、解决方案2

3-2-1、停止达梦数据库服务

3-2-2、迁移表从MAIN迁移到目标表空间

3-2-3、重建索引(迁移表之后必须做)

[3-2-4、修改用户默认表空间(防止后续新建表继续落到 MAIN)](#3-2-4、修改用户默认表空间(防止后续新建表继续落到 MAIN))

3-2-5、验证结果


1、问题背景

先前,我在本地安装了WINDOWS版本的达梦数据库进行开发学习,但是,突然有一天遇到了这个提示的情况。

2、解决方案尝试

2-1、咨询官方客服申请可延续的授权使用期

通过以下查询语句获取安装的DM数据库的基本信息

sql 复制代码
SELECT * FROM V$VERSION;
SELECT * FROM V$LICENSE;

告知达梦客服后,但被告知个人用户申请延期的证书KEY的流程更繁琐,建议直接下载新版本的达梦数据库来解决目前所看到的问题。于是乎,我不得不考虑通过重新安装数据库的途径来解决目前遇到的问题。此处,需要特别考虑旧数据库的导出备份与导入新数据库的操作。

2-2、重新下载最新版本的数据库安装(包括旧数据的导出与导入)

2-2-1、打开 CMD,进入旧 DM 的 bin 目录

bash 复制代码
dexp SYSDBA/SYSDBA密码@localhost:5236 FILE="D:\dm_backup\testdb_full.dmp" LOG="D:\dm_backup\dexp.log" FULL=Y

备注: 路径 D:\dm_backup 提前建好。FULL=Y ,表示整库导出。另外的,最好再补充一个参数:TABLE_SPACE=Y,因为,在后续进行操作的时候,才发现不添加这个参数的话,先前创建的表空间目录,将会无法被成功导入到新的数据库中。

2-2-2、停止达梦数据库服务

2-2-3、卸载停止达梦数据库服务

2-2-4、清理残留目录

手动清除以下目录(存在的话):

D:\dmdba\dmdbms\data

D:\dmdba\dmdbms\arch

2-2-5、安装新版本的达梦并创建数据库服务

**备注:**新建的数据库需要各方面参数与原数据库服务保存一致,避免后续导入操作时候出现报错。

可以预先查看了解原数据库的各个方面的基础参数。

2-2-6、导入dmp,恢复数据(dimp)

bash 复制代码
cd D:\dmdba\dmdbms\bin
dimp SYSDBA/新SYSDBA密码@localhost:5236 FILE="D:\dm_backup\testdb_full.dmp" LOG="D:\dm_backup\dimp_import.log" FULL=Y

2-2-7、登录新版本的数据库验证证书有效期与数据恢复情况

3、遇到原先创建的表空间没有成功被迁移

原因:dexp/dimp 属于【逻辑备份】,它不保存物理 dbf 文件的磁盘路径! 逻辑备份保存的是:建表空间、建表、插入数据的 SQL 定义;不会直接还原到原来 C:/D 盘那个物理文件位置,这是原理层面的问题。

3-1、解决方案1

导出命令中添加参数:TABLE_SPACE=Y:

bash 复制代码
dexp SYSDBA/旧密码@localhost:5236 FILE="D:\dm_backup\testdb_full.dmp" LOG="D:\dm_backup\dexp_export.log" FULL=Y TABLESPACE=Y

重建数据库实例

重新导入数据:

bash 复制代码
dimp SYSDBA/新密码@localhost:5236 FILE="D:\dm_backup\testdb_full.dmp" LOG="D:\dm_backup\dimp_import.log" FULL=Y

3-2、解决方案2

由于,已经将老数据库服务删除,无法做重新导出操作的时候,考虑以下的操作步骤。

3-2-1、停止达梦数据库服务

3-2-2、迁移表从MAIN迁移到目标表空间

确定之前表空间文件.dbf文件所在的目录位置

3-2-3、重建索引(迁移表之后必须做)

3-2-4、修改用户默认表空间(防止后续新建表继续落到 MAIN)

3-2-5、验证结果

我把自己迁移与验证的执行命令整理成了一个模板步骤如下:

sql 复制代码
--STEP-1:
CREATE TABLESPACE TS_{你的用户名} DATAFILE 'D:\dmdba\dmdbms\data\IRAC\TS_{你的用户名}.DBF' SIZE 128;

--STEP-2:将查询得到的结果做批量执行
SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MOVE TABLESPACE TS_{你的用户名};' 
FROM SYS.DBA_TABLES 
WHERE OWNER = '{你的用户名}' AND TABLESPACE_NAME = 'MAIN';

--STEP-3:将查询得到的结果做批量执行
--SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' REBUILD TABLESPACE TS_{你的用户名};'
--如果索引表空间和数据表空间一致REBUILD之后内容可以省略
SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' REBUILD;'
FROM SYS.DBA_INDEXES
WHERE OWNER = '{你的用户名}' AND TABLESPACE_NAME = 'MAIN';

--STEP-4:
--更新用户下所有表统计信息
BEGIN
  DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME => '{你的用户名}', CASCADE => TRUE);
END;

--STEP-5:
ALTER USER {你的用户名} DEFAULT TABLESPACE TS_{你的用户名};

--STEP-6:
--检查表
SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM SYS.DBA_TABLES WHERE OWNER = '{你的用户名}';

--检查索引
SELECT OWNER, INDEX_NAME, TABLESPACE_NAME, STATUS FROM SYS.DBA_INDEXES WHERE OWNER = '{你的用户名}';

--检查所有数据文件路径
SELECT TABLESPACE_NAME, FILE_NAME FROM SYS.DBA_DATA_FILES;

--验证统计信息更新时间
SELECT TABLE_NAME,LAST_ANALYZED FROM SYS.DBA_TABLES WHERE OWNER = '{你的用户名}';

特别提醒: 数据表迁移成功后,**所有索引会变成无效状态(STATUS=INVALID)。**因此,需要特别注意对索引的迁移与验证。

相关推荐
l1t1 小时前
DeepSeek总结的五分钟测试:Ted Dunning 谈 DuckDB 为何让分析更轻松
数据库·sql·duckdb
超级新零售1 小时前
零售 SaaS 与本地部署,技术责任边界究竟怎么分?
数据库·零售
考虑考虑2 小时前
瀚高数据库
数据库·后端·postgresql
dishugj2 小时前
oracle日志切换三条命令区别
数据库
Patrick在香港2 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
悟道书生2 小时前
(一)Navicate为什么转存结构和数据只转存表而不包含建库?
数据库·oracle
赤龙ERP3 小时前
ERP周报:连接器开闸、国产GPU进场与智能工厂253家
数据库·人工智能·大模型·rpa·erp·企业数字化·builderpattern
lusklusklusk3 小时前
SQL Server补丁版本号为什么“日期新反而版本低”?——GDR、CU、CU+GDR 版本号规则与升级路径详解
数据库
key_3_feng3 小时前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent