您好,欢迎访问三七文档
一、冷备份二、热备份三、只读表空间备份四、NOLOGGING我们已经在前面讲过ORACLE的备份恢复原理,要进行介质恢复,必须有以前备份的数据文件。将以前备份的数据文件复制过来,覆盖现在正在使用的但出了问题的数据文件,这一步叫还原。成功还原后,以还原过来的数据库为基础,在它上面应用所有的重做记录,这一步叫恢复。经过还原、恢复后,数据文件回到了正常状态,可以使用了。我们这一节讲一下还原的基础―――备份数据文件。我们必须有数据文件的副本,才能在以后的某个时刻进行还原。备份数据文件其时就是将数据文件复制一份。有两种复制方法,一种是在数据库关闭时复制,这叫冷备份。还有一种是在数据正常打开时备份,这叫热备份。下面我们先从冷备份开始。第一节冷备份一、冷备份最简单的冷备份就是先SHUTDOWNIMMEDIATE关闭数据库。再用操作系统的复制命令,将数据文件复制、控制文件复制到另一个地方。注意,控制文件必须也要被备份。另外,归档日志文件中并不包括当前日志文件中的重做数据,最好将当前日志文件与备份一下。还有,最好把参数文件、口令文件也备份一下。控制文件和数据文件是完整的冷备份中必须包括的。而当前日志文件、参数文件、口令文件这都是可选的。冷备份的内容就这么多。简单点说冷备份就是先关闭数据库,再去把所有的数据库的文件复制到其他地方,这就是冷备份了。但是,一个在一点的数据库中,几百个数据文件很正常。逐个找到这些文件,逐个的复制,将是一个非常费事的操作。怎么办?我们可以用如下的方法让我们的备份工作再轻松。我们可以通过如下语句显示所有的数据文件:sid=36pid=22selectFILE_NAMEfromdba_data_files;FILE_NAME-------------------------------------------------------------F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSTEM01.DBFF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDOTBS01.DBFF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSAUX01.DBFF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\USERS01.DBFE:\ORACLE\EXAM10G_1.DBFF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO2.DBFF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO3.DBF已选择7行。在语句中,只需要添加如下部分,就可以自动生成备份命令:sid=36pid=22select'copy'||FILE_NAME||'E:\oracle\backup'fromdba_data_files;'COPY'||FILE_NAME||'E:\ORACLE\BACKUP'-------------------------------------------------------------------------------------copyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSTEM01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDOTBS01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSAUX01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\USERS01.DBFE:\oracle\backupcopyE:\ORACLE\EXAM10G_1.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO2.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO3.DBFE:\oracle\backup-2-已选择7行。在Linux、Unix中,将COPY换为CP即可。现在,只需要将屏幕上显示的结果复制到一个脚本文件中,比如bak.bat:copyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSTEM01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDOTBS01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSAUX01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\USERS01.DBFE:\oracle\backupcopyE:\ORACLE\EXAM10G_1.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO2.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO3.DBFE:\oracle\backup然后,执行此bak.bat即可自动完成备份。比你一个一个的去找数据文件,然后再复制到其他地方是不是要简单多了。特别是当数据文件比较多,而且文件比较零乱时,用这种方式生成脚本更方便。另外,在SQL*Plus中,还有一个假脱机命令,可以将显示的屏幕上的信息,定位输出到指定文件中。这有点类似操作系统中的输出重定向。下面我们试一下:sid=36pid=22spoole:\bak.batsid=36pid=22select'copy'||FILE_NAME||'E:\oracle\backup'fromdba_data_files;'COPY'||FILE_NAME||'E:\ORACLE\BACKUP'----------------------------------------------------------------------------------------(……………………)copyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO3.DBFE:\oracle\backup已选择7行。sid=36pid=22spooloff我把屏幕上的信息输出到指定文件E:\bak.bat中。在显示完毕,还应该关闭假脱机:SPOOLOFF。现在BAK.bat还不能运行,因为它里面有很多的额外的信息,比外表头部分,这些都要删除。使用SQL*Plus命令,setfeedbackoff和setheadingoff关闭表头和头尾的说明信息,这样,我们的脚本整理起来将会容易许多。进一步的,我们还可以把控制文件也包括进来。控制文件的位置在V$CONTROLFILE视图中。我们最终执行的语句有:setlinesize500setfeedbackoffsetheadingoffspoole:\bak.batselect'copy'||FILE_NAME||'E:\oracle\backup'fromdba_data_files;select'copy'||name||'E:\oracle\backup'fromv$controlfilewhererownum=1;spooloff它生成的文件如下:SQLselect'copy'||FILE_NAME||'E:\oracle\backup'fromdba_data_files;copyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSTEM01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDOTBS01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\SYSAUX01.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\USERS01.DBFE:\oracle\backupcopyE:\ORACLE\EXAM10G_1.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO2.DBFE:\oracle\backupcopyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\UNDO3.DBFE:\oracle\backupSQLselect'copy'||name||'E:\oracle\backup'fromv$controlfilewhererownum=1;copyF:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\THREE10G\CONTROL01.CTLE:\oracle\backupSQLspooloff只需要简单的整理,删除无用行,这个脚本就可以执行了。当然你还可以把日志文件也包括到这个脚本中。关于冷备份,我们就讲到这里。-3-第二节热备份一、热备份热备份是在数据库正在运行期间备份数据文件。热备不能直接的使用操作系统命令拷贝数据文件。因为如果一边有用户正在读写数据文件,而同时你在复制它。这样复制出来的文件中,很可能不完整的信息,这样备份的文件,是不能用于还原的。在热备数据文件时,要先将表空间设为热备状态,然后复制表空间所属数据文件,复制完毕后,再把表空间设为正常状态。设置表空间为热备状态的命令为:Altertablespace表空间名{begin|end}backup;Begin是将表空间设为热备状态。而END是热备状态的结束,表空间恢复正常状态。当把表空间设为热备状态后,所有针对表空间中数据文件的读写,都暂时停止,用户的操作,都记入日志文件中,当表空间结束热备状态后,再从日志文件中读出用户的操作,应用到数据文件上。这样,将表空间设为热备状态后,再备份数据文件,就避免了复制备份文件的同时,其他用户对文件进行读写。热备每一个数据文件,在热备前,还要修改数据文件所在表空间的状态,这个工作如果纯有手工来完成,工作量比较大。下面我们来看一个生成热备脚本的语句:select'altertablespace'||tablespace_name||'beginbackup;'||chr(10)||'hostcopy'||file_name||'e:\oracle\backup'||chr(10)||'altertablespace'||tablespace_name||'endbackup;'fromdba_data_filesorderbytablespace_name;这个语句的执行结果是:'ALTERTABLESPACE'||TABLESPACE_NAME||'BEGINBACKUP;'||CHR(10)||'HOSTCOPY'||FILE--------------
本文标题:第9章oracle
链接地址:https://www.777doc.com/doc-14378 .html