暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

达梦数据库:逻辑导出(dexp)和导入(dimp)

原创 她说 2021-09-15
8280

前言

DM数据库支持两种备份方式:逻辑备份和物理备份。
逻辑备份是指利用dexp导出工具,将指定对象(库级、模式级、表级)的数据导出到文件的备份方式。逻辑备份针对的是数据内容,并不关心这些数据物理存储在什么位置。
物理备份是指直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理备份过程中,不关心数据页的具体内容是什么,也不关心数据页属于哪一张表,只是简单的根据数据库文件系统的描述,来挑选有效的数据页。

现在博主简单介绍下逻辑导出和导入的用法

逻辑备份还原

逻辑导入导出即是逻辑备份还原,是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。

逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对DM数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原。dexp和dimp是DM数据库自带的工具,只要安装了DM数据库,就可以在安装目录/dmdbms/bin中找到。

逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
数据库级(FULL):导出或导入整个数据库中的所有对象。
用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。
模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
表级(TABLES):导出或导入一个或多个指定的表或表分区。

dexp逻辑导出

dexp工具可以对本地或者远程数据库进行数据库级,用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、费控约束、唯一约束等),在备份时还可以选择生成日志文件,记录备份的过程以供查看。
dexp工具名称有两种写发dexp和dexpdp,两者语法完全相同,区别在于:dexp导出的文件必须在客户端,dexpdp导出的文件必须存放在服务器端。

dimp逻辑导入

dimp逻辑导入工具利用dexp工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp导入是dexp导出的相反过程。还原的方式可以灵活选择,如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等。
dimp工具名称有两种写法dimp和dimpdp。两者语法完全相同。唯一的区别在于,dimp导入的文件必须存放在客户端,dexpdp导入的文件必须存放在服务器端。

使用dexp、dimp工具

dexp和dimp的工具都在bin目录下启动,语法如下:

dexp PARAMETER=<value> { PARAMETER=<value> } 或
dexpdp PARAMETER=<value> { PARAMETER=<value> }

例如,将用户名和密码均为SYSDBA,IP地址为192.168.0.248,端口号为8888的数据库采FULL方式完全导出。/user/data为数字证书路径。导出文件名为db_str.dmp,导出的日志文件名为 db_str.log,导出文件的路径为/mnt/dexp/data。

./dexp USERID=SYSDBA/SYSDBA@192.168.0.248:8888#/user/data FILE=db_str.dmp 
DIRECTORY=/mnt/dexp/data LOG=db_str.log FULL=Y

将逻辑备份采用FULL方式完全导入到用户名和密码为SYSDBA,IP地址为192.168.0.248,端口号为8888的数据库。导入文件名为db_str.dmp,导入的日志文件名为db_str.log,路径为/mnt/data/dexp

./dimp USERID=SYSDBA/SYSDBA@192.168.0.248:8888 FILE=db_str.dmp DIRECTORY=/mnt/data/dexp  LOG=db_str.log FULL=Y 

参数详解

1.USERID

USERID 用于指定数据库的连接信息。必选参数{{[/]} | /}:[/]为用户名和密码。普通登录方式时用户名必写,密码缺省为SYSDBA。/表示采用操作系统身份验证方式登录,此时无需指定用户名和密码,即使指定也会被忽略。

小芝士:
PWD密码中带有特殊字符(/,@.:等),需要外加三层双引号("""""")进行转义。
PWD密码中带有特殊字符的具体转义处理规则:
登录时,密码中含有/,@.:等特殊字符时,密码需要外加三层双引号("""""")进行转义。
下面使用一个例子进行解析。例如:密码为aaa/aaa,首先dexp要求对含有特殊字符的密码内部进行转义(外加一层双引号),写成"aaa/aaa"。其次,要将转义后的内容作为一个整体传给dexp(外加一层双引号),写成"“aaa/aaa”"。最后,整个内容需要作为一个整体传给操作系统(外加一层双引号),因此写成""“aaa/aaa”""。

例如,使用上面的规则举例,密码为SYSDBA/,@.:,端口号为5236的本地服务器,USERID可写成如下所示:

./dexp USERID=SYSDBA/"""SYSDBA/,@.:"""@LOCALHOST:5236

