Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1438306
  • 博文数量: 463
  • 博客积分: 10540
  • 博客等级: 上将
  • 技术积分: 5450
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-12 08:30
文章分类

全部博文(463)

文章存档

2014年(2)

2012年(14)

2011年(42)

2010年(18)

2009年(78)

2008年(35)

2007年(182)

2006年(92)

我的朋友

分类: Oracle

2008-06-05 16:14:43

第九章 数据备份与恢复管理
§9.1数据库运行环境的配置
§9.1.1配置数据库运行模式
如果数据库运行模式为NOARCHIVELOG(非归档日志模式),则改为ARCHIVELOG(归档日志模式),并修改init.ora,使参数log_archive_start的值为TRUE(自动归档方式)。可用OEM(Oracle Enterprise Manager)的Instance Manager进行设置,也可用Server Manager。用Server Manager的步骤为:
SVRMGR>connect internal;
SVRMGR>shutdown;
SVRMGR>startup mount [dbname];
SVRMGR>alter database [dbname] archivelog;
SVRMGR>alter database [dbname] open;
SVRMGR>archive log start; (启动自动归档进程,用该命令只能改变当前状态,要永久有效,必须改变init.ora的参数,并重新启动实例)
 
归档模式运行数据库的好处和代价:在ARCHIVELOG模式下运行数据库,可以利用联机和脱机备份从介质失效中进行完全恢复和时间点恢复,而在NOARCHIVELOG模式下运行,则只能从备份中进行不完全恢复,在介质失效的情况下,有可能丢失部分数据。但ARCHIVELOG模式下,需要额外的磁盘空间(如果归档到磁盘)和足够的磁带设备,DBA的管理工作也将增加,如空间管理和日志文件管理。如果是自动归档,对性能还会有点影响,但影响不大。
§9.2.1控制文件、联机日志文件和归档日志文件的管理
§9.2.1.1 镜像控制文件
控制文件包含数据库的模式结构,这是对数据库操作最重要最基本的一个文件,如果没有进行正确的初始设置,一旦丢失控制文件,就会导制数据库停用相当长的时间,所以保护好控制文件非常重要。Init.ora参数CONTROL_FILES列出了数据库的所有控制文件名,各文件名之间以逗号分开,例如:“control_files = ("C:\Oracle\oradata\orcl\control01.ctl", "C:\Oracle\oradata\orcl\control02.ctl")”,这些控制文件的内容是相同的,DBA可以改变这个参数,使得它们驻留在不同的磁盘设备。下面是用SVRMGR(Server Manager)镜像控制文件的步骤:
①    使用SVRMGR,用normal(正常)选项关闭数据库。
②    退出SVRMGR。
③    用操作系统命令,把原有控制文件拷贝到其它位置,如果原有控制文件名需要修改,就重命名控制文件。
④    修改init.ora文件中的control_files参数并增加新的控制文件名。
⑤    登录进入SVRMGR会话。
⑥    重新启动数据库。
§9.2.1.2 镜像联机日志文件
数据库要正常操作最少需要两个日志文件组(group),每个日志文件组至少需要一个日志文件成员(member),可包含多个日志文件成员。日志文件组的每一个成员包含有相同的信息。进行镜像操作时由于要写日志组的多个日志成员,因此性能会受到影响。然而这可以将镜像建立在多个磁盘控制器上来减轻或基本消除。可用视图V$LOGFILE来查看日志文件组及其成员的信息。可用alter database命令来维护日志组及其成员,例如:
增加组:SVRMGR> ALTER DATABASE ADD LOGFILE GROUP  3
      (‘c:\oracle\oradata\newlog1.ora’,’d:\oracle\oradata\newlog2.ora’) SIZE 500K;
增加成员: SVRMGR> ALTER DATABASE ADD LOGFILE MEMBER
      ‘e\oracle\oradata\newlog3.ora’ TO GROUP 3;
删除组: SVRMGR> ALTER DATABASE DROP LOGFILE GROUP 3
删除成员: SVRMGR> ALTER DATABASE DROP LOGFILE MEMBER
                     ‘e\orale\oradata\newlog3.ora’
