逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。

逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:

      数据库级(FULL):导出或导入整个数据库中的所有对象。

      用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。

      模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。

      表级(TABLES):导出或导入一个或多个指定的表或表分区。

查看逻辑备份、还原的相关参数:

[dmdba@localhost bak]$ dexp help
 dexp V8
 version: 03134283904-20220630-163817-20005
 格式: ./dexp  KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)例程: ./dexp  SYSDBA/SYSDBA GRANTS=Y TABLES=(SYSDBA.TAB1,SYSDBA.TAB2,SYSDBA.TAB3)
USERID 必须是命令行中的第一个参数
关键字              说明(默认值)
 --------------------------------------------------------------------------------
 USERID              用户名/口令 格式:{<username>[/<password>] | /}[@<connect_identifier>][<option>] [<os_auth>]
                     <connect_identifier> : [<svc_name> | host[:port] | <unixsocket_file>]
                     <option> : #{<exetend_option>=<value>[,<extend_option>=<value>]...}
                                --此行外层{}是为了封装参数之用,书写时需要保留
                     <os_auth> : AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}
 FILE                导出文件 (dexp.dmp)
 DIRECTORY           导出文件所在目录
 FULL                整库导出 (N)
 OWNER               以用户方式导出 格式 (user1,user2,...)
 SCHEMAS             以模式方式导出 格式 (schema1,schema2,...)
 TABLES              以表方式导出 格式 (table1,table2,...)
 FUZZY_MATCH         TABLES选项是否支持模糊匹配 (N)
 QUERY               用于导出表的子集的select 子句
 PARALLEL            用于指定导出的过程中所使用的线程数目
 TABLE_PARALLEL      用于指定导出的过程中表内的并发线程数目,MPP模式下会转换成单线程
 TABLE_POOL          用于指定表的缓冲区个数
 EXCLUDE             忽略指定的对象 
                        格式 EXCLUDE=(CONSTRAINTS,INDEXES,ROWS,TRIGGERS,GRANTS) or
                             EXCLUDE=TABLES:table1,table2 or
                             EXCLUDE=SCHEMAS:sch1,sch2 
 INCLUDE             包含指定的对象 
                        格式 INCLUDE=(CONSTRAINTS,INDEXES,ROWS,TRIGGERS,GRANTS) or 
                             INCLUDE=TABLES:table1,table2
 CONSTRAINTS         导出约束 (Y)
 TABLESPACE          导出对象带有表空间 (N)
 GRANTS              导出权限 (Y)
 INDEXES             导出索引 (Y)
 TRIGGERS            导出触发器 (Y)
 ROWS                导出数据行 (Y)
 LOG                 屏幕输出的日志文件
 NOLOGFILE           不使用日志文件(N)
 NOLOG               屏幕上不显示日志信息(N)
 LOG_WRITE           日志信息实时写入文件: 是(Y),否(N)
 DUMMY               交互信息处理: 打印(P), 所有交互都按YES处理(Y),NO(N) 
 PARFILE             参数文件名
 FEEDBACK            每 x 行显示进度 (0)
 COMPRESS            导出数据是否压缩 (N)
 ENCRYPT             导出数据是否加密 (N)
 ENCRYPT_PASSWORD    导出数据的加密密钥
 ENCRYPT_NAME        加密算法的名称
 FILESIZE            每个转储文件的最大大小
 FILENUM             一个模板可以生成的文件数
 DROP                导出后删除原表,但不级联删除 (N)
 DESCRIBE            导出数据文件的描述信息,记录在数据文件中
 COL_DEFAULT_SEPARATE 是否单独导出列默认值 (Y)
 HELP                打印帮助信息
  dexp 工具名称有两种写法 dexp 和 dexpdp。两者语法完全相同。唯一的区别在于,dexp 导出的文件必须存放在客户端,dexpdp 导出的文件必须存放在服务器端。
[dmdba@localhost bak]$ dimp help
 dimp V8
 version: 03134283904-20220630-163817-20005
 格式: ./dimp KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)例程: ./dimp SYSDBA/SYSDBA IGNORE=Y ROWS=Y FULL=Y
