达梦作为具有完全自主知识产权的高性能的国产数据库,提供自带的命令行工具逻辑导出(dexp)、逻辑导入(dimp)进行数据库的备份、还原。
逻辑备份和还原需要在数据库联机状态(数据库正常运行中)下才可以进行,逻辑备份分为四种级别:数据库级、用户级、模式级、表级。
一、数据库级别:
数据库级别是将整个库导出,使用参数FULL=Y.
库级别导出需要使用SYSDBA用户:
dexp USERID=SYSDBA/SYSDBA123456 DIRECTORY=/data/exp FILE=FULL_DB.dmp LOG=full_db.log FULL=Y
库级别导出在实际生产过程中并不常用。
二、用户级别:
用户级别逻辑备份指将一个或多个用户所有模式中对象导出。参数OWNER。
示例:
将A库中的用户DAMENG、SCOTT下所有模式中对象导出,然后导入B库中,语句如下。
dexp USERID=SYSDBA/SYSDBA123456 DIRECTORY=/data/dmp FILE=DAMENG_exp.dmp LOG=user_exp.log OWNER=DAMENG,SCOTT
B库导入导入前需要将用户DAMENG、TEXT创建,并授予RESOURCE用户权限,将user_exp.dmp传至B库执行目录下/data/imp,语句如下:
dimp USERID=SYSDBA/SYSDBA123456 DIRECTORY=/data/dmp FILE=DAMENG_exp.dmp LOG=user_exp.log OWNER=DAMENG,SCOTT
需要注意的是在使用过程中:
1.OWNER参数值名称大小写敏感。多个用户导出将用户以逗号隔开。
2.单个用户导出在使用OWNER参数以用户级别导出时,可以使用被导出用户作为USERID的用户进行操作。
3.导入扩展:
导入B库的TMP用户下,需要使用REMAP_SCNEMA参数将DAMENG用户中所有模式做一一映射。
例如:
dimp USERID=SYSDBA/SYSDBA123456 DIRECTORY=/data/dmp FILE=DAMENG_exp.dmp LOG=user_exp.log REMAP_SCHEMA=DAMENG:TMP,SCOTT:TMP
导入后所有模式对象都会导入用户TMP的默认模式TMP下,如果需要保留原有模式可以将参数修改为:REMAP_SCHEMA=DAMENG:DAMENG,SCOTT:SCOTT,会自动创建对应的模式,所属用户为TMP。
三、模式级别:
模式级别逻辑备份指一个用户下一个或多个模式导出。使用参数SCHEMAS。
示例:
将
A库中的DAMENG用户下有三个模式DAMENG、CESHI01、CESHI02中,先需要将其中CESHI01、CESHI02模式导出,然后导入B库中。导出两种方式,任选其一即可,语句如下:
(1)DAMENG用户导出:
dexp USERID=DAMENG/DAMENG123456 DIRECTORY=/data/dmp FILE=DAMENG_exp.dmp LOG=DAMENG_exp.log SCHEMAS=CESHI01,CESHI02
(2)SYSDBA用户导出:
dexp USERID=SYSDBA/SYSDBA123456 DIRECTORY=/data/dmp FILE=DAMENG_exp.dmp LOG=DAMENG_exp.log SCHEMAS=CESHI01,CESHI02
B库导入也分两种方式,但是导入前需要将用户DAMENG创建,并授予RESOURCE用户权限,将DAMENG_exp.dmp传至B库执行目录下/data/imp:
(1)使用DAMENG用户导入,语句如下:
dimp USERID=DAMENG/DAMENG123456 DIRECTORY=/data/imp FILE=DAMENG_exp.dmp LOG=DAMENG_imp.log
(2)使用SYSDBA用户导入,语句如下:
dimp USERID=SYSDBA/SYSDBA123456 DIRECTORY=/data/imp FILE=DAMENG_exp.dmp LOG=DAMENG_imp.log
注意事项:
1.使用用户DAMENG做模式级别逻辑备份操作时,一定要使用参数SCHEMAS来指定导出的模式,例如:
dexp USERID=DAMENG/DAMENG123456 DIRECTORY=/data/imp FILE=DAMENG_exp.dmp LOG=DAMENG_imp.log
上面导出没有SCHEMAS参数,只会导出用户同名的默认模式DAMENG,其他所属模式不会导出。如果用户只有一个与用户同名的默认模式则不可以指定SCHEMAS参数。
2.导入扩展:
(1)B库导入时需要将模式CESHI01、CESHI02中对象全部导入默认模式DAMENG中,需要使用参数REMAP_SCHEMA,以DAMENG用户导入为例,语句如下:
dimp USERID=DAMENG/DAMENG123456 DIRECTORY=/data/imp FILE=DAMENG_exp.dmp LOG=DAMENG_imp.log REMAP_SCHEMA=CESHI01:DAMENG,CESHI02:DAMENG
REMAP_SCHEMA参数是将CESHI01、CESHI02模式映射到默认模式DAMENG下,导入时CESHI01、CESHI02模式中的对象则会导入DAMENG模式下,而不会再创建CESHI01、CESHI02模式。已有的DAMENG模式则不需要指定。
(2)B库导入用户为SCOTT用户,模式CESHI01、CESHI02下对象全部导入SCOTT用户的默认模式SCOTT下,语句如下:
dimp USERID=SCOTT/SCOTT123456 DIRECTORY=/data/imp FILE=DAMENG_exp.dmp LOG=DAMENG_imp.log REMAP_SCHEMA=CESHI01:SCOTT,CESHI02:SCOTT,DAMENG:SCOTT
(3)B库导入用户为SCOTT用户,模式CESHI01、CESHI02下对象全部导入SCOTT用户下的其中一个TMP模式下,语句如下:
dimp USERID=SCOTT/SCOTT123456 DIRECTORY=/data/imp FILE=DAMENG_exp.dmp LOG=DAMENG_imp.log REMAP_SCHEMA=CESHI01:TMP,CESHI02:TMP,DAMENG:TMP
其中TMP模式不需要手动创建,使用REMAP_SCHEMA参数导入时会自动创建TMP模式,模式所属用户是SCOTT。但是需要注意的是在此不能使用SYSDBA用户进行导入,因为导入成功后模式SCOTT所属用户会是SYSDBA,用户SCOTT没有再次授权是没有访问权限的。
四、表级别逻辑备份
表级别逻辑备份指一个或多个指定表导出,使用参数TABLES。
示例:
将A库下DAMENG用户下的模式CESHI01中的ADDRESS、PERSON两表导出,语句如下:
dexp USERID=DAMENG/DAMENG123456 DIRECTORY=/data/dmp FILE=CESHI_tables.dmp LOG=CESHI_tables.log TABLES=CESHI01.ADDRESS、CESHI01.PERSON
B库导入前创建DAMENG用户,授予RESOURCE权限,dmp文件位置/data/imp。语句如下:
dimp USERID=DAMENG/DAMENG123456 DIRECTORY=/data/imp FILE=CESHI_tables.dmp LOG=CESHI_tables.log TABLES=CESHI01.ADDRESS、CESHI01.PERSON
注意事项:
1.使用参数TABLES导出指定名称的表,如果是默认模式下的表,参数TABLES后直接输入表名作为参数值,如果是用户非模式下的表,则每个表名需要加模式名做前缀。
2.表级别逻辑备份可以使用SYSDBA用户进行操作。
3.表级别逻辑备份扩展:
(1)导入不同名用户下,例如导入B库TMP用户下,语句如下:
dimp USERID=TMP/TMP123456 DIRECTORY=/data/imp FILE=CESHI_tables.dmp LOG=CESHI_tables.log REMAP_SCHEMA=CESHI01:TMP
如果要保留CESHI01模式,则参数REMAP_SCHEMA=CESHI01:CESHI01,CESHI01自动创建。
(2)表级别逻辑备份可以备份不同用户下不同模式的指定表,例如导出A库中DAMENG用户下CESHI02模式中的PERSON表、DNHR用户下HR模式中的EMPLOYEE表,语句如下:
dimp USERID=SYSDBA/SYSDBA123456 DIRECTORY=/data/dmp FILE=sys_tables.dmp LOG=sys_tables.log TABLAS=CESHI02.PERSON,DMHR.HR.EMPLOYEE
导入B库中的TMP用户,可以使用SYSDBA用户导入,也可以使用TMP用户导入,使用REMAP_SCHEMA参数,例如TMP用户导入,语句如下:
dimp userid=TMP/TMP123456 DIRECTORY=/data/imp FILE=sys_tables.dmp LOG=sys_tables.log REMAP_SCHEMA=DMHR:DAMENG,SALES:DAMENG