2.FILE

FILE用于明确指定导出的文件(可以包含路径),可以包含多个文件,用逗号分隔,为可选参数,如果不选用FILE参数(来明确指定导出文件名称),那么默认导出文件名称dexp.dmp。

例如,设置 FILE=db_str.dmp,导出文件名为 db_str.dmp

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp

假设之前导出的文件路径为:FILE=/mnt/data/dexp/db_str.dmp,那么导入文件可以写成如下所示:

./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log 
DIRECTORY=/mnt/data/dimp 

小芝士:
如果FILE指定的文件包含生成路径,则忽略DIRECTORY中的路径;
如果FILE没有指定路径时,使用DIRECTORY中指定的路径;
如果FILE和DIRECTORY都没有指定路径,则使用系统当前路径。

文件也可以在生成过程中自动扩展成多个。首先,文件名需要包含通配符%U,用于作为自动扩充文件的文件名模板。%U表示为2个字符宽度的数字,由系统自动生成,起始为01。其次,使用 FILESIZE 参数来指定文件的大小。

例如,设置FILE=db_str%U.dmp,导出文件名为db_str%U.dmp。同时使用%U 对文件进行扩展,使用FIZESIZE=128m指定文件大小

./dexp USERID=SYSDBA/SYSDBA FILE=db_str%U.dmp LOG=db_str.log FULL=Y 
DIRECTORY=/mnt/data/dexpFILESIZE=128m 

dimp同理;

3.LOG

LOG用于明确指定导出的日志文件名称(可以包含路径),可以包含多个文件,用逗号分隔。可选参数。如果不选用LOG参数(来明确指定日志文件名称),那么默认导出日志文件,名称为 dexp.log

例如,指定日志文件名为 db_str.log
导出时:

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y 
DIRECTORY=/mnt/data/dexp

导入时:

./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dimp

文件也可以在生成过程中自动扩展成多个。首先,文件名需要包含通配符%U,用于作为自动扩充文件的文件名模板。%U 表示为 2 个字符宽度的数字,由系统自动生成,起始为 01。其次,使用 FILESIZE 参数来指定文件的大小

例如,指定日志文件名为 db_str%U.log。同时使用%U 对文件进行扩展,使用FIZESIZE=128m 指定文件大小。

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str%U.log FULL=Y DIRECTORY=/mnt/data/dexpFILESIZE=128m

小芝士:
如果 LOG 指定的文件包含生成路径,则忽略 DIRECTORY 中的路径;
如果 LOG 没有指定路径时,使用 DIRECTORY 中指定的路径;
如果 LOG 和 DIRECTORY 都没有指定路径,则使用系统当前路径。

4.DIRECTORY

DIRECTORY 用于指定导出文件及日志文件生成的路径。可选参数,缺省为导出到 dexp所在路径。
如果 FILE 和 LOG 参数指定的文件包含生成路径,则 FILE 和 LOG 参数中指定的路径将替代 DIRECTORY 所指定的路径;如果 FILE 和 LOG 参数指定的文件未包含路径信息,则文件将被生成到DIRECTORY制定的目录下;如果都没有指定路径,程序将根据当前的运行环境来设置相应的导出路径,一般为当前路径。

例如,没有指定路径,使用当前路径

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y 
./dimp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y

指定路径/mnt/data/dexp

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y 
DIRECTORY=/mnt/data/dexp

指定 FILE 使用/mnt/data/dexp 路径,LOG 使用/mnt/data/dimp 路径

./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp db_str.dmp LOG=db_str.log 
FULL=Y DIRECTORY=/mnt/data/dimp

小芝士:
FILE和LOG中指定的路径,优先级高于DIRECTORY中指定的路径。
当FILE和LOG不指定路径时,才使用DIRECTORY指定的路径。
如果都没有指定路径,则使用系统当前路径

在使用 dexpdp 和 dimpdp 时,DIRECTORY 参数支持使用在服务器端通过 CREATE DIRECTORY 定义的目录名。
例如,先在服务器端创建名为GYFDIR的目录,再使用该目录进行导出。

