Oracle备份恢复一(手动备份)  

    平台:redhat linux as5,oracle10g
    Oracle提供了许多方法来备份数据库。包括用户管理,恢复管理器(RMAN)Oracle数据泵等。用户管理允许用户通过操作系统命令手动备份数据库。本文主要介绍如何手动备份整个数据库,以及如何手动单独备份表空间,控制文件,spfile文件等.

备份数据库

1.备份内容
    备份数据库是指备份数据库的所有数据文件,控制文件,参数文件和口今文件。下面先找到这些内容
    数据文件
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/denver/system01.dbf
/u01/oradata/denver/undotbs01.dbf
/u01/oradata/denver/cwmlite01.dbf
/u01/oradata/denver/drsys01.dbf
/u01/oradata/denver/example01.dbf
/u01/oradata/denver/indx01.dbf
/u01/oradata/denver/odm01.dbf
/u01/oradata/denver/tools01.dbf
/u01/oradata/denver/users01.dbf
/u01/oradata/denver/xdb01.dbf
    控制文件
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/denver/control01.ctl
/u01/oradata/denver/control02.ctl
/u01/oradata/denver/control03.ctl
    可见数据文件和控制文件都在/u01/oradata/denver/下,但这个目录下还有redo*.log,在归档模式下一般重做日志不需要备份
SQL> ! ls /u01/oradata/denver
archive        control03.ctl  example01.dbf  redo01.log  system01.dbf  undotbs01.dbf
control01.ctl  cwmlite01.dbf  indx01.dbf     redo02.log  temp01.dbf    users01.dbf
control02.ctl  drsys01.dbf    odm01.dbf      redo03.log  tools01.dbf   xdb01.dbf
    参数文件和口今文件
SQL> show parameter spfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      ?/dbs/[email protected]
SQL> ! ls $ORACLE_HOME/dbs
initdenver.ora  init.ora  lkDENVER     spfiledenver.ora
initdw.ora      lkAAA     orapwdenver  spfiledenver.ora.bak
    现在我们找到了要备份的所有内容,即
/u01/oradata/denver/*dbf(数据文件)
/u01/oradata/denver/*.ctl(控制文件)
$ORACLE_HOME/dbs/spfiledenver.ora(参数文件)
$ORACLE_HOME/dbs/orapwdenver(文件)
2.备份方法
    备份数据库分为冷备和热备,冷备也叫数据一致性备份,是指关闭了数据库之后,把需要备份的内容CP出来,比较简单,只要能找到这些文件就能备份出来,热备也叫数据库非一致性备份,是指在数据库open状态下备份数据文件和控制文件的方法,
    冷备要关闭数据库会中断业务,也比较简单,在此不做讨论,下面使用热备来备份数据库,注意热备份一定要在归档模式下备份
SQL> archive log list
Database log mode              Archive Mode
Automatic archival              Enabled
Archive destination              /u01/oradata/denver/archive
    由于在第一步已找到了要备份的文件,现在开始备份
开始备份
SQL> alter database begin backup;
Database altered.
SQL>! cp /u01/oradata/denver/*.dbf /u01/backup/
SQL>alter database backup controlfile to '/u01/backup/backup.ctl'
SQL>! cp $ORACLE_HOME/dbs/spfiledenver.ora /u01/backup/
SQL>! cp $ORACLE_HOME/dbs/orapwdenver /u01/backup/
SQL>! alter database end backup;
SQL>alter system archive log current;
     这样整个数据库就备份完了,备份完后应做测试是不是有效备份,只要是有效备份,那么就可以高枕无忧了。下面介绍如何单独备份表空间,控制文件,spfile

2.备份表空间

    表空间在oracle中只是个逻辑概念,备份表空间其实是备份表空间下的数据文件,我们要找到表空间下对应的数据文件,把数据文件备出来
    注意表空间备份只适用于archivelog模式,备份表空间分为在表空间online备份和表空间offline备份,
表空间脱机备份
SQL> select file_name from dba_data_files where tablespace_name='TEST1';
FILE_NAME
--------------------------------------------------------------------------------
/u01/test1.dbf
SQL> alter tablespace test1 offline;
Tablespace altered.
SQL> ! cp /u01/test1.dbf /u01/backup
SQL> alter tablespace test1 online;
Tablespace altered.
    这样表空间test1就备份完了,因为表空间offline后就不能访问数据文件了,而且system表空间和正在使用的undo表空间不能脱机,所以这种方法很少用。
表空间联机备份
SQL> alter tablespace test1 begin backup;
Tablespace altered.
SQL> ! cp /u01/test1.dbf /u01/backup/
SQL> alter tablespace test1 end backup;
Tablespace altered.
    备份完备。别外如果要备份只读表空间直接把数据文件拷贝出来就可以了,不用区分脱机和联机

3.备份控制文件

    控制文件用于记录和维护数据库,当恢复数据库时,服务器进程和后台进程需要从控制文件中读取各种与备份相关的信息,如果控制文件损坏,则会导致备份信的丢失,当数据库配置发生改变时,一定要再单独备份控制文件
备份方法:
1.使用多元控制文件
2.备份到跟踪文件
3.建立控制文件副本
其中前两各方法,在以前的文章控制文件及归档日志管理已阐述
3种方法其实我们在上面备份数据库时用过
SQL> alter database begin backup;
Database altered.
SQL>alter database backup controlfile to '/u01/backup/backup.ctl'
#如果第二次使用这个命令,在最后加参数reuse(覆盖前一个)
SQL>alter database backup controlfile to '/u01/backup/backup.ctl' reuse;
SQL>! alter database end backup;

4.备份参数文件,口今文件

#参数文件
SQL>create pfile from spfile
SQL>! cp $ORACLE_HOME/dbs/spfiledenver.ora /u01/backup/
#口今文件
SQL>! cp $ORACLE_HOME/dbs/orapwdenver /u01/backup/

5.备份归档日志

    在归档模式下,对数据库的所有操作都存到了归档日志里,因些物理恢复要用到归档日志,为了确保恢复可以顺利进行,还应该备份归档日志.备份归档日志很简单,找到文件CP出来就可以了.
#备份过去一天的归档日志
SQL> select name from v$archived_log where dest_id=1 and first_time>=sysdate-1;
NAME
--------------------------------------------------------------------------------
/u01/oradata/denver/archive/1_12.dbf
/u01/oradata/denver/archive/1_13.dbf
/u01/oradata/denver/archive/1_14.dbf
SQL>! cp /u01/oradata/denver/archive/1_12.dbf /u01/backup/
SQL>! cp /u01/oradata/denver/archive/1_13.dbf /u01/backup/
SQL>! cp /u01/oradata/denver/archive/1_14.dbf /u01/backup/