oracle之备份详解
1.冷备份(执行冷备份前必须关闭数据库)
物理备份(备份物理数据库文件)
2.热备份(热备份是当数据库正在运行时进行数据备份的过程。执行热备份的前提是:数据库运行在可归档日志模式。适用于24X7不间断运行的关键应用系统)
冷备份数据库的步骤
(1)关闭数据库;
(2)备份所有相关的数据库文件:初始化参数文件、控制文件(可用select name from v$controlfile;列出所有控制文件)、数据文件(可用select name from v$datafile;列出所有数据文件)、Redo日志(可用select member from v$logfile;列出所有redo日志文件)、归档的Redo日志(可用select sequence#,first_time from v$loghist;列出所有归档redo日志文件的顺序号和产生时间)。
冷备份数据库的脚本文件coldbackup.bat
热备份数据库的前提条件:数据库运行在归档模式
Oracle数据库安装默认运行在非归档模式
从非归档模式转换为归档模式(
(1)设置数据库自动归档
log_archive_start = true
# 设置归档日志文件的目录,该目录必须事先已建立,并有大量可利用的空间
log_archive_dest_1="location=%oracle_base%\ oradata\%oracle_sid%\archive"
# 设置归档日志文件名的格式。%s表示顺序号,%t表示线程号。
log_archive_format = "%oracle_sid%%T%S.ARC"
(2)在sqlplus上运行以下命令
sqlplus>;connect sys/qazwsx as sysdba
sqlplus>;shutdown immediate;
sqlplus>;startup mount exclusive;
sqlplus>;alter database archivelog;
sqlplus>;alter database open;
sqlplus>;shutdown immediate;
(3)执行数据库冷备份
当数据库运行在归档模式下,数据库恢复过程要求使用冷备份时,归档日志是必需的。
(4)正常启动数据库,并确认数据库运行在归档模式
sqlplus >; startup;
sqlplus >; select * from v$database; 其log_mode会显示数据库是否归档模式
sqlplus >; archive log list; 也会显示数据库是否归档模式
如果Oracle数据库运行在归档模式,当进行数据库维护时,可能需要暂停数据库的归档,在完成维护后,再重新启动归档模式。通过以下步骤可以从归档模式转换为非归档模式:
sqlplus>;connect sys/qazwsx as sysdba
sqlplus>;shutdown immediate;
sqlplus>;startup mount exclusive;
sqlplus>;alter database noarchivelog;
sqlplus>;alter database open;
sqlplus >; select * from v$database; 其log_mode会显示数据库是否归档模式
sqlplus >; archive log list; 也会显示数据库是否归档模式 )
逻辑备份(备份的数据库对象) export
优点:能执行对象或者行恢复。备份和恢复速度更快。能够跨操作系统平台迁移数据库。数据库可一直运行。
缺点:export并不是冷备份和热备份的替代工具。冷、热备份可保护介质失效。export备份可保护用户或应用错误。
Oracle数据库的redo日志记录在数据库上进行的所有活动。LGWR(Log Writer)后台进程以一种循环方式写这些日志文件,从第一个redo日志到下一个,直到该组的最后一个,然后又从第一个日志写起。
在非归档模式下,当循环写到最后一个日志文件后,就重写第一个日志。因此,非归档模式下唯一的数据库恢复办法就是使用冷备份。
在归档模式下,当redo日志满时,一个ARCH(归档程序 ARCn)后台进程就读取全部redo日志,然后将其写到归档日志。因此,可以使用热备份和点恢复。在归档日志模式下,如果归档日志目的空间已满,数据库活动将暂时停止,只有释放一些空间后,数据库才能继续运行。通常background_dump_destination将产生一个跟踪文件来显示归档方面的问题。
各种备份策略的自动执行方法
不管是冷备份、热备份,还是export备份;不管是unix平台,还是windows平台,都可以利用at命令来定时、自动执行上述备份策略。AT 命令安排在特定日期和时间运行命令和程序,在windows nt平台上必须首先运行调度服务(schedule),才能使用at命令。
1.在Oracle数据库中,有一种日志文件叫做重做日志文件,他就是大家俗称的:redolog。在redolog中又分为两种:在线重做日志与归档日志。
在线重做日志(online redo log )主要用于:Oracle数据库所在服务器突然掉电、突然重启或者执行shutdown abort等命令使得在服务器重新启动之后,Oracle数据库没有办法正常的启动实例。此时,在线重做日志就派上了用场,Oracle会使用在线重做日志,把数据库恢复到服务器掉电前的那一个时刻,从而使得数据库能正常的启动起来 。
在Oracle数据库中,默认情况下,至少会有两个重做日志组,而且每个组里面至少包含了一个重做日志文件。日志组不会自动增加,在一个写满之后,会自动去写下一个。在下一个被写满之后会又从第一个开始写起。
归档日志(archive log)主要用于硬件级别的错误:磁盘的坏道导致无法读写、写入的失败、磁盘受损导致数据库数据丢失。这就要使用归档日志文件,通过归档日志文件,把数据库恢复到归档日志所在的时间点上然后再通过在线重做日志文件把数据库恢复到当前的时间点上。
对于归档日志文件,可以理解为在线重做日志文件的备份。即当一个重做日志文件被填满了之后,归档日志文件就会把其备份保留一份。(因为上面说了,在线重做日志文件会自动的覆盖)所以,归档日志文件就是旧的在线日志文件的备份。
2.LGWR(Log Writer)是Oracle的后台进程之一。
LGWR的作用是把日志缓存区的数据从内存写到磁盘的REDO文件里,完成数据库对象创建、更新数据等操作过程的记录
3.在Oracle数据库中,主要有两种日志操作模式:归档模式(archivelog mode)及非归档模式(noarchivelog mode)。在默认情况下oracle数据库采用的是非归档模式。oracle数据库的重做日志是重复写的,一般来说oracle数据库拥有多个重做日志组(redo log group),每个重做日志组又包含多个成员,我们大部分的数据更改操作都会写入在线日志中,也就是当前正在使用的重做日志。我们大部分的数据更改操作都会写入在线日志中,也就是当前正在使用的重做日志。当一个重做日志写满或DBA发出switch log命令的时候就会发生日志切换,如果oracle运行在非归档模式下,oracle直接覆盖写下一个重做日志组。如果oracle运行在归档模式下则oracle会查询即将写入的重做日志是否归档,没有归档则等待其归档,等归档完成以后再覆盖写入重做日志记录。当然如果发生了归档等待的话可以通过添加重做日志组或开启更多的归档进程来避免这个等待事件
归档模式(archivelog mode)及非归档模式(noarchive mode)的最重要的区别就是当前的重做日志切换以后会不会被归档进程(archive process)copy到归档目的地(log_archive_dest)
4.后台进程和恢复:检查点(DBWR)
DBWR进程是将DATA BUFFER中的数据写入,磁盘数据文件,在这个过程中,首先保证安全,所谓安全,就是在写过程中,一旦发生实例崩溃,要有一套完整的机制能够保证用户以及提交的数据不丢失。最直观,简单的方法就是,只要用户提交的时候将所改变的内存数据给DBWR,写入到数据文件,这样的话,一定能保证提交的数据不丢失,但是这种方式效率最低,在高并发环境中,频繁离散写效率最低。
6.后台进程和恢复:归档程序 (ARCn)
ARCn是一个可选的后台进程。但是,在丢失磁盘后恢复数据库时,这个进程的作用至关重要。联机重做日志文件填满后,oracle实例开始写入下一个联机重做日志文件。从一个联机重做日志文件切换到另一个联机重做日志文件的过程称为日志切换。
ARCn进程在每次进行日志切换时都会开始对已填满的日志组进行备份或归档。它会在可以重新使用日志之前自动归档重做日志文件,因此会保留对数据库所做的所有更改。这样,即使磁盘驱动器损坏,也可以将数据库恢复到故障点。
DBA 必须做出的一个重要决策是,配置数据库在ARCHIVELOG模式下运行,还是在NOARCHIVELOG模式下运行。
· 在NOARCHIVELOG模式下,每次发生日志切换时,都会件覆盖联机重做日志文件。
· 在ARCHIVELOG模式下,必须先归档非活动的已填满联机重做日志文件组,才可以再次使用这些组。
注:
ARCHIVELOG 模式对大多数备份策略而言是必须选择的模式(并且极易配置)。
一个可选的后台进程
为数据库设置了ARCHIVELOG模式后自动归档联机重做日志文件
保留对数据库进行的所有更改的记录
得其时横刀天下,不得其时蓬头而行