--先连接上远程的数据库服务器 192.168.60 
disql.exe SYSDBA/SYSDBA@192.168.1.60 
--在远程服务器上创建目录 
CREATE OR REPLACE DIRECTORY  "GYFDIR"  AS 'E:\test\path'; 
--使用 dexpdp 导出文件 
dexpdp.exe USERID=SYSDBA/SYSDBA FILE=dexpDP.dmp LOG=dexpDP.log FULL=Y 
DIRECTORY=GYFDIR

5.四种导出导入级别

针对数据库对象,有 FULL、OWNER、SCHEMAS、TABLES 四种导出方式可供选择。一次导出只能指定一种方式。可选参数,缺省为 SCHEMAS。

5.1 FULL

FULL 方式导出数据库的所有对象
例如,设置 FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径/mnt/data/dexp 下

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=YDIRECTORY=/mnt/data/dexp 

设置 FULL=Y,导入整个数据库,导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在/mnt/data/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y 
DIRECTORY=/mnt/data/dimp

5.2 OWNER

OWNER 方式导出一个或多个用户拥有的所有对象

例如,设置 OWNER=USER01,导出用户 USER01 所拥有的对象全部导出

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 
DIRECTORY=/mnt/data/dexp

设置 OWNER=USER01,导入用户 USER01 所拥有的对象全部导出。导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在/mnt/data/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log 
OWNER=USER01 DIRECTORY=/mnt/data/dimp

5.3 SHEMAS

SCHEMAS 方式的导出一个或多个模式下的所有对象

例如,设置 SCHEMAS=USER01,导出模式 USER01 模式下的所有对象

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log 
SCHEMAS=USER01DIRECTORY=/mnt/data/dexp 

设置 SCHEMAS=USER01,导入模式 USER01 模式下的所有对象。导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在/mnt/data/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log 
SCHEMAS=USER01 DIRECTORY=/mnt/data/dimp

注意:一般情况下,OWNER与SCHEMAS导入导出是相同的。
但是用户可以包含多个模式,在这种情况下,SCHEMAS的导入导出是OWNER导入导出的一个子集。

5.4 TABLES

TABLES 方式导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。 和 TABLES 导入有关的参数还有 EXCLUDE,用来指定导入时过滤掉某类对象。

例如,设置 TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息。

lang./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 
DIRECTORY=/mnt/data/dexp

设置 TABLES=table1,table2,导入 table1,table2 两张表的所有数据和信息。导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在/mnt/data/dimp

./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log 
TABLES=table1,table2 DIRECTORY=/mnt/data/dimp 

小芝士:

1.用户名、模式名和表名的书写规定
对于输入的用户名、模式名和表名,工具都会自动转换为大写。
例如:输入的命令 TABLES=t1,那么实际处理的表是 T1。
对于小写的用户名、模式名和表名,为了不转换为大写,需要转义。
转义步骤如下:第一步,如果想输入小写的名字不被转成大写,dexp 要求将名称使用双引
号扩起来。例如:名称为 tab1,要写成"tab1"。第二步,另外,操作系统要求将传入的名
称使用双引号括起来作为一个整体,同时要求内层的双引号还需要被转义。所以最终写成
““tab1””。

例如,表名为小写 tabname,语句中应该写为"“tabname”"。

./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES="\"tabname\"" 

如果含有特殊字符(双引号、单引号、空格、逗号等)的用户名、模式名和表名需要转义。
具体规则如下:
转义步骤如下:
第一步, dexp 要求对含有特殊字符的对象名称需要使用双引号括起来,
同时特殊字符需要被转义(使用双引号")。例如:表名为 tab1",需写成"tab1""";
第二步,另外,操作系统要求将传入的名称使用双引号括起来作为一个整体,同时要求内层的双引号和特殊字符还需要被转义。所以最终写成:"“tab1"”""。

例如,表名为小写 tabname",语句中应该写为"“tabname”"""。

./dexp USERID=SYSDBA/SYSDBA@192.168.0.248:8888 FILE=db_str.dmp LOG=db_str.log TABLES="\"tabname\"\"\"" 

总结:达梦数据库逻辑导入和导出的用法不难,掌握以上内容即可。
更多资讯请上达梦技术社区了解: https://eco.dameng.com

最后修改时间:2021-09-15 16:39:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论