天天看点

Oracle数据库的备份方法

1、引言

  2、三种备份方案的比较

  冷备份

  优点:能简单快速地备份。能简单快速地恢复。执行简单。

  缺点:必须关闭数据库,不能进行点恢复。

  热备份

  优点:备份时数据库可以是打开的。热备份可以用来进行点恢复。初始化参数文件、归档日志在数据库正常运行时是关闭的,可用操作系统命令拷贝。

  export导出数据库对象

  冷备份和热备份都备份物理数据库文件,因而被称为物理备份。而export备份的是数据库对象,因此被称为逻辑备份。

  优点:能执行对象或者行恢复。备份和恢复速度更快。能够跨操作系统平台迁移数据库。数据库可一直运行。

  缺点:export并不是冷备份和热备份的替代工具。冷、热备份可保护介质失效。export备份可保护用户或应用错误。

  3、冷备份方案的实施

  3.1 冷备份数据库的步骤

  (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日志文件的顺序号和产生时间)。

  3.2 冷备份数据库的脚本文件coldbackup.bat

  4、热备份方案的实施

  4.1 热备份数据库的前提条件:数据库运行在归档模式

  oracle数据库的redo日志记录在数据库上进行的所有活动。lgwr后台进程以一种循环方式写这些日志文件,从第一个redo日志到下一个,直到该组的最后一个,然后由从第一个日志写起。

  在非归档模式下,当循环写到最后一个日志文件后,就重写第一个日志。因此,非归档模式下唯一的数据库恢复办法就是使用冷备份。

  在归档模式下,当redo日志满时,一个arch后台进程就读取全部redo日志,然后将其写到归档日志。因此,可以使用热备份和点恢复。在归档日志模式下,如果归档日志目的空间已满,数据库活动将暂时停止,只有释放一些空间后,数据库才能继续运行。通常,background_dump_destination将产生一个跟踪文件来显示归档方面的问题。

  oracle数据库安装默认运行在非归档模式,通过以下步骤可以从非归档模式转换为归档模式:

  (1)编辑参数文件init.ora,设置以下参数

  # 设置数据库自动归档

  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;

  (3)执行数据库冷备份

  当数据库运行在归档模式下,数据库恢复过程要求使用冷备份时,归档日志是必需的。

  (4)正常启动数据库,并确认数据库运行在归档模式

sqlplus >; startup;

sqlplus >; select * from v$database; 其log_mode会显示数据库是否归档模式

sqlplus >; archive log list; 也会显示数据库是否归档模式

 如果oracle数据库运行在归档模式,当进行数据库维护时,可能需要暂停数据库的归档,在完成维护后,再重新启动归档模式。通过以下步骤可以从归档模式转换为非归档模式:

sqlplus>;alter database noarchivelog;

  4.2 热备份数据库的步骤

  (1)拷贝init.ora文件到备份目录(参数文件在数据库启动后处于关闭状态)。

  (2)将需要备份的某个表空间置于开始备份模式。

  (3)使用ocopy.exe拷贝表空间,然后将该表空间置于结束备份模式中(ocopy.exe不能用于直接拷贝联机的数据库文件)。

  (4)对数据库中的每个表空间执行步骤2和3(可以通过视图dba_tablespaces和v$datafile查看数据库中有哪些表空间和数据文件)。

  (5)通过在sqlplus上执行archive log list命令获取当前的日志顺序号,从oldest online log sequence开始到current log sequence的联机redo日志应该是热备份的一部分。

  (6)在sqlplus上执行alter system switch logfile;命令来强迫日志切换,以便所有的日志都被归档。

  (7)使用alter database backup controlfile to trace;命令获得控制文件的一个备份,可以到%oracle_base%\admin\%oracle_sid%\udump目录中寻找最新的跟踪文件,其中有重建控制文件的全部命令。

  (8)使用windows nt的命令从%log_archive_dest%中拷贝归档的日志文件到备份目录。

  4.3 热备份数据库的脚本文件hotbackup.bat

  5、使用export作为备份策略

  5.1 export的命令选项说明

  oracle数据库的exp工具提供tables、users、full database、tablespace四种级别的导出方式,把指定的数据库内容导出到一个或者多个oracle二进制文件中,该文件只允许用imp工具来读取,imp的命令选项可用imp help=y来查阅。

  您可以通过输入 exp 命令以及各种自变量来控制“导出”的运行方式。要指定参数,您可以使用关键字:

  格式:exp keyword=value 或 keyword=(value1,value2,...,valuen)

  实例:exp scott/tiger grants=y tables=(emp,dept,mgr)

  或 tables=(t11,t12),如果 t1 是分区表

  userid 必须是命令行中的第一个参数。

  下列关键字仅用于可传输的表空间

  transport_tablespace 导出可传输的表空间元数据 (n)

  tablespaces 将传输的表空间列表

  5.2 export备份数据库的脚本文件expbackup.bat

  6、各种备份策略的自动执行方法

  不管是冷备份、热备份,还是export备份;不管是unix平台,还是windows平台,都可以利用at命令来定时、自动执行上述备份策略。at 命令安排在特定日期和时间运行命令和程序,在windows nt平台上必须首先运行调度服务(schedule),才能使用at命令。

  at命令用法如下:

  at [\\computername] [ [id] [/delete] | /delete [/yes]]

  at [\\computername] time [/interactive]

  [ /every:date[,...] | /next:date[,...]] "command"

  \\computername 指定远程计算机。 如果省略这个参数,会计划在本地计算机上运行命令。

  id 指定给已计划命令的识别号。

  /delete 删除某个已计划的命令。如果省略 id,计算机上所有已计划的命令都会被删除。

  /yes 不需要进一步确认时,跟删除所有作业的命令一起使用。

  time 指定运行命令的时间。

  /interactive 允许作业在运行时,与当时登录的用户桌面进行交互。

  /every:date[,...] 每个月或每个星期在指定的日期运行命令。如果省略日期,则默认为在每月的本日运行。

  /next:date[,...] 指定在下一个指定日期(如下周四)运行命令。如果省略日期,则默认为在每月的本日运行。

  "command" 准备运行的 windows nt 命令或批处理程序。

  举例如下:

  (1) 每周五19:00执行冷备份

  at 19:00 /every:f "coldbak.cmd"

  (2) 每周二20:00执行热备份

  at 20:00 /every:t "coldbak.cmd"

  (3) 每周一、二、三、四、五21:00执行export备份

  at 20:00 /every:m,t,w,th,f "expbak.cmd"

最新内容请见作者的github页:http://qaseven.github.io/