Dexp/dimp

是达梦数据库逻辑导出/导入工具的简称,主要用来对达梦数据库进行逻辑导出/导入。Dexp/dimp是达梦数据库自带工具,只要安装了达梦数据库,就可以在安装目录下的/dmdbms/bin中找到。达梦Dexp/dimp工具目前能够支持数据库级、用户级、模式级和表级四种级别的导出/导入。四种级别独立互斥,不能同时存在。

我们在这里先创建示例库,来模拟真实带业务数据的场景。达梦数据库的示例库可以在创建数据库时同步创建,也可以手动执行示例库脚本,手动创建。示例库脚本一般存放在安装目录的/dmdbms/samples下,我们手动执行创建即可。

SQL> start C:\dmdbms\samples\instance_script\bookshop\GBK\CREATESCHEMA.sql

SQL> start C:\dmdbms\samples\instance_script\bookshop\GBK\CREATETABLE.sql

SQL> start C:\dmdbms\samples\instance_script\bookshop\GBK\INSERTSQL.sql

其他示例库感兴趣的读者可以自行去查看其内容,示例信息覆盖比较全面,包括达梦数据库中各种.ini结尾的配置文件示例都是存在的。

现在,我们就开始通过日常工作中的常用使用场景,来熟悉这两个工具的具体用法。

1

、使用dexp实现数据库级导出,执行全库导出。

dexp userid=SYSDBA/SYSDBA file=C:\dmdbms\data\backup\db_full.dmp log=db_full.log full=Y

细节说明:此处file参数后面指定了全路径,文件会写入指定路径下;而log参数后面未指定全路径,那么log日志文件将会写入当前执行命令的路径下,此处当前目录为C:\dmdbms\bin,所以日志文件就会写入此目录下。建议生成文件参数后面写全路径来操作导出。如下:

dexp userid=SYSDBA/SYSDBA file=C:\dmdbms\data\backup\db_full.dmp log= C:\dmdbms\data\backup\db_full.log full=Y

2

、使用dexp实现用户级导出,导出SYSDBA用户下的所有数据。

dexp userid=SYSDBA/SYSDBA file=C:\dmdbms\data\backup\db_owner.dmp log=C:\dmdbms\data\backup\db_owner.log owner=SYSDBA

细节说明:要导出多个用户时,可以用逗号隔开,语法为OWNER={,},如果用户名在数据库中显示为小写,需要用双引号括起来。

3

、使用dexp实现模式级导出,导出SALES,test,OTHER模式的所有数据,使用2个线程执行导出(并行度为2)。

dexp userid=SYSDBA/ SYSDBA schemas=sales,\"test\",other file=C:\dmdbms\data\backup\db_schema.dmp log=C:\dmdbms\data\backup\db_schema.log  PARALLEL=2

细节说明:此处模式test为小写,所以必须要用双引号括起来。一般情况下,owner与schemas导入导出是相同的。但是用户可以包含多个模式,在这种情况下schemas的导入导出时owner导入导出的一个子集。

4

、使用dexp实现表级导出,导出模式salse下CUSTOMER、CUSTOMER_ADDRESS表,其中,CUSTOMER表中只需要PERSONID为14的数据。

dexp userid=SYSDBA/SYSDBA file=C:\dmdbms\data\backup\db_tables.dmp log=C:\dmdbms\data\backup\db_tables.log tables=sales.CUSTOMER,sales.CUSTOMER_ADDRESS query=” where personid = 14”

细节说明:因为达梦Dexp/dimp工具目前支持的数据库级、用户级、模式级和表级四种级别独立互斥,不能同时存在。所以此处指定表导出tables参数的时候,就不能使用owner或者schemas参数来对表的所属进行限制。如下写法会提示“暂时不支持多种导出模式……”。

dexp userid=SYSDBA/SYSDBA file=C:\dmdbms\data\backup\db_tables.dmp log=C:\dmdbms\data\backup\db_tables.log tables=sales.CUSTOMER,sales.CUSTOMER_ADDRESS

5

、使用dexp实现排除表导出,导出sales模式下除CUSTOMER表以外的其他数据。

dexp userid=SYSDBA/SYSDBA file=C:\dmdbms\data\backup\exc_tables.dmp log=C:\dmdbms\data\backup\exc_tables.log exclude=tables:CUSTOMER schemas=sales

细节说明:EXCLUDE对象种类名包括 CONSTRAINTS、 INDEXES、 ROWS、 TRIGGERS、 GRANTS。如果导出方式为tables表级或者schemas模式级导出时,EXCLUDE=SCHEMAS:{,}排除模式不起作用。反之,INCLUDE为包含的对象种类。

6

、使用dimp将模式salse的数据导入salse_bak模式中,并行度为2,导入时忽略创建数据库对象出现的错误并继续执行。

dimp userid=SYSDBA/SYSDBA remap_schema=SALES:SALES_BAK file=C:\dmdbms\data\backup\sales_schema.dmp log=C:\dmdbms\data\backup\dimp_sales.log parallel=2 ignore=y

细节说明:remap_schema参数的值最好为大写方式进行对应,小写对应会出现无法正常remap的情况。在做remap_schema时,目标模式不需要提前创建,导入时会自动remap并创建。目前,达梦数据库还不支持tablespace、table等方式的remap。

7

、使用dimp将模式salse数据导入数据库中,要求直接替换数据库中salse模式下已存在的表,并且强制先导入表对象,导入时批量提交行数为2000行。

dimp userid=SYSDBA/SYSDBA schemas=sales file=C:\dmdbms\data\backup\sales_schema.dmp log=C:\dmdbms\data\backup\dimp_sales.log table_first=y table_exists_action=replace commit_rows=2000

细节说明:TABLE_EXISTS_ACTION参数有四个选项,分别为SKIP:跳过此表;APPEND:直接向现有表中导入数据;TRUNCATE:先删除现有表中的数据,再向表中导入数据;REPLACE:先删除现有表,再导数据。

Dexp/dimp

还有其他很多有用的参数,如dexp的filesize与filenum参数,来限制单个导出文件大小以及导出多少哥模板文件个数;指定drop参数在导出表后删除表;dexp/dimp的加解密相关的参数等等。Dimp是与dexp相对应的逻辑导入工具,主要用法与dexp一样。Dexp/dimp的参数详细介绍可以参照官方文档或者使用dexp/dimp help来获取帮助,在此不一一赘述。