暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库dexp 和 dimp 应用实例

原创 手机用户5278 2022-06-20
3179

达梦数据库dexp 和 dimp 应用实例

逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。

逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机

方式是指数据库服务器正常运行过程中进行的备份和还原。dexp 和 dimp 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在安装目录/dmdbms/bin 中找到。

1. 环境准备

导出库:环境为 linux,服务器为 172.16.10.84,用户名为 SYSDBA 密码为dameng123。导出的是 DM 数据库系统安装时自带的名为 BOOKSHOP 的示例库,端口号 5236。

导入库:环境为 linux,服务器为 172.16.10.84,用户名为 SYSDBA 密码为dameng123。准备一个空数据库作为导入库,端口号为 5237

创建空库:

su - dmdba

cd /dm/dmdbms/dm8/bin

./dminit path=/dm/dmdata db_name=DAMENG_DIMP instance_name=DMSERVER port_num=5237 LOG_SIZE=256 SYSDBA_PWD=dameng123 EXTENT_SIZE=16 PAGE_SIZE=32

./dmserver /dm/dmdata/DAMENG_DIMP/dm.ini

2. dexp 导出

导出数据库的所有对象(FULL=Y),导出文件为 dexp01.dmp,导出日志为 dexp01.log,导出文件和日志文件都存放在/dm/dmback/dexp目录中。

./dexp SYSDBA/dameng123@172.16.10.84:5236 FILE=dexp01.dmp LOG=dexp01.LOG DIRECTORY=/emc_2/data/dexp FULL=Y

3. dimp 导入

导入 SYSDBA、OTHER、PERSON 模式中的数据(SCHEMAS=SYSDBA,OTHER,PERSON),导入文件就是上一步导出的文件 dexp01.dmp,导入日志 dimp02.log 放入/dm/dmback/dimp目录中。

./dimp SYSDBA/dameng123@172.16.10.84:5237 FILE=/dm/dmback/dexp/dexp01.dmp LOG=dimp02.log DIRECTORY=/dm/dmback/dimp SCHEMAS=SYSDBA,OTHER,PERSON

4. 查看 LOG 日志,查看数据

--创建两个表来存各表的大小以及表空间的情况

create table table_tol (owner varchar(100),table_name varchar(100),used_space_MB varchar(100),TABLESPACE_NAME varchar(128));

create table table_used (owner varchar(100),table_name varchar(100),used_pages_KB varchar(100),TABLESPACE_NAME varchar(128));

--执行语句,插入数据到table_tol和table_used

declare

begin

for rec in

(

select owner, table_name,TABLESPACE_NAME from dba_tables order by 1,2

)

loop

insert into table_tol

select

rec.owner,

rec.table_name,

TABLE_USED_SPACE(rec.owner, rec.table_name)*(page()/1024)/1024,

rec.TABLESPACE_NAME

From dual;

insert into table_used

select

rec.owner,

rec.table_name,

table_used_pages(rec.owner, rec.table_name)*(page()/1024),

rec.TABLESPACE_NAME

From dual;

end loop;

end;

---查询当前系统下所有表的所有者,表名,表占用空间大小,表以使用空间大小,以及表所在表空间的大小

select a.*,b."TOTAL_SPACE (MB)"

from

(select t.owner as schema_name,u.TABLE_NAME as object_name,T.USED_SPACE_MB,U.USED_pages_KB,t.TABLESPACE_NAME from table_tol t,table_used u

where t.table_name=u.table_name and t.owner=u.owner

group by t.owner,u.TABLE_NAME,T.USED_SPACE_MB,U.USED_pages_KB,t.TABLESPACE_NAME

order by 1,3 desc) a,

(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES / 1048576)) "TOTAL_SPACE (MB)"

FROM DBA_DATA_FILES

GROUP BY TABLESPACE_NAME) b

where b.TABLESPACE_NAME=a.TABLESPACE_NAME;

查看源库

查看目标库

总结:

目标库为空的数据库,其中没有BOOKSHOP表空间,因此数据自动导入到了MAIN这个默认的用户表空间。

使用关联参数

使用加密相关参数 ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME 进行导出导入。

1. 环境准备

导出库:环境为 linux,服务器为 172.16.10.84,用户名为 SYSDBA 密码为dameng123。导出的是 DM 数据库系统安装时自带的名为 BOOKSHOP 的示例库,端口号 5236。

导入库:环境为 linux,服务器为 172.16.10.84,用户名为 SYSDBA 密码为dameng123。准备一个空数据库作为导入库,端口号为 5238

