有个server每天进行BCV备份,再把BCV数据备份到磁带。
这里讲的是从磁带restore数据到测试机之后进行recovery的步骤。
※构成环境的说明
▶一般情况下,在利用BCV恢复DB的时候,使用的control file是snap shot control file(即进行Business Copy的时候直接拷贝过来的control file)。但是在数据量多的时候,进行Business Copy的control file之间会有时间差,因此为了以防万一,可以考虑现生成control file的方式进行DB恢复的方法。
▶BCV backup涉及到的file system有:datafile, online redolog, oracle home, archive directory, interf等NFS共享目录
1.BCV file system mount
用bdf命令确认file system是否被mount上。
2.检查用户信息以及环境文件
- Ora用户以及adm用户使用的shell为/usr/bin/csh。
-检查$ORACLE_HOME目录下的文件所属owner和group。
-检查sap相关目录下的文件所属owner和group。(这里可以省略)
-检查ora和adm下的环境文件,主要是修改文件名的hostname,.dbenv_.csh,.sapenv_.csh等。
-最后用env命令查看oracle、sap相关环境变量配置是否正确。
-修改listener.Log,tnsnames.Ora, protocol.ora中的hostname。
3. archive file restore
确认Business Copy时候begin backup到end backup的alertlog,并从磁带restore archive file到disk。
4.恢复并启动oracle
4-1.各Control file的版本(即control file之间无时间差)一致时的恢复,此时的恢复比较简单,只要有截止end backup的archive log全就可以直接进行恢复。
:ora 36> sqlplus internal
SQL> startup
ORACLE instance star.
Total System Global Area 1570585064 bytes
Fixed Size 104936 bytes
Variable Size 815497216 bytes
Database Buffers 734003200 bytes
Redo Buffers 20979712 bytes
Database moun.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/oracle//sapdata1/system_1/system.data1'
SQL> recover database [oracle自己适用刚好能open的archive logfile]
Media recovery complete.
SQL> alter database open;
Database altered.
4-2.Control file的版本不一致时的DB恢复
$ ora> sqlplus internal
SQL> startup nomount (snapshot controlfile )
出现control file版本不一致的错误,如下:
ex) ORA-00214: controlfile '/oracle//817_64/dbs/cntrl.dbf' version 14572430
inconsistent with file '/oracle//sapdata1/cntrl/cntrl.dbf' version 14572425
※解决方法:利用最新的control file进行恢复。出现这个错误的原因是由于数据量大,导致Business copy的时候备份的control file之间有版本差异。
SQL> recover database [nomount状态][auto recovery]
alter database open; [正常启动]
→不需要resetlogs option,
※如果在mount状态下不能自动进行recovery的时候用以下方法:
SQL> recover database until cancel;
→适用end backup之后的几个archive file [可以适用多个archive file]
SQL> alter database open resetlogs;
→ database open
4-3.现备份control file进行恢复
SQL> startup mount
SQL> alter database backup controlfile to trace;
SQL> @controlfile_backup.sql (利用backup controlfile )
SQL> recover database using backup controlfile until cancel;
→适用end backup之后的几个archive fileSQL> alter database open resetlogs;
→ database open
# trace file头部的version信息部分的内容不需要。
STARTUP NOMOUNTCREATE CONTROLFILE REUSE DATABASE "" NORESETLOGSARCHIVELOG
MAXLOGFILES 255
MAXLOGMEMBERS 3
MAXDATAFILES 800
MAXINSTANCES 50
MAXLOGHISTORY 36756LOGFILE
GROUP 1 (
'/oracle//origlogA/log_g1m1.dbf',
'/oracle//mirrlogA/log_g1m2.dbf'
) SIZE 350M,
...
# Recovery is required if any of the datafiles are restored backups,
# or if the last shutdown was not normal or immediate.
RECOVER DATABASE
# All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
# Database can now be opened normally.
ALTER DATABASE OPEN;
# No tempfile entries found to add.
#
5.确认DB是否正常
SQL> select count(*) from dba_users;
COUNT(*)
----------
28
SQL> select count(*) from dba_data_files;
COUNT(*)
----------
545
SQL> select count(*) from dba_data_files;
COUNT(*)
----------
255
SQL> select count(*) from dba_data_files where status NOT LIKE 'AVAILABLE';
COUNT(*)
----------
0
确认DB无问题。