windows 下 oracle 数据库的备份与还原

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:导入的用户所在的表空间。

因为数据仍存储在源用户的表空间,导入的时候,如果不指定表空间,不管导入的用户是哪个表空间,都会导入到源表空间,如果源表空间又不存在,就会尝试导入到导入用户的表空间,如果没有足够的权限,可能导致报错,但是如果有源表空间,但是不是该用户下的,后期还要移动比较麻烦,就可以指定一下(看情况使用)。

执行如图:

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

相关推荐
chanalbert1 小时前
数据库连接池深度研究分析报告
数据库·spring
snpgroupcn2 小时前
泰国零售巨头 CJ Express 借助 SAP 内存数据库实现高效数据管理
数据库·express·零售
明月看潮生4 小时前
青少年编程与数学 01-011 系统软件简介 19 SSMS 数据库管理工具
数据库·青少年编程·编程与数学
blammmp4 小时前
Redis : set集合
数据库·redis·缓存
翔云1234564 小时前
精准测量 MySQL 主从复制延迟—pt-heartbeat工具工作原理
数据库·mysql
厚衣服_34 小时前
第15篇:数据库中间件高可用架构设计与容灾机制实现
java·数据库·中间件
明月看潮生5 小时前
青少年编程与数学 01-011 系统软件简介 13 Microsoft SQL Server数据库
数据库·microsoft·青少年编程·系统软件
LUCIAZZZ5 小时前
项目拓展-Jol分析本地对象or缓存的内存占用
java·开发语言·jvm·数据库·缓存·springboot
寒山李白5 小时前
MySQL分库分表面试题深度解析
数据库·mysql·面试题
入眼皆含月6 小时前
docker安装mysql数据库及简单使用
数据库·mysql·docker