本文参考: https://eco.dameng.com/docs/zh-cn/pm/dexp-dimp-function-introduction.html
概要
若某种表被误删了,如何还原这张表?能够实现数据库对象级别的备份和还原吗?(物理备份恢复是文件级别的恢复)
- 逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原
逻辑备份还原的工具?
- 逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原
逻辑导出导入对象的四大级别
- 数据库级(FULL)
导出 / 导入整个数据库中的所有对象 - 用户级(OWNER)
导出 / 导入一个(或多个用户)所拥有的全部对象 - 模式级(SCHEMAS)
导出 / 导入一个(或多个模式)下的所有对象 - 表级(TABLES)
导出 / 导入一个(或多个)指定表 / 表分区
本文命令运行环境介绍:
- 源库与目标库都安装在同一台计算机上
- 源库: 实例名为dmserver,端口为5236
- 目标库: 实例名为dmserver2,端口为5237
数据库级
导出 / 导入整个数据库中的所有对象
FULL=Y
全库导出
dexp SYSDBA/SYSDBA\@localhost:5236 file=full01.dmp log=exp_full01.log directory=/dmpdir full=y
全库导入
dimp SYSDBA/SYSDBA\@localhost:5237 file=full01.dmp log=imp_full01.log directory=/dmpdir full=y
用户级
导出 / 导入一个(或多个)用户中的所有schemas
OWNER=<用户名>{,<用户名>}
注意:(仅在DM8中测试过) 此处仅导出schemas中的所有对象,并不导出用户 也就是说,导入时,目标端需要创建好用户,dimp会将导出文件中的所有schemas都导入到此用户中
导出单个用户
导出test1用户下的所有schemas
dexp SYSDBA/SYSDBA\@localhost:5236 file=owner01.dmp log=exp_owner01.log directory=/dmpdir owner=test1
导入单个用户
将源端test1用户的所有schemas导入目标端的test1用户中(前提是目标端有test1用户,因为导出文件只导出了schems,并没有导出源端的用户和权限)
SQL> drop user test1 cascade;
$ dimp SYSDBA/SYSDBA\@localhost:5237 file=owner01.dmp log=imp_owner01.log directory=/dmpdir owner=test1
模式级
导出 / 导入一个(或多个模式)下的所有对象
SCHEMAS=<模式名>{,<模式名>}
导出单个模式
导出模式test1_sch2下的所有对象,由于模式名为小写,故写法比较特殊
dexp SYSDBA/SYSDBA\@localhost:5236 file=schema01.dmp log=exp_schema01.log directory=/dmpdir schemas="\"test1_sch2\""
导入单个模式
将源库的模式test1_sch2,导入到目标库中,模式名不变(仍为test1_sch2)
SQL> drop schema "test1_sch2" cascade;
$ dimp SYSDBA/SYSDBA\@localhost:5237 file=schema01.dmp log=imp_schema01.log directory=/dmpdir schemas="\"test1_sch2\""
映射
可以修改源端和目标端的schema映射关系,实现将源端的sch1.tab1导入到目标端的sch2.tab1
REMAP_SCHEMA=<SOURCE_SCHEMA>:<TARGET_SCHEMA>
将源库的模式test1_sch2,导入到目标库中,模式名更改(映射)为test2_sch2
dimp SYSDBA/SYSDBA\@localhost:5237 file=schema01.dmp log=imp_schema01.log directory=/dmpdir schemas="\"test1_sch2\"" remap_schema="\"test1_sch2\"":"\"test2_sch2\""
表级
导出 / 导入一个(或多个)指定表 / 表分区,导入所有数据行、约束、索引等信息
TABLES=<表名>{,<表名>}
导出单张表
导出表test1_sch2.TABLE_2,小写字母需要转义
dexp SYSDBA/SYSDBA\@localhost:5236 file=table01.dmp log=exp_table01.log directory=/dmpdir tables="\"test1_sch2\"".TABLE_2
导入单张表
SQL> drop table "test1_sch2"."TABLE_2" restrict;
$ dimp SYSDBA/SYSDBA\@localhost:5237 file=table01.dmp log=imp_table01.log directory=/dmpdir tables="\"test1_sch2\"".TABLE_2
其他
还有其他可选参数:控制导出导入的速度、表行数、模式对象、导出文件是否加密、压缩等
更多详情可参阅: https://eco.dameng.com/docs/zh-cn/pm/dexp-logical-export.html
|