达梦数据库--版本升级dmp方式
原版本:V8.1-2-38-21.07.09-143359-10018-ENTPack1升级版本:V8.1.3.26检查升级的安装包与环境架构是否一致,虚拟机环境为x86+kylinv10。通过ps -ef | grep dmserver,确认数据库服务目前为启动状态,并了解清楚数据库软件与数据库实例的存放目录。
1 基础环境描述
原版本:V8.1-2-38-21.07.09-143359-10018-ENT Pack1
升级版本:V8.1.3.26
2 检查设备环境
检查升级的安装包与环境架构是否一致,虚拟机环境为x86+kylinv10。
hostnamectl命令:

3 退出数据库所有相关服务
4 检查数据库
4.1 确定服务与路径
通过ps -ef | grep dmserver,确认数据库服务目前为启动状态,并了解清楚数据库软件与数据库实例的存放目录。

如图中所示:
达梦数据库软件部署目录为:/dmdbms
达梦数据库部署目录为:/dmdata/DAMENG
4.2 数据库基础信息查询并记录
select * from v$version;

select id_code;

4.3 检查数据库连接
检查是否还存在应用连接:

检查是否存在待PURGE事务:

主动做检查点刷盘:

5 物理备份数据库
开启dmap服务:

开归档:

脱机全库备份:

vi dm_BAKRES_202508.log查看备份日志,CMD END.CODE:[0], COST:[00:00:00]说明备份成功。

6 逻辑备份数据库
1. 查询数据库存在用户,隶属模式及表空间信息关联。
select SCH_OBJ.NAME AS OWNER, USER_OBJ.NAME AS OWNER_SCH_NAME, C.DEFAULT_TABLESPACE,C.DEFAULT_INDEX_TABLESPACE, SCH_OBJ.CRTDATE from (select NAME, ID, PID, CRTDATE, BINTOCHAR(INFO8) DESCR from SYSOBJECTS where TYPE$='SCH') SCH_OBJ,(select NAME, ID from SYSOBJECTS where TYPE$='UR' and SUBTYPE$='USER') USER_OBJ ,DBA_USERS C where SCH_OBJ.PID=USER_OBJ.ID AND SCH_OBJ.NAME NOT IN ('SYSDBA','SYS','SYSAUDITOR','SYSSSO','CTISYS','SYSJOB') AND SCH_OBJ.NAME=C.USERNAME
ORDER BY SCH_OBJ.NAME
无法解析的成员访问表达式[C.DEFAULT_INDEX_TABLESPACE]:

通过查看sql语句,C为dba_users的别名,在当前数据库版本V8.1-2-38-21.07.09-143359-10018-ENT Pack1中执行select * from dba_user;

该版本dba_users的表中不包含DEFAULT_INDEX_TABLESPACE,所以执行会报错,将字段删除后成功执行。

2. 查询数据库总对象用于核对
create table dm_objects1(obj_owner varchar(100),obj_name varchar(100),obj_type varchar(50));
insert into dm_objects1 select owner,object_name,object_type from
all_objects where owner='JPC';
select object_type,count(*) from all_objects where owner='JPC' group by object_type;
commit;

select * from dm_objects1;

