1. dexp逻辑导出(摘自达梦官方文档)

dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。四 种级别独立互斥,不能同时存在

1.1 常用导出模板

1.1.1 数据库级(全备)

./dexp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=db_bak.dmp LOG=db_bak.log FULL=Y DIRECTORY=/backup/FULL_BAK

批注:dexp工具位于./bin目录下(数据库安装目录),USERID:连接信息 FILE:备份文件名,LOG:备份日志,FULL=Y:表示全备。DIRECTORY:备份文件及日志文件路径。关键字FULL

1.1.2 用户级

./dexp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=db_users.dmp LOG=db_users.log 
OWNER=TEST1,TEST2,...,TESTN DIRECTORY=/backup/FULL_BAK

以逗号间隔。关键字OWNER

1.1.3 模式级

./dexp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=db_users.dmp LOG=db_users.log 
SCHEMAS=TEST1,TEST2,...,TESTN DIRECTORY=/backup/FULL_BAK

批注:关键字SCHEMAS。

1.1.4 表级

./dexp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=db_users.dmp LOG=db_users.log 
TABLES=模式.表名,...,模式.表名 DIRECTORY=/backup/FULL_BAK

批注:关键字TABLES

2. dimp逻辑导入(摘自达梦官方文档)

dimp 逻辑导入工具利用 dexp 工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp 导入是 dexp 导出的相反过程。还原的方式可以灵活选择,如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等。同样分四个级别

2.1 常用导入模板

2.1.1 数据库级

./dimp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=/backup/FULL_BAK/db_bak.dmp LOG=db_recover.log FULL=Y DIRECTORY=/backup/IMP_BAKDIR

批注:同导出的区别在于,FILE的值为全路径备份文件名。DIRECTORY设置的路径为导入过程中日志文件路径。

2.1.2 模式级

./dimp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=/backup/FULL_BAK/db_bak.dmp LOG=db_recover.log SCHEMAS=TEST1,...,TESTN DIRECTORY=/backup/IMP_BAKDIR

 批注:若将MODE01模式下的所有对象导出后导入到MODE02下,则应使用以下代码

./dimp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=/backup/FULL_BAK/db_bak.dmp LOG=db_recover.log REMAP_SCHEMA=MODE01:MODE02 DIRECTORY=/backup/IMP_BAKDIR

2.1.3 用户级

./dimp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=/backup/FULL_BAK/db_bak.dmp LOG=db_recover.log OWNER=TEST1,...,TESTN DIRECTORY=/backup/IMP_BAKDIR

批注:此为常规情况下,导出用户及导入用户相匹配。

若将USER01用户下的所有对象导出后导入到USER02下,则应使用以下代码

./dimp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=/backup/FULL_BAK/db_bak.dmp LOG=db_recover.log FROMUSER=USER01 TOUSER=USER02  DIRECTORY=/backup/IMP_BAKDIR

2.1.4 表级

./dimp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=/backup/FULL_BAK/db_bak.dmp LOG=db_recover.log TABLES=模式.表名,...,模式.表名 DIRECTORY=/backup/IMP_BAKDIR

3. 注意事项

3.1 大小写及特殊字符

对于用户命令行输入的用户名,模式名及表名都会自动转换成大写。对于特殊字符,应该用\进行转义

举例:如tabname,则应传入到dexp/dimp中的值应为:"tabname"。

操作系统层级还有一层 “”,则命令行应写为:"\"tabname\""

举例:如dexp/dimp表名为全小写对象tabname",命令行应写为""\tabname\"\"\""

较为复杂,我的理解是:

1. 首先左右两个大的双引号为操作系统要求。

2. 其次在里面使用"需要用\进行转义。

3. 最后dexp/dimp要求对表名/模式名/用户名中的双引号转义需要用双引号转义。也就是双引号转义双引号。

3.2 导出表对象已存在

例如,库DATABASE1中导出的表对象MODE1.TAB1在在目的库中已存在,当使用dmp导入时则会报:导出对象已存在。

解决方案:加上关键字:TABLE_EXISTS_ACTION。

该关键字有四个值分别为:SKIP、APPEND、TRUNCATE、REPLACE

SKIP:跳过此表

APPEND:直接向现有表导数据

TRUNCATE:先清空此表,再导入数据

REPLACE:先删掉该表,再创建、导入数据。