前言
DM 数据库的备份还原包括两种类型:物理备份还原和逻辑备份还原。物理备份还原是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份还原。例如使用 RMAN 工具进行的备份还原。逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。例如使用 dexp 和 dimp 进行的备份还原。
一、工具简介
逻辑导出(dexp) 和 逻辑导入(dimp) 是 DM 数据库安装自带的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的。两个工具都可在安装目录 /dmdbms/bin 中找到。
逻辑导出和逻辑导入数据库对象分为四种级别:数据库级、用户级、模式级和表级。四种级别独立互斥,不能同时存在。四种级别所提供的功能:
-
数据库级(FULL):导出或导入整个数据库中的所有对象。
-
用户级(OWNER):导出或导入一个或多个用户所拥有的所有对象。
-
模式级(SCHEMAS):导出或导入一个或多个模式下的所有对象。
-
表级(TABLES):导出或导入一个或多个指定的表或表分区。
二、dexp逻辑导出
2.1 工具介绍
dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。
dexp 工具名称有两种写法 dexp 和 dexpdp。两者语法完全相同。唯一的区别在于,dexp 导出的文件必须存放在客户端,dexpdp 导出的文件必须存放在服务器端。
2.2 使用方法
dexp 工具需要从命令行启动。在 cmd 命令行工具中找到 dexp 所在安装目录 /dmdbms/bin,输入 dexp 和参数后回车。参数在第四节详细介绍。
语法如下:
dexp PARAMETER=<value> { PARAMETER=<value> }
或
dexpdp PARAMETER=<value> { PARAMETER=<value> }
-
PARAMETER:dexp 参数。多个参数之间排列顺序无影响,参数之间使用空格间隔。
-
<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
三、dimp逻辑导入
3.1 工具介绍
dimp逻辑导入工具利用dexp工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。==dimp导入是dexp导出的相反过程。==还原的方式可以灵活选择,如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等。
dimp工具名称有两种写法dimp和dimpdp。两者语法完全相同。唯一的区别在于,dimp导入的文件必须存放在客户端,dexpdp导入的文件必须存放在服务器端。
3.2 使用方法
dimp工具需要从命令行启动。在cmd命令行工具中找到dimp所在安装目录/dmdbms/bin,输入dimp和参数后回车。参数在下一节详细介绍。
语法如下:
dimp PARAMETER=value { PARAMETER=value }
或
dimpdp PARAMETER=value { PARAMETER=value }
-
PARAMETER:dimp参数。多个参数之间排列顺序无影响,参数之间使用空格间隔。
-
value:参数取值。
例如,将逻辑备份采用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
四、参数详解
4.1 特殊参数
特殊参数中介绍了必选参数的和最常用的可选参数。
4.1.1 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}
- {{<USERNAME>[/<password>]} | /}:<username>[/<*password>]为用户名和密码。普通登录方式时用户名必写,密码缺省为SYSDBA。/表示采用操作系统身份验证方式登录,此时无需指定用户名和密码,即使指定也会被忽略。
- <svc_name>:服务名。
*- <host>[:<port>]:服务器IP地址和端口号。缺省情况下默认为本地服务器和端口号LOCALHOST:5236。当服务器为本机时,SERVER:PORT 可直接写LOCALHOST。当连接其他服务器时,SERVER:PORT需写上IP地址和PORTNUM,例如:192.168.0.248:8888。
- <unixsocket_file>:专门用于在LINUX系统中,当服务器与客户端之间使用UNIXSOCETUNIX-IPC方式通信时,指定客户端连接的UNIXSOCKET路径文件名。必须和inet_type=UNIXSOCKET同时使用。例如:*
./dexp SYSDBA/SYSDBA@/home/test/foo.sock##{inet_type=UNIXSOCKET} file=/home/dexp/dexp_test.dmp log=/home/log/
*- <option>为扩展选项,用法为<exetend_option>=<value>。所有 value 值不能包含空格,不能包含特殊的符号,如引号等。书写扩展选项时需要用引号##”{ }”进行封装,例如:##”{inet_type=tcp,mpp_type=local}”。
简化之为 用户名/口令@主库名:端口号#证书路径。
例如:
SYSDBA/SYSDBA*MPP_TYPE@server:5236#ssl_path@ssl_pwd
userid参数是必选的,其中主库名、端口号和证书路径为可选项。
注意:
PWD密码中带有特殊字符(/,@.:等),需要外加三层双引号(””””””)进行转义。
PWD 密码中带有特殊字符的具体转义处理规则:
登录时,密码中含有/,@.:等特殊字符时,密码需要外加三层双引号(””””””)进行转义。下面使用一个例子进行解析。例如:密码为aaa/aaa,首先,dexp要求对含有特殊字符的密码内部进行转义(外加一层双引号),写成”aaa/aaa”。其次,要将转义后的内容作为一个整体传给dexp(外加一层双引号),写成””aaa/aaa””。最后,整个内容需要作为一个整体传给操作系统(外加一层双引号),因此写成”””aaa/aaa”””。
例如,使用上面的规则举例,密码为 SYSDBA/,@.:,端口号为 5236 的本地服务器,USERID 可写成如下所示:
./dexp USERID=SYSDBA/"""SYSDBA/,@.:"""@LOCALHOST:PORT
4.1.2 FILE
FILE 用于明确指定导出的文件(可以包含路径),可以包含多个文件,用逗号分隔。 可选参数,如果不选用FILE参数(来明确指定导出文件名称),那么默认导出文件名称为dexp.dmp。
语法如下:
FILE=<文件>
例如,设置 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指定的文件也可以包含路径,设置FILE=/mnt/db_str.dmp。
./dexp USERID=SYSDBA/SYSDBA FILE=/mnt/db_str.dmp LOG=db_str.log FULL=Y
注意:
-
如果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
4.1.3 LOG
LOG 用于明确指定导出的日志文件名称(可以包含路径),可以包含多个文件,用逗号分隔。可选参数。如果不选用 LOG 参数(来明确指定日志文件名称),那么默认导出日志文件名称为 dexp.log。
语法如下:
LOG=<文件名>
例如,指定日志文件名为db_str.log。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y
DIRECTORY=/mnt/data/dexp
文件也可以在生成过程中自动扩展成多个。首先,文件名需要包含通配符%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都没有指定路径,则使用系统当前路径。
LOG 文件记载了导出对象的统计信息。供用户查看导出内容。
LOG 内容具体介绍如下:
-
如果导出级别为 TABLES,那么日志信息包含一张或多张表的索引、权限、数据行数。
-
如果导出级别为 SCHEMAS,那么日志信息只包含一个或多个模式中的对象统计信息,每个模式下的内容具体有:
导出 SEQUENCE、VIEW、COMMENT、PROCEDURE、SYNONYM、DBLINK、TRIGGER、PACKAGE、OBJECT、CLASS_BODY 和 DOMAIN 等对象的个数和名称,以及对象的权限。
依次导出表的索引、权限、数据行数。 -
如果导出级别为 OWNER,那么日志内容包含一个或多个用户所拥有的所有模式中的对象统计信息,每个模式下的内容和导出级别为 SCHEMAS 时一样。
-
如果导出级别为 FULL,那么日志内容除了包含所有模式中的对象信息,还包括系统包和系统视图。
和 LOG 有关的参数还有 NOLOGFILE、NOLOG 和 LOG_WRITE。NOLOGFILE=Y 用于设置不使用日志文件。NOLOG=Y 用于设置不在屏幕上显示日志信息。LOG_WRITE=Y 用于设置日志的实时打印(到日志文件)功能。
4.1.4 DIRECTORY
DIRECTORY 用于指定导出文件及日志文件生成的路径。可选参数,缺省为导出到 dexp 所在路径。
语法如下:
DIRECTORY=<path>
<path>:导出文件和日志文件生成的路径。
- 如果FILE和LOG参数指定的文件包含生成路径,则FILE和LOG参数中指定的路径将替代DIRECTORY所指定的路径;
- 如果FILE和LOG参数指定的文件未包含路径信息,则文件将被生成到DIRECTORY指定的目录下;
- 如果都没有指定路径,程序将根据当前的运行环境来设置相应的导出路径,一般为当前路径。
例如,没有指定路径,使用当前路径。
./dexp 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和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
四种级别的导出方式(full/owner/schemas/tables)
针对数据库对象,有FULL、OWNER、SCHEMAS、TABLES四种导出方式可供选择。一次导出只能指定一种方式。可选参数,缺省为SCHEMAS。
4.1.5 FULL
FULL方式导出数据库的所有对象。
语法如下:
FULL=Y
例如,设置FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径/mnt/data/dexp下。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log
FULL=YDIRECTORY=/mnt/data/dexp
4.1.6 OWNER
OWNER方式导出一个或多个用户拥有的所有对象。
语法如下:
OWNER=<用户名>{,<用户名>}
例如,设置OWNER=USER01,导出用户USER01所拥有的对象全部导出。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01
DIRECTORY=/mnt/data/dexp
4.1.7 SCHEMAS
SCHEMAS方式的导出一个或多个模式下的所有对象。
语法如下:
SCHEMAS=<模式名>{,<模式名>}
例如,设置SCHEMAS=USER01,导出模式USER01模式下的所有对象。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log
SCHEMAS=USER01DIRECTORY=/mnt/data/dexp
注意:
一般情况下,OWNER与SCHEMAS导入导出是相同的。但是用户可以包含多个模式,在这种情况下SCHEMAS的导入导出是OWNER导入导出的一个子集。
4.1.8 TABLES
TABLES 方式导出和导入一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。
语法如下:
TABLES=<表名>{,<表名>}
例如,设置TABLES=table1,table2,导出table1,table2两张表的所有数据和信息。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2
DIRECTORY=/mnt/data/dexp
和TABLES导出有关的参数还有QUERY、EXCLUDE和INCLUDE,都是用来设置过滤条件的。
OWNER、SCHEMAS、TABLES 的书写规定
(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\"\"\""
(2)如何转义双引号
dexp和dimp要求使用双引号”对双引号内的双引号转义。
WINDOWS命令行,使用双引号”或者反斜杠\对双引号内的双引号转义。
LINUX命令行,使用反斜杠\对双引号内的双引号转义。
4.2 dexp 导出其他参数
4.2.1 QUERY
**QUERY用于指定过滤条件来对表数据进行导出。**可选参数。
语法如下:
QUERY="<where_condition>"
<where_condition>:过滤条件。更详细了解请参考《DM8_SQL 语言使用手册》的 WHERE 子句。
例如,导出 OTHER.READER 表中满足”WHERE AGE=19”条件的数据。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=OTHER.READER
QUERY="WHERE AGE=19"
4.2.2 EXCLUDE
EXCLUDE用来批量设置导出时忽略的对象种类。可选参数。
语法如下:
EXCLUDE=(<对象种类名>{,<对象种类名>})
或者
EXCLUDE=TABLES:<表名\>{,<表名>}
或者
EXCLUDE=SCHEMAS:<模式名>{,<模式名>}
<对象种类名>:包括CONSTRAINTS、INDEXES、ROWS、TRIGGERS、GRANTS。
注意:
如果导出方式为TABLES表级或SCHEMAS模式级导出时,EXCLUDE=SCHEMAS:<模式名>{,<模式名>}排除模式不起作用。
例如,设置 EXCLUDE=(CONSTRAINTS),将当前用户下的 table1、table2 的对象信息导出时不导出约束。
./dexp SYSDBA/SYSDBA FILE=/mnt/data/db_str.dmp LOG=db_str.log TABLES=table1,table2 EXCLUDE=/(CONSTRAINTS/)
4.2.3 INCLUDE
INCLUDE用来批量设置导出时包含的对象种类。可选参数。
语法如下:
INCLUDE=(<对象种类名>{,<对象种类名>})
或者
INCLUDE=TABLES:<表名>{,<表名>}
<对象种类名>:CONSTRAINTS、INDEXES、ROWS、TRIGGERS或GRANTS。
例如,设置INCLUDE=(CONSTRAINTS,INDEXES),指明将当前用户下的table1的对象约束和索引信息导出。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1
DIRECTORY=/mnt/data/dexp INCLUDE=/(CONSTRAINTS,INDEXES/)
4.2.4 CONSTRAINTS、TABLESPACE、GRANTS、INDEXES、TRIGGERS、ROWS
这些参数用来指定某类对象是否被导出。类别分别为约束、表空间、权限、索引、触发器和数据。
语法如下:
CONSTRAINTS=N/Y
TABLESPACE= Y/N
GRANTS=N/Y
INDEXS=N/Y
TRIGGERS=N/Y
ROWS=N/Y
-
CONSTRAINTS=N:设置不导出约束。可选参数。缺省该参数为Y,导出约束。
-
TABLESPACE=Y:设置导出的对象定义中包含表空间。可选参数。缺省该参数为N,不包含表空间。
-
GRANTS=N:设置不导出权限。可选参数。缺省该参数为Y,导出权限。
-
INDEXES=N:设置不导出索引。可选参数。缺省该参数为Y,导出索引。
-
TRIGGERS=N:设置不导出触发器。可选参数。缺省该参数为Y,导出触发器。
-
ROWS=N:设置不导出数据。可选参数。缺省该参数为Y,导出数据。
例如,设置ROWS=N不导出表中的数据。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp NOLOGFILE=Y FULL=Y
DIRECTORY=/mnt/data/dexp ROWS=N
注意:
此处,对象(CONSTRAINTS、GRANTS、INDEXES、TRIGGERS、ROWS)分别单独设置,和EXCLUDE/INCLUDE中批量设置功能一样。设置一个即可。 如果单独设置和批量设置同时出现时,那么以最后出现的那个为准。
4.2.5 ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME
这三个参数用来设置导出文件加密。可选参数。
语法如下:
ENCRYPT=Y
ENCRYPT_PASSWORD=<加密密钥>
ENCRYPT_NAME=<加密算法>
ENCRYPT=Y:设置导出文件加密。如果设置ENCRYPT=Y,那么默认COMPRESS=Y,先压缩后加密。
ENCRYPT_PASSWORD=\<加密密钥\>:设置加密密钥。
ENCRYPT_NAME=\<加密算法\>:设置加密算法。缺省为 RC4。
加密算法: DES_ECB 、DES_CBC 、DES_CFB、DES_OFB、DESEDE_ECB、 DESEDE_CBC 、DESEDE_CFB、DESEDE_OFB 、AES128_ECB 、 AES128_CBC 、AES128_CFB 、AES128_OFB 、AES192_ECB 、 AES192_CBC 、AES192_CFB 、AES192_OFB 、AES256_ECB 、 AES256_CBC 、AES256_CFB 、AES256_OFB 、RC4。
例如,设置导出文件加密,密钥 abcdefg,加密算法为 DES_CBC。
./dexp SYSDBA/SYSDBA DIRECTORY=/mnt/data/dexp FILE=dk15.dmp LOG=db_str15.log
ENCRYPT=Y ENCRYPT_PASSWORD=abcdefg ENCRYPT_NAME=DES_CBC FULL=Y
注意:
ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME经常一起使用。 如果只设置ENCRYPT_PASSWORD一个,那么默认ENCRYPT=Y,ENCRYPT_NAME缺省值RC4。
4.2.6 DROP
DROP 用于设置导出后是否删除原表。可选参数。
语法如下:
DROP=Y/N
Y:导出后删除原表,但不级联删除。
N 或缺省参数:导出后不删除原表。
4.3 dimp 导入其他参数
4.3.1 IGNORE
IGNORE指定忽略创建数据库对象(表、类、java 类、domain、sequence、
comment、view、synonym、trigger、package、dblink、user、存储过程/函数、role对象创建、权限授权语句、索引、约束等)错误。可选参数。缺省为N,不忽略。
语法如下:
IGNORE=Y
IGNORE=Y:忽略导入时所产生的创建数据库对象错误并继续执行。当缺省或IGNORE=N时,不忽略导入时所产生的创建数据库对象错误,遇到错误即停止执行并报错。
4.3.2 TABLE_EXISTS_ACTION
TABLE_EXISTS_ACTION用于要导入的表已经存在时的处理方式。默认为直接报错。
语法如下:
TABLE_EXISTS_ACTION=[SKIP | APPEND | TRUNCATE | REPLACE]
-
SKIP:跳过此表。
-
APPEND:直接向现有表中导入数据
-
TRUNCATE:先删除现有表中的数据,再向表中导入数据
-
REPLACE:先删除现有表,再导数据
Dexp/dimp的参数详细介绍可以参照官方文档或者使用dexp/dimp help来获取帮助,在此不一一赘述。
五、实操练习
5.1 环境准备
-
导出库:环境为 windows10,服务器为 192.168.0.102,用户名和密码均为 SYSDBA。导出库是DM数据库系统安装时自带的名为 DMHR 的示例库,端口号 5236,大小写不敏感,编码为GB18030。
-
导入库:环境为 windows10,服务器为 192.168.0.102,用户名和密码均为 SYSDBA。准备另一数据库作为导入库,端口号为 5238,大小写不敏感,编码为GB18030。
5.2 用exp工具进行逻辑备份。
5.2.1 导出全库
进入到数据库安装目录,执行如下备份语句。DIRECTORY需要先创建。
dexp USERID=SYSDBA/SYSDBA@192.168.0.102:5236 DIRECTORY=E:\dmdbms\data\dexp FILE=db_str.dmp LOG=db_str.log FULL=Y
正在导出……
5.2.2 指定模式
dexp USERID=SYSDBA/SYSDBA@192.168.0.102:5236 DIRECTORY=E:\dmdbms\data\dexp FILE=db_schemas.DMP LOG=db_schemas.log SCHEMAS=DMHR
特别说明:
(1)要导出多个用户时,可以用逗号隔开,语法为OWNER=<用户名>{,<用户名>}
,如果用户名在数据库中显示为小写,需要用双引号括起来。 模式、表等也如此。
(2)模式为小写时,必须要用双引号括起来。一般情况下,owner与schemas导入导出是相同的。但是用户可以包含多个模式,在这种情况下schemas的导入导出时owner导入导出的一个子集。
例如:schemas=sales,\"test\",other
5.2.3 指定表
dexp USERID=SYSDBA/SYSDBA@192.168.0.102:5236 DIRECTORY=E:\dmdbms\data\dexp FILE=db_tables.DMP LOG=db_tables.log tables="DMHR"."JOB"
5.2.4 导出指定条件的表数据
dexp USERID=SYSDBA/SYSDBA@192.168.0.102:5236 DIRECTORY=E:\dmdbms\data\dexp FILE=db_sql.DMP LOG=db_sql.log tables="DMHR"."JOB" query="where MIN_SALARY=8000"
5.2.5 只导出表结构
dexp USERID=SYSDBA/SYSDBA@192.168.0.102:5236 DIRECTORY=E:\dmdbms\data\dexp FILE=db_struc.DMP LOG=db_struc.log rows=N tables="DMHR"."EMPLOYEE"
5.3 用imp工具进行逻辑还原。
5.3.1 全库导入
dimp USERID=SYSDBA/SYSDBA@192.168.0.102:5238 DIRECTORY=E:\dmdbms\data\dexp FILE=db_str.dmp LOG=imp_str.log FULL=Y
正在导入……
成功还原整个数据库!
5.3.2 从指定模式导入到指定模式的还原
为了确定效果,先把DMHR模式级联删除,再进行dimp导入。
dimp USERID=SYSDBA/SYSDBA@192.168.0.102:5238 DIRECTORY=E:\dmdbms\data\dexp FILE=db_schemas.DMP LOG=imp_schema1.log SCHEMAS=DMHR
5.3.3 指定是否忽略建表错误
为了确定效果,先把JOB表级联删除,再进行dimp导入。
dimp USERID=SYSDBA/SYSDBA@192.168.0.102:5238 DIRECTORY=E:\dmdbms\data\dexp FILE=db_tables.DMP LOG=imp_table.log IGNORE=Y
5.3.4 只还原表结构
为了确定效果,先把EMPLOYEE表级联删除,再进行dimp导入。
dimp USERID=SYSDBA/SYSDBA@192.168.0.102:5238 DIRECTORY=E:\dmdbms\data\dexp FILE=db_struc.DMP LOG=imp_struc.log rows=N
查看表数据发现是空表,只还原表结构成功。
六、报错问题
[警告]表 SYSDBA.ADDRESS 不存在或者为系统内部对象,请核对后再进行输入
(1)可能是大小写敏感问题。
(2)可能是tables参数需要带模式名,才能准确识别。
[警告]服务器与文件内数据的CASE_SENSITIVE 参数不匹配
这个情况是用DM8(大小写敏感)的备份文件还原到DM7(大小写不敏感)上。
总结
本文简单介绍了达梦数据库中的dexp和dimp工具及其使用方法,大致介绍了几项特殊参数,并实践部分代码演示达梦数据库的逻辑导出导入流程。如果文中有误,欢迎指出,大家共同交流进步!
更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/