1、备份
创建备份出来的文件存放的位置。

创建目录对象,在数据库中创建一个目录对象,该对象指向文件系统中用于存储导出文件的实际目录( sql 命令,可以在 plsql 中执行)。
sql
-- 创建目录对象,'\D:\Oracle19c\backup' 需替换为你实际的导出目录
CREATE OR REPLACE DIRECTORY dump_dir AS 'D:\Oracle19c\backup';
dump_dir:就是数据库中的一个对象,代表这个目录,这个可以自定义。
导出数据库之 "全库导出"(命令行执行)。
sql
expdp ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.dmp LOGFILE=full_export.log FULL=Y
ZERO_ECOLOGICAL_CHAIN:用户名。
1231:密码。
orcl:数据库实例名(一般是orcl)。
ZERO_ECOLOGICAL_CHAIN.dmp:导出后的文件名。
执行如图:

...
这样就导出了,并且在刚才的目录下能看到一个 .dmp文件。

导出数据库之 "按表导出"(命令行执行,后面的 table1、table2 就是表名)。
sql
expdp ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.dmp LOGFILE=table_export.log TABLES=table1,table2
2、还原
还原数据,跟刚才一样,先创建目(我这里因为是本地,刚已经建立好了,就不重复建了,就直接用刚才的目录了)。
sql
-- 以具有 DBA 权限的用户登录到数据库,例如 SYSTEM
-- 创建目录对象,'D:\oracle_dump' 需替换为实际存储 DMP 文件的目录
CREATE OR REPLACE DIRECTORY dump_dir AS 'D:\Oracle19c\backup';
建还原用的用户,并赋予角色,再给用户对这个文件目录的读写权限,创建表空间,把表空间和用户绑定起来(创建表空间的时候,要确保 D:\Oracle19c\TABLESPACE_RESTORE\ 文件目录是存在的)。
sql
-- 新建用户
CREATE USER RESTORE_ZERO_ECOLOGICAL_CHAIN IDENTIFIED BY 1231;
-- 给用户 用户名 赋予角色(这里直接是系统角色,如果想要其他角色也可以自己加)
GRANT DBA TO RESTORE_ZERO_ECOLOGICAL_CHAIN;
-- 授予用户对目录对象读取权限
GRANT READ, WRITE ON DIRECTORY dump_dir TO RESTORE_ZERO_ECOLOGICAL_CHAIN;
-- 创建表空间和表空间里的数据文件
CREATE TABLESPACE RESTORE_ZERO_ECOLOGICAL_CHAIN -- 表空间名字 表空间名字
DATAFILE 'D:\Oracle19c\TABLESPACE_RESTORE\RESTORE_ZERO_ECOLOGICAL_CHAIN.DBF' SIZE 1024M --如D:\Oracle19c\表空间名字\用户名.DBF 1024M 数据文件的初始大小
AUTOEXTEND ON NEXT 1024M -- 启用自动扩展特性 1024M 数据文件在需要扩展时增加的大小
MAXSIZE 20480M -- 20,480M 数据文件可以自动扩展到的最大尺寸
LOGGING; -- 日志记录选项,用于决定是否在数据库的重做日志中记录对表空间中数据的更改。
-- 给用户指定默认表空间(就是以后数据就存储在这里面)
ALTER USER RESTORE_ZERO_ECOLOGICAL_CHAIN DEFAULT TABLESPACE RESTORE_ZERO_ECOLOGICAL_CHAIN;
建用户之后,可以查看一下当前用户有哪些表。
sql
-- 查看当前用户有哪些表
SELECT table_name
FROM all_tables
WHERE owner = 'RESTORE_ZERO_ECOLOGICAL_CHAIN';
可以看到刚建完的用户是没有表的。

还原数据之 "全库还原"(命令行执行,因为这个是扫描整个数据库,而不是特定的用户,如果其他用户下有相同的表,就会跳过,所以不建议全库导入)。
sql
impdp RESTORE_ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.DMP LOGFILE=full_import.log FULL=Y
特定用户导入(建议)。
sql
impdp RESTORE_ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.DMP LOGFILE=import.log SCHEMAS=ZERO_ECOLOGICAL_CHAIN REMAP_SCHEMA=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN REMAP_TABLESPACE=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN
SCHEMAS=ZERO_ECOLOGICAL_CHAIN:
ZERO_ECOLOGICAL_CHAIN:在数据库中,只检索该用户下的表。
指定只从导出文件中导入ZERO_ECOLOGICAL_CHAIN 用户的对象。这样,导入操作就不会去检查数据库中其他用户的同名表,而是聚焦在指定的这个用户的对象上,就能避免其他用户有相同的表的时候,导入不全的问题。
REMAP_SCHEMA=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN:
ZERO_ECOLOGICAL_CHAIN:指定查找备份文件中具体的用户下的表。
RESTORE_ZERO_ECOLOGICAL_CHAIN:需要导入的用户。
此参数用于将导出文件中原本属于 ZERO_ECOLOGICAL_CHAIN 用户的对象,在导入时重新映射到 RESTORE_ZERO_ECOLOGICAL_CHAIN 用户下,实现指定导入某个用户下面的表到指定用户(看情况使用)。
REMAP_TABLESPACE=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN:
ZERO_ECOLOGICAL_CHAIN:原表空间的名字。
RESTORE_ZERO_ECOLOGICAL_CHAIN:导入的用户所在的表空间。
因为数据仍存储在源用户的表空间,导入的时候,如果不指定表空间,不管导入的用户是哪个表空间,都会导入到源表空间,如果源表空间又不存在,就会尝试导入到导入用户的表空间,如果没有足够的权限,可能导致报错,但是如果有源表空间,但是不是该用户下的,后期还要移动比较麻烦,就可以指定一下(看情况使用)。
执行如图:

这样就完成导入了,然后再去查一下用户下的表,表都导入进来了就没问题了。
