备份与恢复
备份与恢复
1.什么是备份与恢复?
2.备份的分类:
3.备份的级别:
4.完全恢复和不完全恢复:
5.SCN:
5.1 定义:
5.2 特点:
5.3 SCN种类:
6.SCN与TIME的相互转换函数
7.关于restore和recover
1.什么是备份与恢复?
2.备份的分类:
3.备份的级别:
4.完全恢复和不完全恢复:
5.SCN:
5.1 定义:
5.2 特点:
5.3 SCN种类:
6.SCN与TIME的相互转换函数
7.关于restore和recover
1.什么是备份与恢复?
备份与恢复存在的意义只有一个就是保护数据库(保护数据还有本身),防止由于设备故障或者人为误操作而导致数据库损坏或数据的丢失。即便无法找回已经丢失的数据也可以根据备份信息重建丢失的数据。在某种需求下备份和恢复操作也是一种数据迁移的形式。
2.备份的分类:
按照备份形式的不同可以将备份分为物理备份和逻辑备份。物理备份根据数据库的状态又可以分为冷备和热备。
物理备份:物理备份就是将数据库的物理文件拷贝到别的地方来保存数据文件的方式。
- 冷备份:这种备份的首要要求就是需要数据库在关闭的情况下进行备份,也称为脱机备份,因为数据库需要关闭所以这种方法在生产环境用的比较少。要注意的是需要数据库一致性关库才可以。这种方式可以进行完整备份,包括数据文件,控制文件以及日志文件。
- 热备份:与冷备相对,可以在数据库启动的状态下进行备份。在生产环境中这样状态产生的备份往往与数据库实际数据是不一致的,因为刚刚备份的数据块正在被修改所以导致的不一致。为了保证备份最终是一致的,需要使用日志作为恢复的补充。所以想要进行热备份,归档是一定要打开的也因此比较占空间。
逻辑备份:逻辑备份只针对数据库内的数据,通过数据库导入导出工具来完成。是物理备份的一种补充形式。
3.备份的级别:
- full backup:完全备份,针对某一个表空间或数据文件等,把表空间或数据库里面的数据全备份一次。
- incremental backup:增量备份,需要在完全备份的基础上进行,备份变化的数据。可分为differential incremental backup差异增量备份(从上一次备份开始到现在发生的变化)和Cumulative incremental backup累计增量备份(从上一次全备进行比较备份的变化)
level 0 -> 全备; level 1 -> 差异增量备份 level 1c -> 累计增量备份
4.完全恢复和不完全恢复:
- 完全恢复:可以利用备份文件和日志文件,将数据库的信息恢复到最新的状态,可能会利用到归档日志和在线重做日志,将系统恢复到崩溃前的最新状态。可以通过alter database open将数据库打开。这个时候提交的事务数据不会有任何丢失。未提交的事务进行回滚。
- 不完全恢复:因为发生了数据库的数据操作错误,希望把数据库恢复到发生错误之前。系统日志不完整,打开数据库需要alter database open resetlogs,并且在启动后进行全库备份。
5.SCN:
5.1 定义:
System Change Numbers (SCNs)&System Commit Numbers。系统改变号和系统提交号。SCN是Oracle数据库内部所使用的逻辑的时间戳。SCN的产生,系统产生一个新的SCN是根据当时的时间戳timestamp转换而来,每当需要产生一个最新的SCN到redo记录中时,系统都会获取当时的timestamp将其转换成数字作为SCN。
5.2 特点:
SCN本身也是一种时间,它是从建库开始就单调递增的序列,一次性最大可以增加32000个。SCN号是有上限的,当SCN号被使用完,数据库便不能够运行,但是几百年内是不会用完的。SCN是一个很重要的机制,在数据恢复,DG,RAC节点间同步等各个功能中起着重要的作用。
5.3 SCN种类:
- 数据库当前的SCN:
SYS@proe>select current_scn from v$database;
CURRENT_SCN
-----------
2128297
- 数据库检查点scn(系统scn),这个scn来自于控制文件,用来标识当前数据库的数据更新信息,表示数据库的更新行为。
SYS@proe>select checkpoint_change#,current_scn from v$database;
CHECKPOINT_CHANGE# CURRENT_SCN
------------------ -----------
2127934 2128360
- 数据文件检查点SCN,来源于控制文件标识了每一个文件是什么时候同步的。
SYS@proe>select file#,checkpoint_change# from v$datafile order by 1;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2127934
2 2127934
3 2127934
4 2127934
5 2127934
6 2127934
7 1728568
7 rows selected.
- 数据文件头部检查点。
SYS@proe>select file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2127934
2 2127934
3 2127934
4 2127934
5 2127934
6 2127934
7 1728568
7 rows selected.
#如果出现数据文件头部为0的情况则说明数据文件已经离线,没有读取这个数据文件。
- 数据文件的关闭SCN(结束SCN)。
SYS@proe>select file#,checkpoint_change#,last_change# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 2127934 (null)
2 2127934 (null)
3 2127934 (null)
4 2127934 (null)
5 2127934 (null)
6 2127934 (null)
7 1728568 1728568
7 rows selected.
注意:正在运行的文件是没有last_change#的,只有readonly,offline才会有。
以上两个值在一致性关闭后数值相同才正常。
6.SCN与TIME的相互转换函数
- scn转时间戳:
SYS@proe>select scn_to_timestamp(2127934) from dual;
SCN_TO_TIMESTAMP(2127934)
---------------------------------------------------------------------------
15-JUL-20 07.14.57.000000000 PM
- 时间戳转scn:
SYS@proe>select timestamp_to_scn(to_timestamp('2020-07-13 07:15:24','yyyy-mm-dd hh24:mi:ss')) from dual;
TIMESTAMP_TO_SCN(TO_TIMESTAMP('2020-07-1307:15:24','YYYY-MM-DDHH24:MI:SS'))
---------------------------------------------------------------------------
1993469
7.关于restore和recover
- restore:还原,类似于linux中cp命令,将备份拷贝到目标位置。
- recover:修复,在restore后,指运用所有的重做日志文件,将数据库恢复到崩溃之前的状态,或者运用部分重做日志文件将数据库恢复到指定时间点,做不完全恢复。