使用物理备份恢复SYSTEM表空间(一)

2015-07-20 12:04:33 · 作者: · 浏览: 3

只要存在有效的备份,恢复SYSTEM表空间数据文件丢失故障是比较容易的。这里演示的是最基本的使用物理备份恢复SYSTEM表空间丢失的方法。


SQL>
?
SQL> select * from v$version;


BANNER


--------------------------------------------------------------------------------


Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production


PL/SQL Release 11.2.0.3.0 - Production


CORE 11.2.0.3.0 Production


TNS for Linux: Version 11.2.0.3.0 - Production


NLSRTL Version 11.2.0.3.0 - Production


SQL>


SQL> archive log list;


Database log mode No Archive Mode


Automatic archival Disabled


Archive destination /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch


Oldest online log sequence 6


Current log sequence 8


SQL>


2.打tar包,进行物理备份
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。
?我们使用tar命令将HOEGH数据库的物理文件打tar包,命名为HOEGH.tar.gz。注意,物理备份必须是在数据库关停阶段进行。


[oracle@hoegh oradata]$ tar -zcvf HOEGH.tar.gz HOEGH
?
HOEGH/


HOEGH/redo03.log


HOEGH/temp01.dbf


HOEGH/control01.ctl


HOEGH/control02.ctl


HOEGH/system01.dbf


HOEGH/sysaux01.dbf


HOEGH/users01.dbf


HOEGH/undotbs01.dbf


HOEGH/example01.dbf


HOEGH/redo02.log


HOEGH/redo01.log
?
3.启动数据库,删除system数据文件
下面,我们来模拟system数据文件丢失的故障场景。
?首先,启动数据库。


SQL> startup
?
ORACLE instance started.


Total System Global Area 941600768 bytes


Fixed Size 1348860 bytes


Variable Size 515902212 bytes


Database Buffers 419430400 bytes


Redo Buffers 4919296 bytes


Database mounted.


Database opened.


SQL>
接下来,删除system01.dbf数据文件。


[oracle@hoegh HOEGH]$ rm system01.dbf
?
[oracle@hoegh HOEGH]$
?
4.重启数据库报错ORA-01157和ORA-01110
删除数据文件后,我们重启数据库,数据库在尝试启动到open状态时,由于找不到system表空间的数据文件,报错。


SQL>
?
SQL> shu immediate


Database closed.


Database dismounted.


ORACLE instance shut down.


SQL>


SQL> startup


ORACLE instance started.


Total System Global Area 941600768 bytes


Fixed Size 1348860 bytes


Variable Size 515902212 bytes


Database Buffers 419430400 bytes


Redo Buffers 4919296 bytes


Database mounted.


ORA-01157: cannot identify/lock data file 1 - see DBWR trace file


ORA-01110: data file 1: \'/u01/app/oracle/oradata/HOEGH/system01.dbf\'


SQL>


SQL> select status from v$instance;


STATUS


------------


MOUNTED


SQL>
我们看到,这个时候数据库处于mount状态。查看报警日志文件,我们可以更清晰的看到整个过程。


[oracle@hoegh trace]$ pwd
?
/u01/app/oracle/diag/rdbms/HOEGH/HOEGH/trace


[oracle@hoegh trace]$


[oracle@hoegh trace]$ tailf alert_HOEGH.log


……


ALTER DATABASE MOUNT


Successful mount of redo thread 1, with mount id 2106090167


Database mounted in Exclusive Mode


Lost write protection disabled


Completed: ALTER DATABASE MOUNT


Sat Jul 11 09:01:47 2015


ALTER DATABASE OPEN


Errors in file /u01/app/oracle/diag/rdbms/HOEGH/HOEGH/trace/HOEGH_dbw0_6016.trc:


ORA-01157: cannot identify/lock data file 1 - see DBWR trace file


ORA-01110: data file 1: \'/u01/app/oracle/oradata/HOEGH/system01.dbf\'


ORA-27037: unable to obtain file status


Linux Error: 2: No such file or directory


Additional information: 3


Errors in file /u01/app/oracle/diag/rdbms/HOEGH/HOEGH/trace/HOEGH_ora_6135.trc:


ORA-01157: cannot identify/lock data file 1 - see DBWR trace file


ORA-01110: data file 1: \'/u01/app/oracle/oradata/HOEGH/system01.dbf\'


ORA-1157 signalled during: ALTER DATABASE OPEN...
?
5.恢复数据文件
我们需要把之前的数据备份恢复到数据库当中,因此,首先我们就要解tar包,恢复之前备份的数据文件;然后,将备份的system数据文件拷贝到HOEGH数据文件目录当中。


[oracle@hoegh oradata]$ mkdir -p back
?
[oracle@hoegh oradata]$


[oracle@hoegh oradata]$ tar -zxvf HOEGH