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 小时前
python上测试neo4j库
数据库·python·neo4j
我言秋日胜春朝★3 小时前
【MySQL】表的CRUD
数据库·mysql
新玉54013 小时前
SQL注入
数据库·sql·oracle
阿桨3 小时前
【Prometheus-OracleDB Exporter安装配置指南,开机自启】
数据库·oracle·centos·prometheus
赵渝强老师4 小时前
【赵渝强老师】使用TiDB的审计日志
数据库·tidb
code_shenbing4 小时前
.NET Core 数据库ORM框架用法简述
数据库·c#·.netcore·orm
❀͜͡傀儡师4 小时前
基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表
数据库·spring boot·postgresql
我真的不会C4 小时前
QT中的多线程
数据库·qt·系统架构
YONG823_API5 小时前
借助电商 API 接口实现电商平台商品数据分析的详细步骤分享
数据库·爬虫·microsoft·数据挖掘·数据分析