分类: 服务器与存储
2008-06-14 13:42:40
冷备份
1、备份步骤:
冷备份具有很多优良特性,快速,方便,以及高效。一次完整的冷备份步骤是:
1.首先关闭数据库(shutdown normal)
2.拷贝相关文件到安全区域(利用操作系统命令拷贝数据库的所有的数据文件、日志文件、控制文件、参数文件、口令文件等(包括路径))
3.重新启动数据库(startup)
以上的步骤可以用一个脚本来完成操作:
su -oracle < sqlplus /nolog
connect / as sysdba
shutdown immediate;
!cp 文件 备份位置(所有的日志、数据、控制及参数文件);
startup;
exit;
2、恢复步骤:
恢复的时候,相对比较简单了,我停掉数据库,将文件拷贝回相应位置,重启数据库就可以了,当然也可以用脚本来完成。
热备份
1、备份步骤:
当需要做一个精度比较高的备份,而且我们的数据库不可能停掉(少许访问量)时,这个情况下,我们就需要归档方式下的备份,就是下面讨论的热备份。热备份可以非常精确的备份表空间级和用户级的数据,由于它是根据归档日志的时间轴来备份恢复的,理论上可以恢复到前一个操作,甚至就是前一秒的操作。具体步骤如下:
1.通过视图v$database,查看数据库是否在Archive模式下:
SQL> select log_mode from v$database;
如果不是Archive模式
则设定数据库运行于归档模式下:SQL>shutdown immediate
SQL>startup mount
SQL> alter database archivelog;
SQL> alter database open;
如果Automaticarchival显示为“Enabled”,则数据库归档方式为自动归档。否则需要手工归档,或者将归档方式修改为自动归档,如:
正常shutdown数据库,在参数文件中init.ora中加入如下参数
SQL>shutdown immediate
修改init.ora:
LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(归档日值存放位置可以自己定义)
SQL>startup
然后,重新启动数据库,此时数据库将以自动归档的方式工作在Archive模式下。其中参数LOG_ARCHIVE_DEST1是指定的归档日志文件的路径,建议与Oracle数据库文件存在不同的硬盘,一方面减少磁盘I/O竞争,另外一方面也可以避免数据库文件所在硬盘毁坏之后的文件丢失。归档路径也可以直接指定为磁带等其它物理设备,但可能要考虑读写速度、可写条件和性能等因素。
注意:当数据库处在ARCHIVE模式下时,一定要保证指定的归档路径可写,否则数据库就会挂起,直到能够归档所有归档信息后才可以使用。另外,为创建一个有效的备份,当数据库在创建时,必须履行一个全数据库的冷备份,就是说数据库需要运行在归档方式,然后正常关闭数据库,备份所有的数据库组成文件。这一备份是整个备份的基础,因为该备份提供了一个所有数据库文件的拷贝。(体现了冷备份与热备份的合作关系,以及强大的能力)
2.备份表空间文件:
a.首先,修改表空间文件为备份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;
b.然后,拷贝表空间文件到安全区域 !CP tablespace_name D_PATH;
c.最后,将表空间的备份模式关闭 ALTER TABLESPACE tablespace_name END BACKUP;
3.对归档日志文件的备份:
停止归档进程-->备份归档日志文件-->启动归档进程
如果日志文档比较多,我们将它们写入一个文件成为一个恢复的参考:$ files `ls <归档文件路径>/arch*.dbf`;export files
4.备份控制文件:
SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;
当然,我们也可以将上面的东东写为一个脚本,在需要的时候执行就可以了:
脚本范例:
su -oracle < sqlplus /nolog
connect / as sysdba
ALTER TABLESPACE tablespace_name BEGIN BACKUP
!CP tablespace_name D_PATH
ALTER TABLESPACE tablespace_name END BACKUP
alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;
!files `ls <归档文件路径>/arch*.dbf`;export files
2、恢复步骤:
热备份的恢复,对于归档方式数据库的恢复要求不但有有效的日志备份还要求有一个在归档方式下作的有效的全库备份。归档备份在理论上可以无数据丢失,但是对于硬件以及操作人员的要求都比较高。在我们使用归档方式备份的时候,全库物理备份也是非常重要的。归档方式下数据库的恢复要求从全备份到失败点所有的日志都要完好无缺。
恢复步骤:LOG_ARCHIVE_DEST_1
shutdown数据库。
将全备份的数据文件放到原来系统的目录中。
将全备份到失败点的所有归档日志放到参数LOG_ARCHIVE_DEST_1所指定的位置。
利用sqlplus登陆到空实例。(connect / as sysdba)
然后 startup mount
set autorecovery on
recover database;
alter database open;
这样,热恢复就算完工。
平台的oracle备份(Veritas BE)
通过Backup Exec实施Oracle灾难恢复很简单。
1.需要的数据:
1、FULL CLOSED备份
shutdown数据库(不要用shutdown abort强行关闭),实施一个文件级备份,备份全部的Oracle相关文件,包括系统文件,系统状态和Oracle程序文件和数据文件等内容。
这个冷备份对于快速恢复Oracle数据库系统非常关键,如果没有它,系统被破坏后只能重新安装再恢复,这要比直接恢复冷备份慢得多,也更复杂。
每当数据库或表单的物理结构或逻辑结构有变化时都应该重新创建这个冷备份。
2. FULL ONLINE备份
这个备份要通过Backup Exec Agent for Oracle Server来完成,要备份全部表空间,归档日志和控制文件,通过这种方式备份,Oracle会将所有缓存内容写入文件,将online redo log做归档,所以数据库备份中包含的是备份时数据库的即时点信息,完整而且有效。以后做恢复时,可以恢复到最后一次FULL ONLINE备份的状态。
2、恢复过程:
1. 重新安装Windows系统和Remote Agent for Windows Server,为恢复Oracle准备环境。
2. 恢复最后一次FULL CLOSED备份,重新启动计算机。
此时Windows系统,Oracle数据库系统都是完整的,只是Oracle数据库中可能不是最新的数据。Backup Exec Agent for Oracle Server也不用重新安装了。
3. 用SQLPlus用SYS以sysdba身份连接到数据库系统,关闭数据库。
shutdown immediate + < enter >
4. 通过介质恢复最新的FULL ONLINE备份,恢复作业属性的高级选项中,确保选中了“Restore over Existing files(覆盖现存文件)” 选项。
要想成功的恢复数据库,在最后一次FULL CLOSED备份之后的所有redo log必须都已经成功归档并备份。少了哪一个,数据库就无法恢复到最后的FULL ONLI NE备份时的状态。
通过Oracle的alert log可以看到数据库的恢复需要哪些归档日志,以及你应该把它们恢复到什么位置。
5. 恢复完成后,用SYS用户以sysdba身份连接到数据库,将数据库加载到mount阶段:
startup mount + < enter >
6. 数据库mount完成后,执行recover过程:
recover database using backup controlfile + < enter >
数据库会提示你需要哪些日志:
ORA-00279: Change 36579 generated at needed for thread 1
ORA-00289: Suggestion : \Oracle_Home\Oradata\\%SID%T00036579.ARC
ORA-00280: {=Suggested | filename | AUTO | FROM logsource | CANCEL}
最简单的方法是选自动恢复:
auto + < enter >
系统会在init.ora文件中定义的位置上查找所有必需的日志并依次应用它们,最后一个要应用的日志是online redo log,实际上它并不包括任何的transaction,只有一个SCN,可以略过,但是自动恢复过程会因为找不到相应的文件而报错:
ORA-00308: cannot open archived log
E:\ORACLE\ORADATA\KIMSTAD\ARCHIVE\KIMSTADT00036949.ARC'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) The system cannot find the file specified.
为此输入以下命令(until cancel参数使我们可以在需要的时候中止恢复过程):
recover database until cancel using backup controlfile +
这样在数据库恢复的最后阶段再次提示前面的错误时,我们就可以中止恢复过程:
cancel + < enter >
这时除了最后一个online redo log以外,所有的commit transaction都已经提交到数据库之中了,完成后会显示:
Media recovery canceled
实际上恢复过程已经正常完成了。
最后是打开数据库并同步日志序列号:
alter database open resetlogs + < enter >
至此,Oracle数据库被成功恢复到最后一次Full Online备份。
说明:Oracle 8i可以用internal账号完成DBA操作。9i取消了internal账号,SYS账号代替它了。为了以DBA身份登录,启动SQL Plus时应该加nolog参数,进入之后再登录,connect username/password as sysdba.
具体示例:
1. 用Oracle数据库的热备份来重建数据库
为了检验我为公司开发的Oracle数据库在线自动备份系统,我根据“Oracle数据库在线自动备份系统”产生的备份文件来重建和恢复Oracle数据库。为了让大家共享其方法和步骤(也适合于用其它方式对Oracle做的热备份进行重建数据库)现整理如下。
一、系统环境
本次测试所使用的系统环境如下:
1. 硬件环境
服务器:Dell PowerEdge 1300 (CPU:PⅢ 550MHz 内存:128MB 硬盘:36GB)
2. 软件环境
操作系统:UnixWare 7.1
数据库: Oracle 8.1.6 for Unix 企业版,SID:ora816
Oracle安装路径:/home/oracle
备份文件:所有数据库文件、控制文件、初始化文件、数据库备份以来的所有归档日志文件。
二、恢复步骤
下面根据从用户处带回来的备份数据,在一台新的服务器重建Oracle数据库。其详细步骤如下:
1. 创建数据库恢复使用的环境
在新的Dell服务器上,安装与原来的数据库服务器相同的操作系统UnixWare 7.1;然后安装与原数据库相同版本的Oracle 8.1.6 for Unix 企业版。
2. 删除新服务器上的Oracle实例
启动新数据库服务器上的Oracle,在sqlplus中,查找到数据库文件的路径,并保存在当前路径下的文件file_name.txt中:
$ sqlplus system/manager
SQL> spool file_name.txt
SQL> select file_name from sys.dba_data_files;
SQL> spool end
SQL>exit
关闭新服务器的Oracle,然后根据文件file_name.txt中的路径,删除新装的Oracle实例的所有数据库文件。
注:从本步开始所有操作都是用Oracle用户登录操作系统(Unix)后进行。文中所有的黑色粗体5号字符(标题除外)的语句可以直接执行,黑色倾斜粗体5号字符的语句需要修改后执行。
3. 恢复数据库文件
把备份的所有数据库文件用Ftp上传新的数据库服务器中的相同路径下。如果原来的路径已不存在,可以拷贝到其他路径下,恢复时详细处理方法见步骤7中<2>.
4. 恢复初始化参数文件
把备份的initSID.ora文件用Ftp上传到新数据库服务器中Oracle实例的initSID.ora文件位置,覆盖之。其位置一般在$ORACLE_HOME/dbs目录下。