下面是重定位联机日志文件的步骤:
①    用normal选项关闭数据库。
②    进行数据库的完整备份,包括日志文件、数据文件和控制文件。
③    利用相应的操作系统命令把联机日志文件拷贝到新位置(镜像)。
④    启动SVRMGR并安装数据库。
⑤    重命名联机日志成员。
⑥    使用alter database命令打开数据库并进行正常操作。
⑦    由于数据库已被修改,备份控制文件。
§9.2.1.3 归档日志文件的管理
归档就是把填满的日志文件拷贝到不同的磁盘驱动器或磁带驱动器,归档目的地用init.ora 的参数LOG_ARCHIVE_DEST设置,配置时注意以下几点:
①要把日志文件归档到空间足够大的专用磁盘上。
②每天把归档的日志文件备份一次。
③归档日志文件一旦已备份,就可以从磁盘上删除。
 
§9.2 数据库的备份
§9.2.1 备份策略
①    在归档模式下运行数据库,启动自归档进程。
②    每两周进行一次完整的脱机备份。
③    每天晚上进行一次联机备份。
④    每两周进行一次逻辑备份。
§9.2.2 脱机备份过程
①    准备备份
a.禁止登录到应用程序
b.提供数据不能使用的信息
c.使用shutdown normal或shutdown immediate命令关闭数据库
②    进行备份
把数据文件、控制文件、联机日志文件和归档日志文件拷贝到它们的备份磁盘处。
③    结束过程
a.启动数据库。
b.使之能登录到应用程序。
c.拷贝数据库映像(数据文件、控制文件、联机日志文件和归档日志文件)到磁带。
d.通过删除指定备份开始的文件来结束备份。
§9.2.3 联机备份过程
和脱机备份整个数据库不同,联机备份的单位是表空间,根据需要备份一个或所有表空间。备份内容包括数据文件(对于一个或多个表空间)、当前控制文件以及备份期间创建的所有的归档日志文件。备份过程为:
①    设置要备份的表空间为热备份模式:
   SVRMGR>ALTER TABLESPACE tablespace_name BEGIN BACKUP;
②    使用操作系统命令备份与该表空间相关联的数据文件。
③    设置表空间回到非热备份模式:
   SVRMGR>ALTER TABLESPACE tablespace_name END BACKUP;
对于欲备份的表空间,重复①-③。
④    强制日志切换,使ORACLE创建一个归档日志文件:
   SVRMGR>ALTER SYSTEM SWITCH LOGFILE;
⑤    使用操作系统命令备份所有的归档日志文件。
⑥    备份控制文件:
   SVRMGR>ALTER DATABASE BACKUP CONTROLFILE TO ‘filespec’。
§9.2.4 逻辑备份
逻辑备份是利用export工具导出数据库的一种备份方法,逻辑备份的最大好处是数据导出时可以检查数据块是否损坏。还提供用户失误或结构失效的附加保护级。
§9.2.5 利用脚本实现自动化备份
§9.2.5.1 脱机备份自动化的实现
①    创建如下内容的文本文件shutdown.sql,用于以normal方式关闭数据库:
connect internal/
shutdown immedate
startup restrict
shutdown normal
exit
 
②    创建如下内容的文本文件shutdown.sql 用于启动并打开数据库:
connect internal/
startup
exit
 
③    创建批处理文件oraback.bat,内容如下:
c:\oracle\ora815\bin\svrmgrl.exe @shutdown.sql
copy c:\oracle\oradata\datafile1.dbf d:\backup\*.*
………………………..
copy c:\oracle\oradata\datafile2.dbf d:\backup\*.*
c:\oracle\ora815\bin\svrmgrl.exe @startup.sql
  注意:应对该文件作必要的修改以满足实际情况的需要,比如:svrmgrl.exe的路径和要拷贝的文件,一般应拷贝需备份的数据文件、控制文件和归档重做日志文件。
④    假设在每天晚上2点启动备份作业,则应执行如下命令:
  c:\at 02:00 c:\orcle\oradata\oraback.bat
  注:“AT”命令的具体用法请查阅Windows NT的联机帮助。
