oracle数据库的备份与恢复Word格式.docx
《oracle数据库的备份与恢复Word格式.docx》由会员分享,可在线阅读,更多相关《oracle数据库的备份与恢复Word格式.docx(15页珍藏版)》请在冰点文库上搜索。
ONLINE/u3/oradata/lyj/rbs01.dbf
ONLINE/u3/oradata/lyj/temp01.dbf
ONLINE/u3/oradata/lyj/users01.dbf
ONLINE/u3/oradata/lyj/indx01.dbf
select*fromv$logfile;
GROUP#STATUSMEMBER
--------------------------------------------------------------------------------
1/u3/oradata/lyj/redo01.log
2/u3/oradata/lyj/redo02.log
3/u3/oradata/lyj/redo03.log
●关闭数据库:
shutdown
数据库差不多关闭。
差不多卸载数据库。
ORACLE例程差不多关闭。
●将数据文件、操纵文件和redo日志文件从上面查找出来的位置拷贝到/mnt/backup_wy/名目下作为备份:
[oracle|15:
38:
09|/u3/oradata/lyj]$cp*.ctl/mnt/backup_wy/
29|/u3/oradata/lyj]$cp*.log/mnt/backup_wy/
43|/u3/oradata/lyj]$cp*.dbf/mnt/backup_wy/
●重新开启数据库:
startup
热备份
在联机状态下执行备份,这时数据库必须运行在ARCHIVELOG模式下,因为在日志书写器进程重新使用它之前,副本是由每一个redo日志文件组成的,日志书写器在循环方式中通过redo日志文件进行循环,只要数据库正在运行,它就写入一个,然后是另一个,依此类推。
在ARCHIVELOG模式下运行时,直到redo日志文件的永久拷贝被建立,Oracle才覆盖redo日志文件。
在ARCHIVELOG模式中运行数据库时,能够选择当每个redo日志文件写满时手工地生成备份或者启动可选的归档进程进行自动备份。
只有通过sys身份或internal登录数据库,就有权益通过sqlplus或svrmgr查看数据库的归档状态;
SVRMGR>
archiveloglist
数据库记录模式存档模式
自动存档已启用
存档路径/u2/oratest/admin/lyj/arch
最旧的联机日志顺序496
要存档的下一个记录顺序498
当前记录顺序498
在这种模式下,数据库运行在ARCHIVELOG模式下,同时能够进行自动归档,现在,能够进行联机备份了。
假设数据库运行在非存档模式下,就应该在参数文件中修改log_archive_start=true
log_archive_dest=指定的储存归档日志文件的名目
log_archive_format=“制定的归档日志文件的储备格式"
备份操纵文件;
备份数据文件;
归档当前的联机日志文件;
备份归档日志文件。
下面以lyj为例讲明如何热备一个数据库:
●备份操纵文件:
alterdatabasebackupcontrolfileto'
/mnt/backup_wy/controlfile'
;
语句已处理。
用完整的文件夹路径和文件的名称'
将备份操纵文件储备在此。
●备份数据文件:
执行一个数据库的联机备份时,需要一次复制一个表空间的数据文件,在位一个表空间复制文件之前需要执行ALTERTABLESPACEtablespace_nameBEGINBACKUP;
为表空间复制完文件时,需要执行下列命令:
ALTERTABLESPACEtablespace_nameENDBACKUP;
使用这些BEGIN和END命令的理由是当它们被复制时,Oracle需要将数据文件头保持连贯状态,发出BEGIN命令时,Oracle停止更新受阻碍的数据文件的文件头上的检查点,在整个表空间备份模式中,Oracle通过将全部的数据块写入redo日志文件的方式来记录那个表空间中的数据的变化。
通过下面语句找出所有表空间的名字:
select*fromv$tablespace;
TS#NAME
----------------------------------------
0SYSTEM
1TOOLS
2RBS
3TEMP
4USERS
5INDX
然后对这些表空间进行备份,将数据文件备份到/mnt/backup_wy/
名目下:
altertablespacesystembeginbackup;
altertablespacetoolsbeginbackup;
altertablespacerbsbeginbackup;
altertablespacetempbeginbackup;
altertablespaceusersbeginbackup;
altertablespaceindxbeginbackup;
[oracle|17:
01:
53|/u3/oradata/lyj]$cp*.dbf/mnt/backup_wy/
altertablespacesystemendbackup;
altertablespacetoolsendbackup;
altertablespaceusersendbackup;
altertablespacetempendbackup;
altertablespaceindxendbackup;
altertablespacerbsendbackup;
●归档当前的联机redo日志文件:
备份完所有的数据文件后,需要归档当前的联机redo日志文件,因为复原时需要它们。
归档她们时承诺和所有其他的归档日志文件一起进行备份。
altersystemarchivelogcurrent;
这条命令导致Oracle转换到一个新的日志文件。
然后Oracle归档所有未被归档的日志文件,还能够使用另外两条命令达到相同的成效:
altersystemswitchlogfile;
语句强制转换日志。
altersystemarchivelogall;
语句导致Oracle所有已写满但仍未归档的redo日志文件归档。
●备份归档日志文件
一旦差不多归档了当前联机的日志文件,最后一步确实是备份所有归档日志文件到/mnt/backup_wy/名目下,因为还原数据库时需要它们
42:
46|/u2/oratest/admin/lyj/arch]$cparch_*.*/mnt/backup_wy/
导出数据库作备份
数据库导出能够被看作备份的一种形式。
Oracle有用工具Export利用SQL语句读出数据库数据,并在操作系统层将数据和定义存入二进制文件。
导出关于还原一个意外删除的对象或还原那个对象的定义来讲是专门好的,因为脱机备份不能只还原一个对象,而联机备份还原一个对象必须得还原该对象存在的数据文件,相关于导出这种备份形式来讲要繁琐专门多,然而从导出中还原时,仅能得到导出文件中的内容,不能从中向前回滚,因此导出数据库这种备份方式只能作为联机备份和脱机备份的一种补充。
第二部分:
数据库的复原
要求复原
数据库的复原一样分为NOARCHIVELOG模式和ARCHIVELOG模式,实际情形中专门少会丢失整个一个oracle数据库,通常只是一个驱动器损坏,使得仅仅丢失该驱动器上的文件。
如何从如此的缺失中复原专门大程度上取决于数据库是否正运行在ARCHIVELOG模式下。
假如没有运行在ARCHIVELOG模式下而丢失了一个数据库文件,就只能从最近的一次备份中复原整个数据库,备份之后的所有变化都丢失,而且在数据库被复原时,必须关闭数据库。
由于在一个产品中丢失数据或将数据库关闭一段时刻是不可取的,因此大多数oracle产品数据库都运行在ARCHIVELOG模式下。
在oracle中,复原指的是从归档和联机redo日志文件中读取redo日志记录并将这些变化应用到数据文件中并将其更新到最近状态的过程。
从备份中还原一个文件时,文件代表了数据库被备份时而不是丢失时的状态,通常情形下期望复原过渡期即文件备份和文件丢失之间发生的所有变化,由于所有变化都被写入日志文件中,因此能够通过读取日志文件同时再次将这些变化应用于所还原的文件中。
还原NOARCHIVELOG模式下的数据库
还原一个运行于NOARCHIVELOG模式下的数据库代表了最简单的情形,由于不存在归档日志文件,也就不可能有介质复原,全部的操作仅仅是操作系统级的复制过程。
还原一个NOARCHIVELOG模式下运行的数据库由下列几步组成:
●假如实例正在运行,关闭数据库;
shutdown
●从最近备份中还原操纵文件和数据文件;
●指定是否移动任何一个文件
在启动数据库时,oracle将依照参数文件指定的路径查找这些文件。
假如一个磁盘的丢失迫使将文件放回到与最初不同的位置,需要告诉oracle,否则,就会显现出错信息。
能够有两种方法告诉oracle已移动了一个数据库文件:
1、使用alterdatabaserenamefile‘original_filename’to‘new_filename’命令,其中,‘original_filename’是当前使用的完整的路径和文件名,而‘new_filename’是文件当前的路径和文件名。
为了改变数据库文件的名字,数据库必须被安装但没有打开,因为变化要在操纵文件中被记录。
e.g:
connectinternal;
startupmount;
alterdatabaserenamefile‘/u3/oradata/lyj/system01.dbf’to‘/mnt/backup_wy/system01.dbf’;
2、假如正在移动全部或大部分的数据文件,重建操纵文件会相对简单一些。
而假如在备份操纵文件时使用了alterdatabasebackupcontrolfiletotrace这条语句,就会在admin/udump名目下找到重建操纵文件的跟踪语句,该语句包括必须的createcontrolfile等命令,将该文件中的改变了的文件名代替原有的文件名和位置。
●重新打开数据库
应该使用resetlogs选项打开数据库,如此复位日志文件是为了保证在新的记录和那些从先前的数据库中留下的记录之间可不能产生任何冲突。
用备份的操纵文件替换操纵文件:
connectinternal
/mnt/backup_wy/control.ctl'
Statementprocessed.
alterdatabasebackupcontrolfiletotrace;
exit
41:
32|/u3/oradata/lyj]$cp/mnt/backup_wy/control.ctlcontrol01.ctl
32|/u3/oradata/lyj]$cp/mnt/backup_wy/control.ctlcontrol02.ctl
32|/u3/oradata/lyj]$cp/mnt/backup_wy/control.ctlcontrol03.ctl
startupmount
alterdatabaseopenresetlogs;
要求介质复原
在ARCHIVELOG模式下运行数据库时,oracle在每个redo日志文件写满后都进行一次拷贝,这些拷贝同没有被复制的任何联机redo日志文件一起被称为是归档日志文件,形成对数据库所进行的变化的一条连续记录。
假如丢失了一个数据文件并被迫从备份中还原它,那么归档日志文件中的信息将被用来将所有变化重新应用给备份发生后被建立的文件,最后的成效是没有遭受数据缺失。
复原操纵文件
在进行介质复原时,假如存在当前操纵文件,就使用当前操纵文件,假如当前操纵文件在显现介质故障时丢失,那么能够用操纵文件的备份拷贝,或者创建一个新的操纵文件,创建操纵文件的语法如下:
STARTUPNOMOUNT;
CREATECONTROLFILEREUSEDATABASE"
LYJ"
NORESETLOGSARCHIVELOG
MAXLOGFILES32
MAXLOGMEMBERS2
MAXDATAFILES254
MAXINSTANCES8
MAXLOGHISTORY907
LOGFILE
GROUP1'
/u3/oradata/lyj/redo01.log'
SIZE500K,
GROUP2'
/u3/oradata/lyj/redo02.log'
GROUP3'
/u3/oradata/lyj/redo03.log'
SIZE500K
DATAFILE
'
/u3/oradata/lyj/system01.dbf'
/u3/oradata/lyj/tools01.dbf'
/u3/oradata/lyj/rbs01.dbf'
/u3/oradata/lyj/temp01.dbf'
/u3/oradata/lyj/users01.dbf'
/u3/oradata/lyj/indx01.dbf'
CHARACTERSETUS7ASCII;
RECOVERDATABASE
ALTERSYSTEMARCHIVELOGALL;
ALTERDATABASEOPEN;
Createcontrolfile命令只能在nomount选项启动数据库后发出,执行该命令之前,创建一个新的操纵文件并自动安装数据库,然后新的操纵文件在需要时能够用于复原。
从丢失的数据文件中复原
通常由磁盘错误引起的数据文件的丢失,是用户经常遇到的情形。
假如正在ARCHIVELOG模式下运行,那么可只还原丢失的文件,把它们还原到出错的那一刻,而进行这些操作时除非system表出错,其它的文件正在运行。
使丢失的数据文件脱机
假如驱动器错误导致丢失了一个数据文件,那么oracle差不多将那个文件脱机,能够用下列查询检查数据库中文件的状态:
OFFLINE/u3/oradata/lyj/indx01.dbf
在这种情形下,indx01.dbf文件是脱机的,假如已丢失的文件还没有脱机,能够通过下列命令使其脱机:
alterdatabasedatafile‘/u3/oradata/lyj/indx01.dbf’offline;
只有文件安全脱机后,才能连续还原并复原它。
其它未脱机的数据文件能够照常工作。
还原丢失的数据文件
在复原文件前,使用操作系统级的复制命令还原数据文件,否则执行一条alterdatabaserenamefile命令在数据库文件中记录新的位置。
1复原丢失的数据文件(2种方法)
●以sysdba或system或internal身份登录后,执行recoverdatabase命令使得oracle检查所有文件并对任何需要复原的文件进行复原。
●recoverdatafile‘/u3/oradata/lyj/indx01.dbf’
假如归档日志文件仍旧联机,它们需要在archive_log_dest指向的文件夹中。
2将已复原的文件重新重新联机
复原完文件后是将文件重新联机,能够通过alterdatabase命令实现。
E.g:
alterdatabasedatafile‘/u3/oradata/lyj/indx01.dbf’online;
OK!
文件已被复原,已被重新联机,能够正常使用了。
执行一个不完全复原
在介质故障复原中,不丢失数据的数据库复原称为完全复原。
假如在数据库复原之后丢失某些数据,则称为不完全复原。
一样情形下,当所有需要的重作日志文件和备份数据文件以及当前有效的操纵文件都能够使用时,应该采纳完全复原。
只有当丢失了一个归档或联机重作日志文件和操纵文件时采纳不完全复原。
不完全复原还能够复原到过去的某个时刻点。
不完全复原并不总是代表一个从进程错误中复原的理想方法,因为假如联机事务正在发生而同时一个批处理进程正在运行,假如用户运行一个不完全复原先重新运行批处理进程,那些数据就将丢失。
在不完全复原前,需要将某一次文件的全备份进行还原,然后就能够进行不完全复原了。
不完全复原有几个选项可供选择:
●untilcancel指定一个基于取消的复原;
●untilchange指定复原到一个指定的SCN;
●untiltime指定复原到某一时刻;
●datetime指定用户期望复原数据库的日期和时刻。
connectinternal;
recoverdatabaseuntiltime‘2001-02-21:
10:
30:
00’;
alterdatabaseopenresetlogs;
因为在打开数据库时始用了resetlogs选项,oracle抛弃复原中没有运用的重作纪录,同时确保永久不再运用,同时重新初始化操纵文件中有关联机日志文件和重作线程的信息,能够有效地预防使用一个已存在的归档和redo日志来再次复原,因此最好在运行完不完全复原后赶忙执行数据库的另一个脱机或联机的全备份。
从导出文件中还原数据库
能够使用imp应用程序从导出文件来还原一个数据库。
从导出文件中还原数据库比从一个文件系统的备份中还原数据库要容易,然而它具有以下一些不利因素:
●还原进程时刻长;
●不能还原个不文件;
●不能执行介质复原,故不能复原导出后所做的变化
例子:
数据文件复原的一样过程是:
====================
做任何复原之前,先备份目前的系统,以防复原过程中,系统遭到更大的损坏
第一取得最后一次备份(脱机冷备份),并确保没有损坏,
然后判定系统是否运行在归档模式,
假如是非归档模式,则只能用最后一次全备份来复原,
删除所有的数据文件、操纵文件、联机日志文件,
将备份的数据文件、操纵文件、联机日志文件全部拷回原名目。
重新启动数据库
假如是归档模式,再判定是否能够shutdown
假如当前系统不可shutdown,则进行tablespace、datafile复原
(前提是system表空间和包含活动回滚段的表空间不可损坏)
假如当前系统能够shutdown,则进行recoverdatabase复原
假如所有文件均有效、无损坏,则可进行全数据库复原,过程如下:
将数据文件、已备份的归档日志拷贝回原名目(不可拷贝操纵文件)
setautorecoveryon
recoverdatabase;
alterdatabaseopen;
假如某个归档日志文件损坏,则只能复原到那个损坏的日志文件之前,
即不完全复原
将数据文件、已备份的归档日志拷贝回原名目
setautorecoveryoff
recoverdatabaseuntilcancel;
alterdatabaseope