首先要明确的是,oracle数据库的备份可以分为逻辑备份和物理备份。
逻辑备份的是通过数据导出对数据进行备份,主要方式有老式的IMP/EXP和数据泵灯方式。适合变化较少的数据库,而对于高可用性数据库,由于这种方式备份的数据只能恢复到备份的时间点,所以并不适用。但由于逻辑备份具有平台无关性,所以更常见的是用来数据迁移及数据移动;
物理备份是通过复制数据文件、参数文件等数据库的物理文件来进行备份。物理备份可以分为冷备份和热备份。冷备份需要在关闭数据库后进行备份,目前在高可用的生产环境中,这种方式使用较少。而热备份可以在系统运行的情况下通过备份数据文件及归档日志就可以恢复,因此使用的范围更广泛。
热备份可以分为用户管理方式下的热备份(user-managed backup and recovery)和oracle管理(RMAN)的热备份(Recovery MANager-RMAN),要注意的是,数据库要进行热备份必须运行在归档模式下。
一、用户管理方式下的备份:
首先,备份数据文件:
1)查询数据文件有哪些:
SQL> select name from v$datafile;
2)将数据库置于备份模式下:
SQL> alter database begin backup;
3)备份数据文件:
SQL> host copy D:\ORACLE\ORCDATA\TIOD\SYSTEM01.DBF C:\oracle\backup;
SQL> host copy D:\ORACLE\ORCDATA\TIOD\SYSAUX01.DBF C:\oracle\backup;
SQL> host copy D:\ORACLE\ORCDATA\TIOD\UNDOTBS01.DBF C:\oracle\backup;
SQL> host copy D:\ORACLE\ORCDATA\TIOD\USERS01.DBF C:\oracle\backup;
SQL> host copy E:\ORACLE\ORCL\ODS\HH_TBS.DBF C:\oracle\backup;
4)结束数据文件备份并归档日志:
SQL> alter database end backup;
SQL> alter system archive log current;
第二,备份控制文件,此处使用备份到跟踪文件的方式:
1)将建立控制文件的命令信息记录到trace文件中:
SQL> alter database backup controlfile to trace;
2)确定跟踪文件位置和名称:
SQL> select a.spid from v$process a,v$session b where a.addr=b.PADDR and b.USERNAME='SYS'
SQL> show parameter user_dump_dest;
跟踪文件命名为<SID>_ora_<SPID>.trc。
3)打开vidi_ora_1260.trc,确定建立控制文件内容;
CREATE CONTROLFILE REUSE DATABASE "TIOD" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\ORACLE\ORCDATA\TIOD\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'D:\ORACLE\ORCDATA\TIOD\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'D:\ORACLE\ORCDATA\TIOD\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\ORCDATA\TIOD\SYSTEM01.DBF',
'D:\ORACLE\ORCDATA\TIOD\SYSAUX01.DBF',
'D:\ORACLE\ORCDATA\TIOD\UNDOTBS01.DBF',
'D:\ORACLE\ORCDATA\TIOD\USERS01.DBF',
'E:\ORACLE\ORCL\ODS\HH_TBS.DBF'
CHARACTER SET ZHS16GBK
;
第三、备份归档日志:
确定需要备份的归档日志:
SQL> select name from v$archived_log where dest_id=1 and first_time>=sysdate-1;
使用copy命令备份到备份文件夹即可。
第四、备份参数文件:
SQL> CREATE PFILE='C:\oracle\backup\initelse.ora' from spfile;
二、使用备份文件复制数据库到另外一台机器:
当需要在另外一台机器克隆一套与生产环境同样的数据进行测试、学习时,我们可以使用上面备份的文件复制数据库。需要注意两点:
1)源机器和目标机器应为相同的操作系统平台;
2)复制数据库可以包含所有的数据文件也可以仅仅复制部分数据文件,但system表空间和undo表空间的数据文件必须有。
一)建立存放目标库的相关文件目录。比如tiod数据库建立D:\oracle\orcdata\tiod目录,及目录下BDUMP、UDUMP、ARCHIVE等目录。
二)建立实例服务:
C:\Users\Administrator>oradim -new -sid tiod -intpwd oracle;
三)建立参数文件:
1)编辑initelse.ora,修改以下参数:
*.db_name='tiod'
*.log_archive_dest_1='location=D:\oracle\orcdata\tiod\ARCHIVE'
*.user_dump_dest='D:\oracle\orcdata\tiod\udump'
*.background_dump_dest='D:\oracle\orcdata\tiod\bdump'
此处对应我们第一步建立起的相关文件目录
2)建立目标库参数文件:
SQL> create spfile='C:\oracle\product\11.2.0\dbhome_1\database\spfiletiod.ora' from pfile='C:\oracle\backup\initelse.ora';
四)将原库备份好的数据文件和归档文件复制到目标库的相应文件目录。
五)启动实例,修改并建立控制文件,控制文件可根据我们上述备份中的方法获得,并修改后执行即可。
C:\Users\Administrator>set oracle_sid=tiod
C:\Users\Administrator>sqlplus sys/oracle as sysdba
SQL> startup nomount spfile='C:\oracle\product\11.2.0\dbhome_1\database\spfiletiod.ora';
SQL>CREATE CONTROLFILE REUSE DATABASE "TIOD" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\ORACLE\ORCDATA\TIOD\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'D:\ORACLE\ORCDATA\TIOD\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'D:\ORACLE\ORCDATA\TIOD\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\ORCDATA\TIOD\SYSTEM01.DBF',
'D:\ORACLE\ORCDATA\TIOD\SYSAUX01.DBF',
'D:\ORACLE\ORCDATA\TIOD\UNDOTBS01.DBF',
'D:\ORACLE\ORCDATA\TIOD\USERS01.DBF',
'E:\ORACLE\ORCL\ODS\HH_TBS.DBF'
CHARACTER SET ZHS16GBK
;
六)恢复目标库
1)指定要使用的归档目录(第一步所建ARCHIVE目录)并执行恢复操作:
SQL> set logsource 'D:\oracle\orcdata\tiod\ARCHIVE';
SQL> recover database using backup controlfile until cancel;
2)使用RESETLOGS选项打开数据库,并建立起目标库的所有重做日志
SQL> alter database open resetlogs;
这样就完成了对一个数据库的备份以及使用其备份复制数据库到另外一个机器上的过程,这个过程是用户管理方式下的备份和复制数据库,此外我们可以使用RMAN方式达到同样的目的。这个备份和恢复适用于在open状态下的归档模式数据库。