创建空库:

su - dmdba

cd /dm/dmdbms/dm8/bin

./dminit path=/dm/dmdata db_name=DAMENG_PARA instance_name=DMSERVER port_num=5238 LOG_SIZE=256 SYSDBA_PWD=dameng123 EXTENT_SIZE=16 PAGE_SIZE=32

./dmserver /dm/dmdata/DAMENG_PARA/dm.ini

2. dexp 导出

导出数据库的所有对象(FULL=Y),导出文件为 dexp03.dmp,导出日志为 dexp03.log,导出文件和日志文件都存放在/dm/dmback/dexp目录中

./dexp SYSDBA/dameng123@172.16.10.84:5236 FILE=dexp03.dmp LOG=dexp03.LOG DIRECTORY=/dm/dmback/dexp FULL=Y ENCRYPT=Y ENCRYPT_PASSWORD=dameng123 ENCRYPT_NAME=DES_CBC

3. dimp 导入

导入整个数据库(FULL=Y),导入文件就是上一步导出的文件 dexp03.dmp,导入日志dimp04.log 放入/dm/dmback/dimp 目录中。在导入的过程中,要提供 ENCRYPT_PASSWORD、ENCRYPT_NAME 两个参数,这两个参数值必须和导出时一样

./dimp SYSDBA/dameng123@172.16.10.84:5238 FILE=/dm/dmback/dexp/dexp03.dmp LOG=dimp04.log DIRECTORY=/dm/dmback/dimp FULL=Y ENCRYPT_PASSWORD=dameng123 ENCRYPT_NAME=DES_CBC

4. 查看 LOG 日志,查看数据(查看目标库)

--创建两个表来存各表的大小以及表空间的情况

drop TABLE table_tol PURGE;

drop TABLE table_used PURGE;

create table table_tol (owner varchar(100),table_name varchar(100),used_space_MB varchar(100),TABLESPACE_NAME varchar(128));

create table table_used (owner varchar(100),table_name varchar(100),used_pages_KB varchar(100),TABLESPACE_NAME varchar(128));

--执行语句,插入数据到table_tol和table_used

declare

begin

for rec in

(

select owner, table_name,TABLESPACE_NAME from dba_tables order by 1,2

)

loop

insert into table_tol

select

rec.owner,

rec.table_name,

TABLE_USED_SPACE(rec.owner, rec.table_name)*(page()/1024)/1024,

rec.TABLESPACE_NAME

from

dual;

insert into table_used

select

rec.owner,

rec.table_name,

table_used_pages(rec.owner, rec.table_name)*(page()/1024),

rec.TABLESPACE_NAME

from

dual;

end loop;

end;

---查询当前系统下所有表的所有者,表名,表占用空间大小,表以使用空间大小,以及表所在表空间的大小

select a.*,b."TOTAL_SPACE (MB)"

from

(select t.owner as schema_name,u.TABLE_NAME as object_name,T.USED_SPACE_MB,U.USED_pages_KB,t.TABLESPACE_NAME from table_tol t,table_used u

where t.table_name=u.table_name and t.owner=u.owner

group by t.owner,u.TABLE_NAME,T.USED_SPACE_MB,U.USED_pages_KB,t.TABLESPACE_NAME

order by 1,3 desc) a,

(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES / 1048576)) "TOTAL_SPACE (MB)"

FROM DBA_DATA_FILES

GROUP BY TABLESPACE_NAME) b

where b.TABLESPACE_NAME=a.TABLESPACE_NAME;

总结:

本次的逻辑恢复是使用的加密以及全库导出和导入方式,同样可以看出,目标库没有BOOKSHOP表空间,因此导入的时候是导入到了当前用户的默认表空间下。

alter user sysdba identified by dameng123 HASH WITH SHA512 salt;

--用户加盐 从 V8.1.2.69 版本开始,对创建用户口令新增了<加盐选项>

--在导出之前,DBA 先检查待导出库用户口令是否使用了加盐 SALT。 如果是,那么DBA需要先使用ALTER语句将用户口令调整为 NO SALT,再做导出导入。前后版本的口令都是 NO SALT,操作成功。

alter user sysdba identified by dameng123 hash with SHA512 no salt;

--去除用户加盐

总结:

在当前库进行逻辑还原的时候,需要将原来数据库的用户、表空间这些提前建好,如果不去创建,会报错。

点不点看你哦:https://eco.dameng.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论