1、用户管理的备份:
数据库一致性备份:即冷备,需要正常关闭数据库进行,需要备份的文件有数据文件和控制文件,切记不要备份重做日志。archive 和 noarchive模式都可以用。
操作步骤:查找需要备份的数据文件和控制文件:select name from v$datafile union select name from v$controlfile ; (显示所有的需要备份的文件) —— 关闭数据库——复制所有的文件到指定的备份目录:可以在sqlplus下用:host cp u01/app/oracle/.../control01.ctl /home/oracle/backup ;backup是一个备份目录。——启动实例。
数据库非一致性备份:数据库处于open阶段就可以备份数据文件和控制文件的方法,进行非一致性备份不需要中断业务操作,这个操作只适用于archivelog模式下。
具体步骤如下:列出要备份的数据文件:select name from v$datafile;——将数据库设为备份模式:alter database begin backup;——备份数据文件和控制文件,数据文件用cp命令就可,和上面的一样操作,但是备份控制文件要用alter database backup controlfile命令。可以这样做,在用cp备完了所有数据文件之后执行:alter database backup controlfile to '/home/backup';——结束备份,需要操作:alter database end backup;为了确保数据文件备份的同步性还应该归档当前的日志组:alter system archive log current;
表空间备份:
备份表空间只适用于archivelog 的模式,可以选择备份表空间的一个数据文件,或者多个数据文件。
脱机备份:指的是表空间处于offline状态的时候,备份表空间的某个或者 所有文件,优点是会产生较少的重做信息,缺点是会影响表空间的业务操作,因为system表空间和正在使用的undo表空间不能脱机,所以这种备份方式不适用于这两个表空间。
好了,直接上步骤 :确定表空间包含的数据文件,(表空间和数据文件的对应关系都在数据字典视图dba_data_files里,可以互相查找):select file_name from dba_data_files where tablespace_name='USERS';——设置表空间为脱机状态:alter tablspace users offline。——复制数据文件,还是cp,不说了。——将表空间设为联机状态:alter tablesapce users online;
联机备份:这个就可以备份所有表空间了,但是还得注意是archivelog模式下,不然报ora-01123错误,刚才就遇到了。。不管你是system还是undo,也不影响正常的业务操作,但是缺点是生成更多的重做信息和归档信息。同样以users表空间为例,
说明操作步骤:确定表空间包含的数据文件:select file_name from dba_data_files where tablespace_name='USERS';——设置表空间为备份模式,设置后,表空间内的数据文件会在数据文件块头上加锁,使得数据文件头块不会发生改变,并且头块文件记录了将来进行恢复时的日志序列号和scn号。alter tablespace users begin backup;——复制数据文件,还是cp,不说了。——设置表空间为正常模式alter tablespace users end backup;
处理联机备份失败: 进行联机热备份时,服务器发生故障,如掉电,重新启动服务器,启动数据库时,无法打开数据库,Oracle要求进行介质恢复,因为表空间还处在热备份状态。
模拟现象及解决方法: 先将数据库设置为归档模式svrmgrl>connect internal ;svrmgrl>alter tablespace 表空间名 begin backup;
-表空间热备模式没结束就强行关闭数据库,造成错误:svrmgrl>shutdown abort;继续执行:svrmgrl>startup,报错ora-01113,ora-01110数据文件需要介质恢复。必须用startup force mount。现在可以强制挂载数据库了。然后查询视图v$backup,确定处于联机备份状态的数据文件,查询:select file# from v$backup where status='ACTIVE';
FILE#
---------
4
好了确定了文件之后就是把文件的状态给整好,可以执行alter database end backup,这个最好记;也可以用recover datafile 4 ;还有个一比较麻烦的,就是这两个地混合体:alter database datafile 4 end backup;——行了,最后一步打开数据库alter database open。
备份只读表空间:
只读表空间的scn不会变化,只需要备份一次就行了.
直接上操作吧::确定处于只读状态的表空间:select tablespace_name from dba_tablespaces where status='READ ONLY'; 好了,下一步就是确定只读表空间内的数据文件了,假设上面的查询结果USERS表空间为只读表空间,执行:select file_name from dab_data_files where tablespace_name=‘USERS’;这一步就把要备份的文件找到了,下一步,直接cp,不说了。
备份控制文件:备份控制文件有两种方法:可以建立控制文件副本,也可以将控制文件备份到跟踪文件中去。
首先看第一种,建立控制文件副本:在数据库处于open阶段时,控制文件的副本只能用alter database 命令生成而不能用操作系统的cp命令。操作:alter database backup controlfile to ‘/home/back’ 如果控制文件已经存在,再用这个操作时会报错,怎么办呢?加一个reuse选项:alter database backup contrilfile to ‘/home/backup’ reuse;
再看第二种备份控制文件的方法:一般来说,如果数据库的数据文件,日志文件都是正常的,只是误删除了控制文件,那么我们可以通过手工 建立控制文件就能恢复数据库。这样的话你必须知道数据内的数据文件,日志文件的详细信息,可是数据库现在没有打开,不可能通过查询数据数据字典视图,或者数据库参数来知道(可以在操作系统下手工查找)。说了这么多,我们可以把控制文件备份到跟踪文件中去,
命令:alter database backup controlfile to trace;跟踪文件再初始化参数user_dump_dest所对应的目录中,一般格式SID_ora_SPID.trc,
sid为实例名。也就是ORACLE_SID的值,spid是服务器进程所对应的操作形同进程号,通过查询v$process和v$sessiong可以确定服务器进程所对应的操作系统号,操作:select a.spid from v$prosess a , v$session b where a.addr=b.paddr and b.username = 'SYS'; 查得spid = 1236,现在可以根据这个找到跟踪文件mynewdb_ora_1236.trc 看到该文件内记录了建立控制文件的相关操作,这样如果出现控制文件损坏,我们可以通过这些语句恢复控制文件。
备份其他文件:
备份归档日志:首先确定需要归档的日志:select name from v$archived_log where dest_id=1 and first_time>=sysdate-1;显示所有的归档日志,然后用cp拷贝到指定目录。
备份参数文件:数据库启动时按照参数文件分配SGA,如果启动过程中不能定位到参数文件报错ora-01078:处理系统参数失败。备份这个参数比较简单,如果是文本的PFILE文件,直接cp一个副本到指定目录即可,如果是SPFILE,可以使用:create pfile='/home/back/bap.par' from spfile ='/u01/app/oracle.../spfilemynewdb.ora';
备份口令文件:直接cp备份到指定目录即可。
2、用户管理的完全恢复:
只能在archivelog模式下进行;
数据库处于关闭状态下:如果数据文件被误删除,或者数据文件所在的磁盘损坏,那么在打开数据库时后台进程DBWR会将错误信息写入到其跟踪文件中,并且在屏幕上显示: ora-01157:无法标识锁定数据文件4,请参阅DBWR跟踪文件。
数据库处于open阶段时:如果数据文件出现介质失败,那么,当oracle发生检查点时,会将损坏的数据文件自动脱机,当访问到涉及该数据文件的对象时,报错ora-00376:此时无法读取数据文件4.
数据库处于open阶段,如果数据文件的某个块发生损坏,此时若sql操作不涉及此块,则不产生任何问题,如果涉及此块,那么服务器进程会终止这个sql,并将损坏块的信息记入alert文件,还有用户进程跟踪文件,并在屏幕上显示如下错误ora-01578:oracle数据块损坏(文件号4,块号34)
3、转储文件
当数据文件出现介质失败的时候,在执行sql恢复命令之前,必须使用操作系统命令将损坏的数据文件cp一份到到指定目录,以免恢复失败,损坏更多的数据文件,当数据文件所在的磁盘出现问题时,必须将数据文件备份复制到其他磁盘,当执行恢复操作时,oracle会根据控制文件所记载的信息来定位数据文件,所以当你拷到其他磁盘后,要去修改控制文件中数据文件的位置信息。
mount状态下改变数据文件位置:当数据库处于mount状态,使用alter database rename file 命令改变数据文件的位置,在执行此命令之前,必须确保已经将副本文件复制到目标位置。先cp,然后再
alter database rename file ‘/home/oracle/../system01.dbf’ to '/u01/app/oracle/../system01_cp.dbf
在open状态下改变数据文件位置:既可以用alter tablespace tablespace_name rename datafile命令,也可以用alter database rename file命令。此时不能改变system表空间的数据文件位置,在修改数据文件之前,必须首先使表空间或则会数据文件脱机。
操作:首先alter database datafile ‘/home/oracle/.../user01.dbf’ offline; 然后 host cp 。 最后 alter tablespace users rename datafile ‘/home/.../user01.dbf’ to '/u01/oracle../user01.dbf';
4、恢复数据库、恢复表空间、恢复数据文件
在使用 用户管理的完全恢复时,在将数据文件备份复制到目标位置之后,还需使用 recover database 、 recover tablespace 、recover datafile 。三种命令应用归档日志和重做日志,下面详细说明这三个命令的用法。
1、recover database :该命令用于恢复数据库的多个数据文件,注意,只能在mount状态下运行,可以直接执行startup force mount 然后recover dataabase。注意此命令式sqlplus 命令,对应的sql恢复命令为alter database recover database。
2、recover tablespace:该命令用于恢复一个或者多规格表空间的所有数据文件,该命令只能在open状态下运行,如果是在open状态下恢复特定表空间的所有数据文件,那么可以使用命令recover tablespace uses。注意此命令式sqlplus 命令,对应的sql恢复命令为alter database recover tablespace。
3、recover datafile:该命令用于恢复一个或者多个数据文件,在mount或者open状态下都可以执行。运行时可以指定 数据文件,也可以指定文件编号:recover datafile ‘/home/../user03.dbf’ ; 或者 recover datafile 1,2; 注意此命令式sqlplus 命令,对应的sql恢复命令为alter database recover datafile。
应用归档日志:当使用归档日志时,dba既可以按照oracle建议的归档日志位置,也可以指定归档日志位置,还可以自动应用归档日志。这里介绍一下自动应用归档日志吧。
有三种方法:1、在提示语法下指定为AUTO。执行revover datafile 5 提示一堆归档日志方位,然后你再输入AUTO就行了。2、在开始恢复之前设置自动回复选项。set autorecovery on ,然后再执行 recover datafile 5就行了。3、在恢复命令中指定自动回复选项,recover automatic datafile 5.
视图v$recover_file:可以查看需要恢复的文件,错误原因,数据文件备份的scn值等信息。
视图v$loglist:当需要介质恢复时,需要根据日志序列号确定要应用的归档日志和重做日志,假设我们备份的数据文件的scn号通过select file# , change# from v$recover_file;查得为1481225,现在我们可以通过v$loghist确定从哪个日志序列号开始应用事务变化,select sequence# from v$loghist where 1481225 between first_change# and switch_change#; 查得sequence# 为5.那就表示从日志序列号为5的归档日志开始进行恢复。
视图v$archived_log:可以查询所有归档日志。
视图v$recovery_log:可以显示恢复所需的归档日志。执行:select sequence# , archive_name from v$recovery_log; 即可显示需要归档的日志序列号和具体日志位置。