USERID 必须是命令行中的第一个参数
关键字                 说明(默认值)
 --------------------------------------------------------------------------------
 USERID                 用户名/口令 格式:{<username>[/<password>] | /}[@<connect_identifier>][<option>] [<os_auth>]
                        <connect_identifier> : [<svc_name> | host[:port] | <unixsocket_file>]
                        <option> : #{<exetend_option>=<value>[,<extend_option>=<value>]...}
                                   --此行外层{}是为了封装参数之用,书写时需要保留
                        <os_auth> : AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}
 FILE                   导入文件名称 (dexp.dmp)
 DIRECTORY              导入文件所在目录
 FULL                   整库导入 (N)
 OWNER                  以用户方式导入 格式 (user1,user2,...)
 SCHEMAS                以模式方式导入 格式 (schema1,schema2,...)
 TABLES                 以表名方式导入 格式(table1,table2,...)
 PARALLEL               用于指定导入的过程中所使用的线程数目
 TABLE_PARALLEL         用于指定导入的过程中每个表所使用的子线程数目,在FAST_LOAD为Y时有效
 IGNORE                 忽略创建错误 (N)
 TABLE_EXISTS_ACTION    需要的导入表在目标库中存在时采取的操作[SKIP | APPEND | TRUNCATE | REPLACE]
 FAST_LOAD              是否使用dmfldr来导数据(N)
 FLDR_ORDER             使用dmfldr是否需要严格按顺序来导数据(Y)
 COMMIT_ROWS            批量提交的行数(5000)
 EXCLUDE                忽略指定的对象 格式 
                            格式 EXCLUDE=(CONSTRAINTS,INDEXES,ROWS,TRIGGERS,GRANTS)
 GRANTS                 导入权限 (Y)
 CONSTRAINTS            导入约束 (Y)
 INDEXES                导入索引 (Y)
 TRIGGERS               导入触发器 (Y)
 ROWS                   导入数据行 (Y)
 LOG                    指定日志文件
 NOLOGFILE              不使用日志文件(N)
 NOLOG                  屏幕上不显示日志信息(N)
 LOG_WRITE              日志信息实时写入文件(N): 是(Y),否(N)
 DUMMY                  交互信息处理(P): 打印(P), 所有交互都按YES处理(Y),NO(N) 
 PARFILE                参数文件名
 FEEDBACK               每 x 行显示进度 (0)
 COMPILE                编译过程, 程序包和函数... (Y)
 INDEXFILE              将表的索引/约束信息写入指定的文件
 INDEXFIRST             导入时先建索引(N)
 REMAP_SCHEMA           格式(SOURCE_SCHEMA:TARGET_SCHEMA)
                        将SOURCE_SCHEMA中的数据导入到TARGET_SCHEMA中 
 ENCRYPT_PASSWORD       数据的加密密钥
 ENCRYPT_NAME           加密算法的名称
 SHOW/DESCRIBE          打印出指定文件的信息(N)
 TASK_THREAD_NUMBER     用于设置dmfldr处理用户数据的线程数目
 BUFFER_NODE_SIZE       用于设置dmfldr读入文件缓冲区大小
 TASK_SEND_NODE_NUMBER  用于设置dmfldr发送节点个数[16,65535]
 LOB_NOT_FAST_LOAD      如果一个表含有大字段,那么不使用dmfldr,因为dmfldr是一行一行提交的
 PRIMARY_CONFLICT       主键冲突的处理方式[IGNORE|OVERWRITE|OVERWRITE2],默认报错
 TABLE_FIRST            是否先导入表(N):是(Y),否(N)
 SHOW_SERVER_INFO       是否打印服务器信息(N):是(Y),否(N)
 IGNORE_INIT_PARA       忽略建库参数差异(0): CASE_SENSITIVE(1),LENGTH_IN_CHAR(2)
 AUTO_FREE_KEY          导入数据完成后, 是否释放密钥(N):是(Y), 否(N)
 REMAP_TABLE            格式(SOURCE_SCHEMA.SOURCE_TABLE:TARGET_TABLE)
                        将SOURCE_TABLE中的数据导入到TARGET_TABLE中 
 REMAP_TABLESPACE       格式(SOURCE_TABLESPACE:TARGET_TABLESPACE)
                        将SOURCE_TABLESPACE表空间映射到TARGET_TABLESPACE表空间中 
 HELP                   打印帮助信息案列:
1、
dexp SYSDBA/SYSDBA file=full.dmp log=full.log full=Y
全库导出。这里文件、日志路径没有书写,所以命令在哪个目录下执行,导出的文件就存放在哪个目录下。如果写绝对路径,要注意目标目录的权限是否满足。也可通过参数DIRECTORY指定目录。
dexp SYSDBA/SYSDBA file=full1.dmp log=full1.log full=Y COMPRESS=Y
全库压缩备份,测试库几乎没数据,但看的出还是有些效果的。
[dmdba@localhost bak]$ ll -thr
 total 208K
 -rw-r--r-- 1 dmdba dinstall 130K Aug 29 02:07 full.dmp
 -rw-r--r-- 1 dmdba dinstall  15K Aug 29 02:07 full.log
 -rw-r--r-- 1 dmdba dinstall  43K Aug 29 02:09 full1.dmp
 -rw-r--r-- 1 dmdba dinstall  15K Aug 29 02:09 full1.logdexp SYSDBA/SYSDBA file=full2.dmp log=full2.log full=Y COMPRESS=Y PARALLEL=4
全库压缩多线程备份,这几个参数都可以在一起使用。还可以跟一些加密的参数,这里不在演示。
2、
dexp SYSDBA/SYSDBA owner=test1 file=test01.dmp log=test01.log full=Y
 dexp V8
 [警告]暂时不支持多种导出模式……
 [警告]导出失败在导出一个用户时则不能导出全库,四种级别独立互斥,不能同时存在,这里取消full=Y即可。如过要导出多个用户,owner后面用逗号隔开。
dexp SYSDBA/SYSDBA owner=test1,test2,test3 file=test.dmp log=testlog
3、
dexp SYSDBA/SYSDBA file=cust.dmp log=cust.log tables=sales.customer_address query="where addressid=12"
根据条件导出一张表
4、
dexp SYSDBA/SYSDBA file=sales.dmp log=sales.log schemas=sales exclude=tables:customer
导出一个SCHEMAS下所有的对象,但排除一张customer表。从HELP上可以明白还可以排除索引、约束之列。但是要注意表级和模式级。
5、
dimp userid=SYSDBA/SYSDBA remap_schema=SALES:SALES1 file=sales.dmp log=sales1.log parallel=4
导入时切换SCHEMA,目标SCHEMA无需提前创建,执行导入命令后自动创建。(这里测试了remap_tablespace,语句可以执行,但没有实际效果)
6、
dimp SYSDBA/SYSDBA file=sales.dmp log=sales_dimp.log schemas=sales table_exists_action=replace commit_rows=6

在导入时,如果表存在做何操作。从HELP里看有4中选项:[SKIP | APPEND | TRUNCATE | REPLACE],根据需求酌情选择。批量提交的行数为6行。

其余很多参数不再一一测试,例如FILESIZE、FILENUM、IGNORE应该都是比较常用的参数。