§9.2.5.2 联机备份自动化的实现
联机备份的自动化与脱机情形类似,但在备份数据文件时应先让其脱机,拷贝完后再联机,所有操作可以写在一个脚本里。
§9.3 数据库的恢复
§9.3.1 恢复概念
数据库的恢复包括数据块恢复、线程恢复和介质恢复,前二者由数据库系统自行完成,而介质恢复必须由DBA发出命令,可用三种命令进行介质恢复,它们是recover databse、recover tablespace、recover datafile,恢复命令的选用取决于故障的类型以及恢复时是否要打开数据库。在打开数据库时进行数据文件和表空间恢复,称为联机恢复。如果数据库在进行恢复时是关闭的,则称为脱机恢复。
在介质恢复中,不丢失数据的恢复称为完全恢复。如果在数据库恢复之后丢失了某些数据,则称为不完全恢复。在所有需要的日志文件、备份数据文件和一个当前有效控制文件都可用的情况下,应该采用完全恢复。不完全恢复只应在不能完全恢复所有数据时使用(在丢失一归档或联机日志文件和丢失控制文件时进行的恢复)。不完全恢复可以把数据库恢复到过去的某个时间点。
§9.3.2 完全恢复的实现步骤
①    在操作系统级恢复所有的(或损块的)数据文件。
②    用RESTRICT方式启动实例并安装数据库:
   SVRMGR>startup restrict mount [dbname];。
③    这一步是可选的,应限于丢失或已损块的数据文件的原有位置失效(即磁盘损块)时采用。对于控制文件里保存的路径必须重命名,指定新恢复文件的位置。用下述命令重新命名数据文件或日志文件:
   SVRMGR >alter database rename file ‘old_filename’ to ‘new_filename’;
④    确保所有的数据文件联机,从V$dDATAFILE视图选取文件状态。
SVRMGR>select file#,staus,name from  V$dDATAFILE;
SVRMGR>alter database datafile ‘filename’ online;
⑤    恢复数据库:
SVRMGR>recover database [dbname];
ORACLE这时提示输入要运用的归档日志文件名,并从最早的文件名开始。在恢复完成时,将显示消息“Media recovery complete.”(介质恢复成)。
⑥    至此可以打开数据库。
   SVRMGR>alter database [dbname] open;
§9.3.3 不完全恢复的实现步骤
①         首先关闭数据库,并且备份所有的数据文件,以免在进行数据库不完全恢复时出错。
SVRMGR>shutdown  [dbname];
②         从备份中恢复所有数据文件。可以使用当前的控制文件。
③         以RESTRICT方式启动实例,并且安装数据库。
      SVRMGR>startup restrict mount [dbname];
④     这一步是可选的,应限于丢失或已损块的数据文件的原有位置失效(即磁盘损块)时采用。对于控制文件里保存的路径必须重命名,指定新恢复文件的位置。用下述命令重新命名数据文件或日志文件:
   SVRMGR >alter database rename file ‘old_filename’ to ‘new_filename’;
⑤    确保所有的数据文件联机,从V$dDATAFILE视图选取文件状态。
   SVRMGR>select file#,staus,name from  V$dDATAFILE;
   SVRMGR>alter database datafile ‘filename’ online;
⑥    用UNTIL CANCEL 或UNTIL TIME选项恢复数据库。例如:为发恢复到2000外年4月8日下午1点55分,使用下述命令:
SVRMGR>recover  database until time ‘2000-04-08:13:55:00’;
这时ORACLE提示导入日志文件,并且在运用所有日志文件之后显示“logapplied”(已运用日志消息)。恢复在指定的时间停止,并返回消息“Media recovery complete.”(介质恢复成)。
⑦    用RESETLOGS选项打开数据库:
SVRMGR>alter database open resetlogs;
⑧    进行联机或脱机备份。这是非常重要的一步。
§9.3.4 表空间恢复的实现步骤
①    让需要进行恢复的表空间脱机:
SVRMGR>alter tablespace ts_name offline;
②    恢复属于需要进行恢复的表空间的所有数据文件。
③    如果丢失或损块的数据文件的原有位置失效(即磁盘损坏),必须对保存于控制文件中的路径重新命名,指向新恢复的文件位置:
   SVRMGR >alter database rename file ‘old_filename’ to ‘new_filename’;
