达梦数据库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/




