冷/热/逻辑是ORACLE中最基本的三种备份与恢复,也是最简单的、最原始的,它们在8i之前就出现了,不过优点不如恢复管理器RMAN多,但RMAN是8i之后才出现的,同时8i开始出现的STANDBY(9i后叫DATA GUARD),是一种更高级的数据库备份与恢复
................
对于数据库比较小,也不是7X24,用这三种基本备份就足够保存数据安全性,但不如RMAN好;对于数据库超大的或是7X24的,只有用STANDBY方式。
下面先说说这三种基本备份与恢复,RMAN和STANDBY以后再说
一、逻辑备份与恢复
1、备份。就是用exp程序导出数据库的对象,一般都用全部是导出,语法:$ORACLE_HOME/bin/exp system/manager@prod file=/oracle/backup/oradata/expprod.dmp full=y log=/oracle/backup/log/explog.log
当然也可以按用户/表模式来导出,所有导出选项可以通过
$ORACLE_HOME/bin/exp help=y获得
2、恢复。就是用imp程序从备份文件中导入全部对象,语法:
$ORACLE_HOME/bin/imp system/manager@prod file=/oracle/backup/oradata/expprod.dmp full=y log=/oracle/backup/log/implog.log
注意,导入后可能有些对象要重新编译才使用。
逻辑备份与恢复对于大点的数据库是不合适的,因为速度很慢,不过从10g开始,逻辑备份提供了expdb/impdb两种高速导出/导入方式,用这两种方式必须在数据库中创建一目录create or replace directory DMPDIR as '/oracle/backup/oradata'
创建目录后就可以跟exp/imp一样导出/导入了语法:
$ORACLE_HOME/bin/expdp system/manager DIRECTORY=DMPDIR DUMPFILE=expdpprod.dmp full=y
其中DMPDIR就是在数据库中创建的目录对象
二、冷备份与恢复
1、备份。就是关闭数据库,然后用操作系统的复制命令,把数据文件、日志文件、控制文件、初始化参数文件COPY到备份目录
--备份所有数据文件
cp $ORACLE_BASE/oradata/*.dbf /oracle/backup/oradata/*.dbf
--备份所有日志文件
cp $ORACLE_BASE/oradata/*.log /oracle/backup/oradata/*.log
...
2、恢复。关闭目标数据库,用操作系统的复制命令,把数据文件、日志文件、控制文件、初始化参数文件从备份目录COPY到相应的数据库目录
--恢复所有数据文件
cp /oracle/backup/oradata/*.dbf $ORACLE_BASE/oradata/*.dbf
--恢复所有日志文件
cp /oracle/backup/oradata/*.log $ORACLE_BASE/oradata/*.log
...
三、热备份与恢复
要用热备份,首要把数据库置于归档模式
--用archive log list查看数据库是否处于归档模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
...
--数据库不在归档模式,要关闭重新装载才能修改
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
Database mounted.
--更改数据库置于归档模式
SQL> alter database archivelog;
Database altered.
--再用archive log list可以看到数据库处于归档模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
...
SQL> alter database open;
Database altered.
至此,数据库已置于归档模式,可以对数据库进行热备份了
1、备份
--备份表空间(注意释放锁住SCN的数据文件)
alter tablespace 表空间名 begin backup
!cp 表空间的数据文件 /oracle/backup/data/
alter tablespace 表空间名 end backup
...
--备份归档日志
!cp $LOG_ARCHIVE_DEST/* /oracle/backup/log/*
--备份控制文件
alter database backup controlfile to '/oracle/backup/ctlfile.bak'
2、恢复
--关闭数据库
shutdown immediate;
--恢复数据文件和归档日志
!cp oracle/backup/data/* $ORACLE_BASE/oradata/*
!cp oracle/backup/log/* $ORACLE_BASE/oradata/*
--不完全恢复
startup mount
recover database until time 'yyyy-mm-dd hh24:mi:ss';
--打开数据库并重置日志
alter database open resetlogs
这里的热备份恢复是一种很简单的不完全恢复,还有其他的几种不完全恢复;除了不完全恢复之外,还有完全恢复;不完全恢复与完全恢复是两种不同的概念,以后再说