#! https://zhuanlan.zhihu.com/p/621038712
Oracle备份与恢复
备份即保存数据库的副本。
恢复就是把以前从数据库中备份的文件还原到数据库中。
本文将学习1 如何备份数据库 2 如何恢复数据库
1 数据库备份
数据库备份就是将数据库的内容全部复制出来保存到计算机的另一个位置或者其他存储设备上。
数据库备份分为物理备份和逻辑备份。
物理备份只指通常所说的归档模式备份(又叫热备份)和非归档模式备份(又叫冷备份)。
归档模式备份是当数据库的模式设置成归档模式时对数据库进行的备份
非归档模式备份是当数据库的模式设置成非归档模式时对数据库的备份
逻辑备份主要是针对数据库的导入和导出操作。Oracle10g后进入数据泵,使用EXPDP/IMPDP的方式对数据进行导入导出操作。
1.1 脱机备份
脱机备份称为冷备份,使用管理员身份的用户使用shutdown命令关闭数据库的服务,之后复制需要的文件。
包括把数据文件和控制文件等相关的内容复制到其他磁盘路径。
如果数据库出现问题,就可以把从数据库中复制出来的相关内容再复制回原来的数据库目录中。
1.2 联机备份
联机备份称为热备份呢,是在数据库的归档模式下进行的备份。查看日志命令如下
archive log list
使用下列命令将数据库日志模式改为归档模式
alter system set log_archive_start=true scope=spfile; --修改系统给的日志方式
shutdown immediate; --关闭数据库
startup mount; --启动mount实例,但是不启动数据库
alter database archivelog; --更改数据库为归档日志模式
2 数据库恢复
数据库恢复就是把从数据库中备份出来的数据重新还原给原来的数据库,数据库的恢复技术分为完全恢复和不完全恢复两种。
完全恢复是指把数据库恢复到数据库失败时的数据库状态。
不完全恢复是指将数据库恢复到数据库失败前的某一时刻的数据库状态。
数据库恢复也分为物理恢复和逻辑恢复。
物理恢复就是把从数据库中备份的文件重新复制到原来的数据库中;
逻辑恢复就是把从数据库中导出的数据再导入到原来的数据库
3 物理 备份/恢复表空间test
3.1 备份表空间TEST
alter database open; --(1)改变数据库的状态为open
alter tablespace test begin backup; --(2)开始备份表空间
--(3)打开oradata文件夹(一般数据库对象存放在该文件),把文件复制到磁盘中的另一个文件夹或其他磁盘上。
`alter tablespace TEST end backup; --(4结束表空间备份)`
3.2 恢复表空间中数据文件
- 对当前日志进行归档
alter system archive log current
- 切换日志文件
由于在一个数据库中一般有三个日志文件,所以需要使用3次下面的语句来切换日志文件
alter system switch logfile
- 关闭数据库服务
为了房子表空间中的数据文件丢失,先把数据库关闭,然后删除TEST表空间中的数据文件TESTONE.DBF
shutdown immediate; --关闭数据库
- 删除数据文件并重新启动数据库
删除数据文件首先要找到存放数据文件的位置,在默认情况下数据文件会存放在书库的ORADATA文件夹下,
也有在创建表空间添加数据文件时指定的目录。
如果不清楚文件的位置,可以在DOS窗口下的v$datafile数据字典中查看数据文件的位置,找到后直接删除即可。
然后启动数据库startup
会显示错误提示,丢失数据文件 - 将数据文件设置成脱机状态并删除
在恢复数据文件之前,需要先把数据文件设置成脱机状态offline,并删除该文件
alter database datafile 10 offline drop;
- 把数据库文件设置成open
alter database open
- 恢复数据文件
在数据库的状态是open时就可以恢复数据文件了,命令如下
recover datafile 10
auto - 设置数据文件为联机状态
在恢复玩数据库后还需要把数据文件设置成联机状态
alter database datafile 10 online
至此,完成了数据文件的回复操作,可以重启数据库验证是否恢复成功。
4 逻辑备份和恢复数据库
4.1 逻辑导出数据 --EXP–
EXP不是在SQLplus状态下,而是DOS命令窗口下完成的
exp username/password --导出用户
exp username/password file="filename.dmp" tablespaces="tablesapces_name"
--filename:存放备份的表空间的 数据文件 tablesapces_name:要备份的表空间的名称
4.2 使用EXPDP导出数据
数据泵技术是在数据库之间或者在数据库与操作系统之间传输数据的工具。
EXPDP是数据泵导出的工具,它可以把数据库中对象导出到操作系统中。
使用EXPDP要先创建目录对象,通过这个对象就可以找到备份数据的数据库服务器,
并且使用EXPDP工具备份出来的数据必须存放在目录对象对应的操作系统的目录中。
下面是EXPDP导出数据流程:
- 创建目录对象
create directory directory_name as 'file_name'; --directory_name创建的目录名称,file_name,存放数据的文件夹名
- 给使用目录的用户赋权限
新创建的目录对象不是任何用户都可以使用的,只有拥有该目录使用权的用户才能使用,
所以要为使用该目录的用户赋一个权限。赋权限的语句如下:
grant read, write on directory directory_name to username
- 导出表
前面已经创建好目录,EXPDP工具也是在DOS窗口下实现的
expdp username/password directory=directory_name dumpfile=file_name tables=table_name
directory_name:存放导出数据的目录名称 file_name:导出数据存放的文件名 table_name:准备导出的表名,对于多个表可以用逗号隔开。
4.3 使用IMP导入数据
imp username/password file=file_name.dmp tables=table_name
4.3 使用IMPDP导入数据
使用EXPDP导入数据前提是数据是使用EXPDP导出的
impdp username/password directory=directory_name dumpfile=file_name tables=table_name
参考文献:
《Oracle从入门到精通》