7.5.2 案例2 (数据库打开时的恢复以用户数据的表空间为例(热备))
热备份是当数据库打开并对用户有效是的OS级的数据备份。热备份只能用于
ARCHIVELOG
方式的数据库。在数据文件备份之前,对应的表空间必须通过使用ALTER TABLESPACE …… BEGIN BACKUP
以备份方式放置。然后组成表空间的数据文件可以使用类似冷备份的操作系统命令进行拷贝。在数据文件用操作系统命令拷贝后,应使用ALTER TABLESPACE …… END BACKUP
命令使表空间脱离热备份方式。
热备份没有必要备份联机日志,但必须是归档状态,在实例恢复的时候,可能需要用到归档日志。当前联机日志一定要保护好或是处于镜相状态,当前联机日志的损坏,对于数据库的损坏是巨大的,只能以数据的丢失来进行数据库的恢复工作。对于临时表空间,存放的是临时信息,在热备份是也可以考虑不用备份,如果临时文件发生故障,可以删除该数据文件与表空间,重建一个临时表空间。
热备份的优点:
- 可在表空间或数据文件级备份,备份时间短。
- 备份时数据库仍可使用。
- 可达到秒级恢复(恢复到某一时间点上)。
- 可对几乎所有数据库实体作恢复。
- 恢复是快速的,在大多数情况下在数据库仍工作时恢复。
场景: 数据库打开时的恢复以用户数据的表空间为例(热备)
step 1: 创建新的表空间(tab02)
123456789 SQL> create tablespace tab02 datafile '/home/oracle/app/oracle/oradata/mmpdb3/tab02.dbf' size 10M;Tablespace created.SQL> select FILE#, TS#, NAME from v$datafile;FILE# TS# NAME---------- ---------- ------------------------------------------------------------6 7 /home/oracle/app/oracle/oradata/mmpdb3/tab02.dbfstep 2: 创建新的表(t02),使用tab02表空间
1234567891011121314151617 SQL> create table t02(id number(10), name varchar(10)) tablespace tab02;Table created.SQL> insert into t02 values(1, 'test01');1 row created.SQL> commit;Commit complete.SQL> select * from t02;ID NAME---------- ---------------1 test01step 3: 热备份表空间(tab02)
1234567891011121314151617181920212223242526 SQL> alter tablespace tab02 begin backup;alter tablespace tab02 begin backup*ERROR at line 1:ORA-01123: cannot start online backup; media recovery not enabledSQL> archive log list;Database log mode No Archive ModeAutomatic archival DisabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 7Current log sequence 9SQL> startup mount;SQL> alter database archivelog;SQL> alter database open;SQL> alter tablespace tab02 begin backup;Tablespace altered.[root@hzvscmdb mmpdb3]# cp -a /home/oracle/app/oracle/oradata/mmpdb3/tab02.dbf /home/oracle/dbbak/hotSQL> alter tablespace tab02 end backup;Tablespace altered.step 4: 向表t02, 插入新的数据
1234567891011121314 SQL> insert into t02 values(2, 'test02');1 row created.SQL> commit;Commit complete.SQL> select * from t02;ID NAME---------- -----------------1 test012 test02step 4: 模拟删除表空间,并进行恢复
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 [root@hzvscmdb mmpdb3]# rm -rf tab02.dbfSQL> select * from t02;ID NAME---------- -----------------1 test012 test02SQL> alter database datafile 6 offline;Database altered.[root@hzvscmdb mmpdb3]# cp -a /home/oracle/dbbak/hot/tab02.dbf ./SQL> select * from t02;select * from t02*ERROR at line 1:ORA-00376: file 6 cannot be read at this timeORA-01110: data file 6: '/home/oracle/app/oracle/oradata/mmpdb3/tab02.dbf'SQL> recover datafile 6;Media recovery complete.SQL> select FILE#, TS#, NAME, status from v$datafile;FILE# TS# NAME STATUS---------- ---------- ------------------------------------------------------------ -------1 0 /home/oracle/app/oracle/oradata/mmpdb3/system01.dbf SYSTEM2 1 /home/oracle/app/oracle/oradata/mmpdb3/sysaux01.dbf ONLINE3 2 /home/oracle/app/oracle/oradata/mmpdb3/undotbs01.dbf ONLINE4 4 /home/oracle/app/oracle/oradata/mmpdb3/users01.dbf ONLINE5 6 /home/oracle/app/oracle/oradata/mmpdb3/tab01.dbf ONLINE6 7 /home/oracle/app/oracle/oradata/mmpdb3/tab02.dbf OFFLINESQL> alter database datafile 6 online;Database altered.SQL> select * from t02;ID NAME---------- -----------------1 test012 test02