一般而言,数据库如果需要不完全恢复,那么整个数据库都是要利用备份来前滚和回滚的(untill子句)。是造成数据损失的。
1.创建辅助数据库aux:
set ORACLE_SID=aux
新建一个目录,以存入辅助数据库aux
mkdir F:auxdb
(2)
(3) oradim –new –sid aux -USRPWD jos -INTPWD jos
查询获取再要恢复的时间后是否还有其他对象的生成,切记恢复侯这些数据是会丢失的。
SELECT owner, name, tablespace_name, to_char(creation_time, 'YYYY-MM-DD:HH24:MI:SS')
FROM sys.ts_pitr_objects_to_be_dropped
WHERE tablespace_name IN ('POOLDB_MEDIUM')
AND creation_time > to_date('2002-MAY-29:11:50:00','YYYY-MON-DD:HH24:MI:SS')
ORDER BY tablespace_name, creation_time(依据对象创建时间来查)
Determine the relationships between objects that overlap the recovery boundaries by querying
TS_PIRT_CHECK view, if it returns rows, solve the problem then proceed.
SELECT * FROM sys.ts_pitr_check WHERE (ts1_name IN ('TS1','TS2') AND ts2_name NOT IN ('TS1','TS2')) OR (ts1_name NOT IN
('TS1','TS2') AND ts2_name IN ('TS1','TS2'));
In this case, TS1=POOLDB_MEDIUM, and there is TS2. If the query returns rows, add the returned
Tablespace name to the in list till no row returns, then proceed to solve the problem before continue
2.加入监听设置和网络连接配置。
lisner文件中: (SID_DESC =
(GLOBAL_DBNAME = aux)
(ORACLE_HOME = F:auxdb)
(SID_NAME = aux)
)
tnsname文件中
aux =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rainny-eb128e61)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = aux)
)
)
4.复制一份initsid.ora参数文件和所有控制文件到aux存入的目录f:auxdb,重命名为initaux.ora,并修改内容,在此例中,目标数据是
rainny,RMAN CATALOG数据库是OEMREP,辅助数据库是aux.注意:
DB_NAME
和目标数据库相同,此例为rainny
LOCK_NAME_SPACE
如果是辅助数据库和目标数据库是同一台机器,则设值为:_目标数据库名,此例为:_rainny
DB_FILE_NAME_CONVERT
实际就是目标数据库和辅助数据的对应目录,如目标数据库数据文件目录为: D:oracle_homeoradatarainny,辅助数据库名录为: F:auxdb,则此
参数值可设为如下:
db_file_name_convert=("D:oracle_homeoradatarainny","F:auxdb")
LOG_FILE_NAME_CONVERT
同上
CONTROL_FILES
目标数据有多少个控制文件,这里也要设多少个,只不过目录改成辅助数据库的目录,文件相同.此例设值为:
control_files=("F:auxdbCONTROL01.CTL","F:auxdbCONTROL02.CTL",
"F:auxdbCONTROL03.CTL")
REMOTE_LOGIN_PASSWORDFILE
设成:EXCLUSIVE
COMPATIBLE
与目标数据库相同
DB_BLOCK_SIZE
与目标数据库相同
对主数据库的准备,包括将日志归档。对包含有待恢复的表空间的回滚段offline,对该表空间本身offline。同时生成控制文件的生成脚本
alter system backup controlfile TO TRACE,以便辅助数据库可以由此来重新对应数据文件的位置等。
5.在sqlplus中以nomount方式启辅助数据库实例
C:>SQLPLUS /NOLOG
SQL> CONN SYS/JOS@AUX AS SYSDBA;
Connected to an idle instance
SQL> startup nomount pfile='F:auxdbinitaux.ora';
ORACLE instance started.
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
6.在进行表空间时间点恢复之前,首先你要有想要恢复到那个时间点的数据库备份集,否则,无法进行时间点恢复.
7.连到rman
可以先由控制文件生成语句为辅助数据创建控制文件(nomount下)。
再start mount下recover database using backup controlfile until time ‘2002-08-13:17:12:00’;
alter database open resetlogs;
在open下exp 'sys/sys as sysdba' point_in_time_recover=y tablespaces=pooldb_medium
file=exptest.dmp’
( if you got ora-3217, then you are hit a bug which is fixed in 9I, work around: drop
temp tablespace)
把辅助库的文件置为脱机且拷贝该文件到主库目录。
以下步骤不知道对否。
C:>rman target sys/sys@rainny catalog catalog/catalog@oemrep auxiliary sys/jos@aux
RMAN> recover tablespace APP01 UNTIL TIME "TO_DATE('2006/12/22 12:00:00','YYYY/MM/DD HH24:MI:SS')";
Ok,现在就开始进行表空间的时间点恢复啦!
在主库上执行:
imp 'sys/sys as sysdba' point_in_time_recover=y tablespaces=pooldb_medium file=exptest.dmp
再将表空间置为online的即可。
不过,到了oracle10g,可不用这么麻烦了,我们会首先选择database flashback,将整个数据库rollback到某一个时间点,而不是表空间时间点恢复.
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/288166/viewspace-967585/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/288166/viewspace-967585/