达梦逻辑备份与还原
一、前言
1.1概念
逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,即在数据库服务器正常运行过程中进行的备份和还原。
1.2术语
逻辑导出:使用 dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。
逻辑导入:dimp 逻辑导入工具利用 dexp 工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp 导入是 dexp 导出的相反过程。
1.3dexp 逻辑导出
dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。
1.3.1 使用 dexp 工具
dexp 工具需要从命令行启动。以数据库软件安装目录为 /dm8/bin 为例,在 /dm8/bin 路径下输入 dexp 和参数后回车。
##语法如下 dexp PARAMETER= { PARAMETER= }
1.3.2参数详解
参数 含义 备注
USERID 数据库的连接信息 必选
FILE 明确指定导出文件名称 可选。如果缺省该参数,则导出文件名为dexp.dmp
DIRECTORY 导出文件所在目录 可选
FULL 导出整个数据库(N) 可选,四者中选其一。缺省为SCHEMAS
OWNER 用户名列表,导出一个或多个用户所拥有的所有对象
SCHEMAS 模式列表,导出一个或多个模式下的所有对象
TABLES 表名列表,导出一个或多个指定的表或者表分区
FUZZY_MATCH TABLES 选项是否支持模糊匹配(N) 可选
QUERY 用于指定对导出表的数据进行过滤的条件 可选
PARALLEL 用于指定导出的过程中所使用的线程数目 可选
TABLE_PARALLEL 用于指定导出每张表所使用的线程数,在MPP模式下会转换成单线程 可选
TABLE_POOL 用于设置导出过程中存储表的缓冲区个数 可选
1.3.3四种级别导出功能
1.3.3.1.FULL
FULL 方式导出数据库的所有对象。Copy##设置 FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径 /mnt/data/dexp下。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
1.3.3.2 OWNER
OWNER 方式导出一个或多个用户拥有的所有对象。Copy##设置 OWNER=USER01,导出用户 USER01 所拥有的对象全部导出。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
1.3.3.3 SCHEMAS
SCHEMAS 方式的导出一个或多个模式下的所有对象。Copy##设置 SCHEMAS=USER01,导出模式 USER01 模式下的所有对象。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
1.3.3.4 TABLES
TABLES 方式导出一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。Copy##设置 TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息。和 TABLES 导出有关的参数还有 QUERY、EXCLUDE 和 INCLUDE,都是用来设置过滤条件的。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
二、库级导入导出
2.1准备数据
CREATE TABLE T1(C1 INT);
INSERT INTO T1 VALUES(1);
CREATE USER USER1 IDENTIFIED BY " USER123456";
CREATE TABLE USER1.T2(C1 INT,C2 VARCHAR(20));
INSERT INTO USER1.T2 VALUES(1,‘张三’);
INSERT INTO USER1.T2 VALUES(2,‘李四’);
commit;
2.2执行数据库级逻辑导出
./dexp sysdba/Dameng123:5391 full=y file=full_test1.dmp log=full_test1.log
2.3删除表
drop table t1;
drop table user1.t2;
2.4执行全数据库逻辑导入
./dimp sysdba/Dameng123:5391 full=y file=full_test1.dmp log=full_test1_02.log
出现告警的原因是之前的表存在,本次实验与之无关,忽略警告。
3.2执行模式级逻辑导出
./dexp sysdba/Dameng123:5391 file=dm_moshi.dmp log=dm_moshi.log SCHEMAS=dm_moshi;
2.5验证
select * from t1;
select * from user1.t2;
三、模式级导出导入
3.1准备数据
create user dm_moshi IDENTIFIED BY " USER123456";
create schema dm_moshi_test AUTHORIZATION dm_moshi;
/
create table dm_moshi.test(id int, name varchar(20));
INSERT INTO dm_moshi.test VALUES(1,‘张三’);
INSERT INTO dm_moshi.test VALUES(2,‘李四’);
INSERT INTO dm_moshi.test VALUES(3,‘王五’);
查询创建的模式
select b.id userid, b.name username,a.id scheid, a.name schename from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b where a.“TYPE$” = ‘SCH’ and a.pid = b.id;
3.3删除表
drop table dm_moshi.test;
3.4执行模式级逻辑导入
./dimp sysdba/Dameng123:5391 file=dm_moshi.dmp log=imp_dm_moshi.log SCHEMAS=dm_moshi;
3.5验证
select * from dm_moshi.test;
四、用户级导出导入
4.1准备数据
CREATE USER dm_yonghu IDENTIFIED BY “dm_yonghu123456”;
CREATE TABLE dm_yonghu.dm_yonghutbl(C1 INT,C2 VARCHAR(20));
INSERT INTO dm_yonghu.dm_yonghutbl VALUES(3,‘张三’);
INSERT INTO dm_yonghu.dm_yonghutbl VALUES(4,‘李四’);
INSERT INTO dm_yonghu.dm_yonghutbl VALUES(5,‘王五’);
commit;
4.2执行用户级逻辑导出
./dexp sysdba/Dameng123:5391 file=dm_yonghu.dmp log=dm_yonghu.log OWNER=dm_yonghu;
4.3删除USER1用户及其对象:
DROP USER dm_yonghu CASCADE;
4.4创建用户
先创建该用户,再执行导入
CREATE USER dm_yonghu IDENTIFIED BY “dm_yonghu123456”;
4.5执行用户级逻辑导入
./dimp sysdba/Dameng123:5237 file=dm_yonghu.dmp log=imp_dm_yonghu.logg OWNER=dm_yonghu;
4.6验证
五、表级导出导入
5.1准备数据
CREATE USER dm_table IDENTIFIED BY “dm_table123456”;
CREATE TABLE dm_table.dm_tabletbl(C1 INT,C2 VARCHAR(20));
INSERT INTO dm_table.dm_tabletbl VALUES(3,‘张三’);
INSERT INTO dm_table.dm_tabletbl VALUES(4,‘李四’);
INSERT INTO dm_table.dm_tabletbl VALUES(5,‘王五’);
commit;
select * from dm_table.dm_tabletbl;
5.2执行表级逻辑导出
./dexp sysdba/Dameng123:5391 file=tab_tabletbl.dmp log=tab_tabletbl.log TABLES=dm_table.dm_tabletbl;
5.3删除表
drop table dm_table.dm_tabletbl;
5.4执行表级逻辑导入
./dimp sysdba/Dameng123:5391 file=tab_tabletbl.dmp log=imp_tab_tabletbl.log tables=dm_table.dm_tabletbl;
5.5验证
select * from dm_table.dm_tabletbl ;
六、dexpdp,dimpdp使用
6.1.创建目录
create directory direct as ‘/home/direct’;
6.2创建测试用户
create user tt identified by passwordfortt;
6.3赋权
grant create session to tt;
grant resource to tt;
grant read,write on directory direct to tt;
6.4创建测试表插入数据
create table test (id number(10),name varchar2(10));
insert into test values (1,‘jack’);
insert into test values (2,‘lucy’);
insert into test values (3,‘scott’);
Commit;
6.5导出test表数据
./dexpdp tt/passwordfortt:5391 directory=/home/direct file=test.dmp log=test.log tables=tt.test
dexpdp V8
6.6删除test表
drop table test;
6.7导入数据
./dimpdp tt/passwordfortt:5391 directory=/home/direct file=test.dmp log=impdp_test.log
6.8验证
七、补充跨模式跨用户导入导出
7.1表级别的跨模式导入
7.1.1准备数据
create user tbl_kua_moshi IDENTIFIED BY " USER123456";
create schema tbl_kua_moshi AUTHORIZATION tbl_kua_moshi;
create table tbl_kua_moshi.test1(id int, name varchar(20));
INSERT INTO tbl_kua_moshi.test1 VALUES(1,‘张三’);
INSERT INTO tbl_kua_moshi.test1 VALUES(2,‘李四’);
INSERT INTO tbl_kua_moshi.test1 VALUES(3,‘王五’);
select a.name as username, b.name as schenma from sysobjects a inner join sysobjects b on a.id = b.pid where b.subtype$ is null order by username desc;
7.1.2表级别跨模式导出
./dexp sysdba/Dameng123:5391 file=tbl_kua_moshi.dmp log=tbl_kua_moshi.log tables=tbl_kua_moshi.test1
7.1.2新建模式
create schema new_tbl_kua_moshi AUTHORIZATION tbl_kua_moshi;
/
7.1.3表级别跨模式导入
./dimp sysdba/Dameng123:5391 file=tbl_kua_moshi.dmp log=imp.log tables=tbl_kua_moshi.test1 REMAP_SCHEMA=tbl_kua_moshi:new_tbl_kua_moshi
7.1.4验证
7.2模式级别的跨模式导入导出
7.2.1删除之前表
7.2.2模式级别的跨模式导出
./dexp sysdba/Dameng123:5391 file=kuamoshi.dmp log=kuamoshi.log SCHEMAS=tbl_kua_moshi
7.2.3模式级别的跨模式导入
./dimp sysdba/Dameng123:5391 file=kuamoshi.dmp log=kuamoshid.log SCHEMAS=tbl_kua_moshi REMAP_SCHEMA=tbl_kua_moshi:new_tbl_kua_moshi
7.2.4验证
7.3用户级别的跨用户导入
7.3.1准备数据
create user tbl_kua_yonghu IDENTIFIED BY " USER123456";
create user new_tbl_kua_yonghu IDENTIFIED BY " USER123456";
create table tbl_kua_yonghu.test1(id int, name varchar(20));
INSERT INTO tbl_kua_yonghu.test1 VALUES(1,‘张三’);
commit;
select * from tbl_kua_yonghu.test1;
7.3.2用户级别的跨用户导出
./dexp sysdba/Dameng123:5391 file=SAMPLE.dmp log=DMETL_SAMPLE.log owner=tbl_kua_yonghu
7.3.3用户级别的跨用户导入
./dimp sysdba/Dameng123:5391 file=SAMPLE.dmp log=1cDMETL_SAM32PLE.log fromuser=tbl_kua_yonghu touser=new_tbl_kua_yonghu
7.3.4验证
有任何疑问请访问达梦官方网站:https://eco.dameng.com