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

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

执行如图:

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

相关推荐
大数据张老师1 分钟前
对比关系型数据库与NoSQL数据库
数据库·nosql
vvilkim10 分钟前
MongoDB数据建模完全指南:从理论到实践
数据库·mongodb
马剑威(威哥爱编程)10 分钟前
HarmonyOS NEXT 使用 relationalStore 实现数据库操作
数据库·华为·harmonyos·arkts·arkui
pianmian11 小时前
3dczml时间动态图型场景
前端·javascript·数据库
患得患失9491 小时前
【Django DRF】一篇文章总结Django DRF框架
数据库·django·sqlite
伊织code2 小时前
macOS 安装 PostgreSQL
数据库·macos·postgresql·gui·安装·客户端·psql
进击的CJR3 小时前
MySQL 8.0 OCP 英文题库解析(八)
数据库·mysql·开闭原则
旋风菠萝3 小时前
八股--SSM(2)
java·开发语言·数据库·八股·八股文·复习
petunsecn4 小时前
MySql添加非空字段时的“伪空”问题
数据库·mysql
小传blog4 小时前
解决PLSQL工具连接Oracle后无法使用ODBC导入器问题
数据库·oracle