--2.1.统计每个表的数据量到表数据记录表
create table dm_tables1(tab_owner varchar(100),tab_name
varchar(100),tab_count int);
--统计每个表的数据量到表数据记录表
begin
for rec in (select owner,object_name from all_objects where owner='JPC' and object_type='TABLE')
loop
execute immediate 'insert into dm_tables1 select '''|| rec.owner||''','''||rec.object_name||''',count(*) from "'||rec.owner||'"."'||rec.object_name||'"';
commit;
end loop;
end;
select * from dm_tables1;

3. 查询数据库初始化参数

4. 导出DDL
表空间JPC_TBS的DDL:
SELECT TO_CHAR(DBMS_METADATA.GET_DDL('TABLESPACE','JPC_TBS')) FROM DUAL;

CREATE TABLESPACE "JPC_TBS" DATAFILE '/dmdata/DAMENG/JPC_TBS_01.DBF' SIZE 128 AUTOEXTEND ON NEXT 1 MAXSIZE 1024 CACHE = NORMAL COPY 0 MICRO;
用户JPC的DDL:
SELECT TO_CHAR(DBMS_METADATA.GET_DDL('USER','JPC')) FROM DUAL

CREATE USER "JPC" IDENTIFIED BY "Dameng123" HASH WITH SHA512 PASSWORD_POLICY 2 LIMIT FAILED_LOGIN_ATTEMPS 3, PASSWORD_LOCK_TIME 1, PASSWORD_GRACE_TIME 10 DEFAULT TABLESPACE "JPC_TBS"
5. 导出数据
利用逻辑导出工具dexp,设置schemas参数导入一个或多个模式下的所有对象。
./dexp JPC/Dameng123:5236 FILE=/dmdata/dmp/JPC_202508062033.dmp LOG=/dmdata/dmp/JPC_202508062033.log SCHEMAS=JPC
模式JPC导出成功:

7 停止数据库服务
停dmserver:

停dmap:

8 备份原数据库软件目录及配置文件
备份原数据库软件目录:

备份配置文件:

9 安装新版本数据库软件
安装dm8_20250630_x86_kylin10_64_ent_8.1.3.26_pack48版本:

10 恢复相关配置文件
11 新版本数据库重新搭建环境
初始化实例:

12 启动数据库服务
启动dmserver:

查看进程:

13 确定数据库状态
查询数据库版本:
select * from v$version;

select id_code;

14 逻辑恢复数据
1. 创建表空间及用户
通过第6章节导出的表空间和用户的DDL创建相应的表空间和用户。



2. dimp导入数据
导入命令:
[dmdba@localhost bin]$ ./dimp JPC/Dameng123:5236 FILE=/dmdata/dmp/JPC_202508062033.dmp LOG=/dmdata/dmp/JPC_202508062033.log SCHEMAS=JPC
dimp导入过程:
[dmdba@localhost bin]$ ./dimp JPC/Dameng123:5236 FILE=/dmdata/dmp/JPC_202508062033.dmp LOG=/dmdata/dmp/JPC_202508062033.log SCHEMAS=JPC
dimp V8
[警告]文件"/dmdata/dmp/JPC_202508062033.log"已经存在
是否覆盖(y/n, 1/0):n
[警告]日志文件创建失败
本地编码:PG_UTF8, 导入文件编码:PG_GB18030
开始导入模式[JPC]......
导入模式中的 NECESSARY GLOBAL 对象……
导入 SEQUENCE 对象……
导入 SEQUENCE 对象……
模式中的 NECESSARY GLOBAL 对象导入完成……
----- [2025-08-07 18:03:52]导入表:DEPARTMENTS -----
创建表 DEPARTMENTS ...
创建表已完成,导入表 DEPARTMENTS 的数据中...
导入表 DEPARTMENTS 的数据:10 行被处理
----- [2025-08-07 18:03:52]导入表:EMPLOYEES -----
创建表 EMPLOYEES ...
创建表已完成,导入表 EMPLOYEES 的数据中...
导入表 EMPLOYEES 的数据:10000 行被处理
----- [2025-08-07 18:03:52]导入表:PERSON -----
创建表 PERSON ...
创建表已完成,导入表 PERSON 的数据中...
导入表 PERSON 的数据:3 行被处理
导入模式中的 GLOBAL 对象……
导入 VIEW 对象 : VIEW_01
导入 VIEW 对象 : VIEW_02
导入 VIEW 对象 : VIEW_03
导入 PACKAGE 对象 : PERSONPACKAGE
导入 PKG_BODY 对象……
模式中的 GLOBAL 对象导入完成……
模式[JPC]导入完成......
导入表的约束:
FK_DEPT
导入成功……
开始编译对象...
编译对象[4/4]
编译对象完成
整个导入过程共花费 0.173 s
成功终止导入, 但出现警告
[dmdba@localhost bin]$
3. 查询数据库总对象用于核对
create table dm_objects2(obj_owner varchar(100),obj_name varchar(100),obj_type varchar(50));
insert into dm_objects2 select owner,object_name,object_type from
all_objects where owner='CORE';
select object_type,count(*) from all_objects where owner='CORE' group by object_type;
commit;

select * from dm_objects2;

--2.1.统计每个表的数据量到表数据记录表
create table dm_tables2(tab_owner varchar(100),tab_name
varchar(100),tab_count int);
--统计每个表的数据量到表数据记录表
begin
for rec in (select owner,object_name from all_objects where owner='CORE' and object_type='TABLE')
loop
execute immediate 'insert into dm_tables2 select '''|| rec.owner||''','''||rec.object_name||''',count(*) from "'||rec.owner||'"."'||rec.object_name||'"';
commit;
end loop;
end;
select * from dm_tables2;

Select distinct OBJ_NAME,OBJ_TYPE from dm_objects1 where (obj_owner,obj_name) not in (select obj_owner,obj_name from dm_objects2);
15 更新数据库统计信息
--对库上所有模式下的所有用户表以及表上的所有索引生成统计信息
call sp_db_stat_init();
--收集指定模式下统计信息集合和直方图信息。
call DBMS_STATS.gather_schema_stats('用户名',100);
第一个参数:模式名
第二个参数:收集比例

达梦技术社区 | 达梦数据库: 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台
更多推荐
所有评论(0)