④    恢复表空间:
   SVRMGR >recover tablespace ts_name [,ts_name…];
ORACLE提示导入日志文件,并且在运用所有日志文件之后显示“logapplied”(已运用日志消息)。恢复在指定的时间停止,并返回消息“Media recovery complete.”(介质恢复成)。
⑤    让表空间联机:
SVRMGR>alter tablespace ts_name online;
§9.3.5 数据文件的恢复
数据文件恢复分为联机恢复和脱机恢复。
§9.3.5.1 联机数据文件恢复的实现步骤
①    安装数据库:
SVRMGR>startup mount [dbname];
②    让所有损坏或丢失的数据文件脱机:
SVRMGR>alter database datafile ‘filename’ offline;
③    打开数据库:
   SVRMGR>alter database open;
④    恢复需要恢复的数据文件。
⑤    恢复数据文件:
SVRMGR>recover datafile ‘datafile’[,’datafile’…];
Oracle这时提示导入需要运用的归档日志文件,从所需要的最早日志文件开始。在所有改动运用到数据库之后,Oracle显示消息“Media recovery complete.”(介质恢复成)。
⑥    让数据文件联机:
SVRMGR>alter database datafile ‘filename’ online;
§9.3.5.2 脱机数据文件恢复的实现步骤
①    恢复需要恢复的数据文件。
②    安装数据库。
 SVRMGR>startup restrict mount [dbname];
③    由于数据库已经关闭,因此数据文件可以联机或脱机。分别用下述命令让数据文件联机或脱机:
SVRMGR>alter database datafile ‘filename’ online;
SVRMGR>alter database datafile ‘filename’ offline;
④    恢复数据文件。
SVRMGR>recover datafile ‘datafile’[,’datafile’…];
Oracle这时提示导入需要运用的归档日志文件,从所需要的最早日志文件开始。在所有改动运用到数据库之后,Oracle显示消息“Media recovery complete.”(介质恢复成)。
⑤    打开数据库;
SVRMGR>alter database  [dbname]  open;
§9.3.6 三种介质恢复的比较
RECOVER DATABASE
 RECOVER TABLESPACE
 RECOVER DATAFILE
 
一步恢复数据库的所有数据文件
 一步可以恢复一个、多个或所有表空间
 一步可以恢复一个、多个或所有数据文件
 
使用关闭的数据库和要恢复的联机文件
 使用打开的数据库和要恢复的脱机表空间
 使用关闭的数据库,如果数据库是打开的,要恢复的数据文件应是脱机的
 
如果损坏的表空间是SYSTEM,则必须使用
 不能用于恢复不能脱机的表空间,如SYSTEM
 在数据库打开时不能用恢复SYSTEM表空间的数据文件
 
不能用两个会话同时恢复数据库
 可用多个SVRMGR会话并发恢复多介表空间
 可用多个SVRMGR会话并发恢复多介数据文件
 
可以进行不完全恢复
 只能进行完全恢复
 只能进行完全恢复
 
 
