为什么要备份?
数据备份是为了防止由于用户操作失误、系统故障等意外原因导致的数据丢失,而将整个应用系统的数据或一部分关键数据复制到其他存储介质上的过程。这样做的目的是保证当应用系统的数据不可用时,可以利用备份的数据进行恢复,尽量减少损失。
除了不可预见的灾难事件,在实际生产环境可能经常会遇到下面错误或失败
语句失败
用户错误
用户进程失败
网络失败
例程失败
介质失败
语句失败
应用逻辑错误
未连接oracle
Sp2-0640:未连接
输入错误数据
该值未存在(比如约束值0-600,输入的值不在这范围)
Ora-02290:违反检查约束条件
执行未授权操作
没有select权限
Ora-00942:表或视图不存在
超出空间配额
Ora-01536:超出表空间空间限额
表空间无足够空间
Ora-01653:表无法通过32扩展
用户错误
Drop table
会删除表结构和数据,恢复方法
imp导入
基于时间点的数据库不完全恢复dbpitr,适用于archivelog
基于时间点的表空间不完全恢复tsp
flashback table table_name to before drop
Truncate table
删除表数据,保留表结构
imp导入
基于时间点的数据库不完全恢复dbpitr,适用于archivelog
基于时间点的表空间不完全恢复tsp
DML误操作
没有提交情况:rollback
提交情况:alter table table_name row movement
flashback table table_name to timestamp to_timestamp()
网络失败
例程失败
电源断电
硬件失败
必须的后台进程出现失败
介质失败
存储或者硬盘出现问题
备份策略
多元化重做日志
目的防止日志成员的损坏
同一组日志多个成员
同一组不同成员分不到不同的磁盘上
多元化控制文件
目的防止控制文件损坏
不同控制文件分不到不同磁盘上
确定日志操作模式
NOARCHIVELOG
不能联机备份,如果要备份,必须关闭数据库
ARCHIVELOG
需要为归档日志分配空间,并且管理生成的归档日志
确定备份周期
合理的备份周期可以降低介质恢复时间
在数据库物理结构发生改变后执行备份
当建立或删除表空间,增加数据文件时,备份数据库
备份频繁使用的表空间
表空间变化频繁,增加备份次数,降低恢复时间
使用exp和expdp导出数据
不要备份重做日志
备份工具今天只分享逻辑备份。
EXP/IMP(客户端和服务端使用)
EXPDP/IMPDP(仅限服务端使用)
exp/imp
实施逻辑备份
可以在客户端使用,也可以在服务端使用
exp基本语法
基本语法
1、EXP: 有三种主要的方式(完全、用户、表)
1、完全:
EXP SYSTEM/MANAGER FILE=C:\FULL.DMP FULL=Y
如果要执行完全导出,必须具有特殊的权限
2、用户模式:
EXP SONIC/SONIC FILE=C:\SONIC.DMP OWNER=SONIC
这样用户SONIC的所有对象被输出到文件中。
3、表模式:
EXP SONIC/SONIC FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
这样用户SONIC的表SONIC就被导出
imp基本语法
基本语法:
IMP:
具有三种模式(完全、用户、表)
1、完全:
IMP SYSTEM/MANAGER FILE=C:\FULL.DMP FULL=Y
2、用户模式:
IMP SONIC/SONIC FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC
这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。
3、表模式:EXP SONIC/SONIC FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) ignore=y
这样用户SONIC的表SONIC就被导入。
expdp/impdp
数据泵可以实现逻辑备份和逻辑恢复
数据泵导入导出可以再数据库用户之间移动对象
使用数据泵导入可以在数据库之间移动对象
数据泵可以实现表空间搬移
Expdp和impdp是服务端工具
expdp
在调用expdp之前我们要建立一个目录,这个目录就是给expdp导出的数据存放。
一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory dpdata1 as ‘/oracle/dump';
二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
三、给syncdr用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory dpdata1 to syncdr;
导出数据
1)按用户导expdp syncdr/syncdr@jfzl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
2)并行进程parallelexpdp syncdr/syncdr@jfzl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导expdp syncdr/syncdr@jfzl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导expdp syncdr/syncdr@jfzl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
impdp
还原数据
1)导到指定用户下impdp syncdr/syncdr DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的ownerimpdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;
文中的概念来源于网络,如有侵权,请联系我删除。
欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。欢迎觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。