§9.4 使用恢复管理器进行备份和恢复
§9.4.1 恢复管理器(RMAN)简述
RMAN是ORACLE8提供的一个用来备份和恢复的实用工具,它能够backup、copy、 restore和 recover 数据文件、控制文件和归档日志文件。可以在图形方式和命令行两种方式下运行。它使备份和恢复工作自动化。如果管理多个数据库,用RMAN恢复目录(recovery catalog)特性,可以受到很多益处。我们这里不使用恢复目录。有关RMAN的详细命令,请参看ORACLE8的在线文档。启动RMAN用如下命令:
C:\RMAN nocatalog
RMAN>connect target  ;  ((假设口令和实例名为pass和orcl)
§9.4.2 使用RMAN建立备份
RMAN支持三种备份:备份集、数据文件拷贝(也称为快照拷贝)和操作系统备份。
备份集由RMAN的BACKUP命令创建,备份集可以包含全部的或增量的归档日志文件或数据文件。完全备份包含数据文件集中由数据库用过的全部数据块。增量备份包含的数据块,只限于最后一次同级或更低级的备份之后被修改过的数据块。
数据文件拷贝是由RMAN的COPY命令创建的,创建数据文件拷贝用的是ORACLE的进程而不是操作系统的进程。对于操作系统备份,在做备份之前,必须执行alter tablespace..begin backup命令。
这里只介绍利用备份集备份。
§9.4.2.1 创建完全数据库集
完全数据库备份集包括属于数据库的所有数据文件和控制文件。命令如下:
RMAN>run {
2> allocate channel ch1 type disk;
3>backup full
4>(database format  'd:\backup\AA_%p%d.%s’);
5>}
§9.4.2.2 表空间备份
表空间备份对于属于表空间的所有数据文件进行备份。创建表空间备份集的命令如下:(假设对表空间system进行备份)
RMAN>run {
2> allocate channel ch1 type disk;
3>backup tabplesapce  ‘system’
4>format  'd:\backup\AATST_%t%s.%p’);
5>}
§9.4.2.3 数据文件备份
在需要的时候,对于特定的数据文件也可以用RMAN备份。下面是创建数据文件备份集的一个例子。
RMAN>run {
2> allocate channel ch1 type disk;
3>backup datafile  ‘c:\oracle\oradata\user01.dbf’
4>format  'd:\backup\AATST_%t%s.%p’);
5>}
§9.4.2.4 控制文件备份
在任何备份策略是控制文件的备份都是非常重要的。每次改变数据库的物理结构后都必须备份控制文件。可以用RMAN单独创建控制文件的备份集,命令如下:
RMAN>run {
2> allocate channel ch1 type disk;
3>backup current controlfile
4>format  'd:\backup\AA_CTL%t.%s’);
5>}
当做完全备份时,控制文件自动包含在备份中。也可用表空间或数据文件的备份包含控制文件,如下所示:
RMAN>run {
2> allocate channel ch1 type disk;
3>backup datafile  ‘c:\oracle\oradata\user01.dbf’
4> include current controlfile
5>format  'd:\backup\AATST_%t%s.%p’);
6>}
§9.4.2.5 归档日志文件备份
使用RMAN,能够创建基于时戳或日志序列号的备份集。也可以用ALL选项备份全归档日志文件。
RMAN>run {
2> allocate channel ch1 type disk;
3>backup archivelog low logseq 391 high logseq 392 thread 1 
4>format  'd:\backup\AAARC_%t.%s’);
5>}
§9.4.3 用RMAN恢复数据库
§9.4.3.1 重装数据文件、控制文件和归档日志文件
● 重装数据库:
如果数据库是打开的,用如下命令使数据库处于安装状态:
shutdown immediate;
startup mount;
 再用如下命令安装数据库:
run {
     allocate channel ch1 type disk;
     allocate channel ch2 type disk;
     allocate channel ch3 type disk;
     restore database;
}
● 重装表空间:
run {
     sql 'ALTER TABLESPACE user_data OFFLINE TEMPORARY';
     allocate channel ch1 type disk;
     restore tablespace user_data;
}
●    重装控制文件
启动实例并处于非安装状态:
startup nomount;
用如下命令重装控制文件:
   run {
     allocate channel ch1 type dsik;
     restore controlfile;
     alter database mount;
}
 
●    重装归档日志文件:
 shutdown immediate;
 startup mount;
 run {
     set archivelog destination to '/oracle/temp_restore';
     allocate channel ch1 type disk;
     restore archivelog all;
     }
§9.4.3.2 数据的恢复
● 恢复数据库
shutdown immediate;
startup mount;
run {
     allocate channel ch1 type disk;
     restore database;
     recover database
       skip tablespace temp;
}
● 恢复表空间
run {
     allocate channel ch1 type disk;
      restore tablespace tbs_1;
      recover tablespace tbs_1;
}
§9.4.3.3 用脚本自动完成备份和恢复
在$ORACLE_HOME/rdbms/demo 子目录下有几个RMAN脚本例子文件,你可以编辑它来生成自己的脚本。
执行脚本文件的命令为:
C:\ rman target   nocatalog @rcat '/oracle/dbs/b_whole_l0.rcv'
 
阅读(1269) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~