ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 对部分表空间作不完全恢复

对部分表空间作不完全恢复

原创 Linux操作系统 作者:sunchao 时间:2019-04-05 08:39:06 0 删除 编辑
引自http://www.itpub.net/378982.html
前两天因为程序的bug,有个服务人员把客户的资料给删了,3天后才知道。然后他们领导找到我,让我搞定。
整个库有170g,他们提供了一个机器只有50g的空间,做全库的不完全恢复是不可能了。后来大师在metalink上找到了这么一个方法,
可以只恢复被删除记录的表所在的表空间,偶搞了一把,比TSPITR 好用多了。
http://metalink.oracle.com/metalink...T&p_id=223543.1

在恢复用的机器上配置好与源数据库相同的目录,环境变量设好ORACLE_SID和ORACLE_HOME。
拷贝主库的control file过来,将存储rman备份的nsf直接mount过来,也使用相同的目录,这样方便restore。

run
{
--强制所有的数据文件offline,只是为了安全的目的。
sql "alter database mount clone database";

--为需要恢复的数据文件指定新的路径,也是安全考虑,防止在主库上恢复的时候,覆盖主库文件。
--因为这里是在另外一个库上作恢复,所以可以设成和主库一样。
--注意,undo和system是必须要恢复的,呵呵
set newname for datafile 2 to '/disk2/oradata/crmtemp/undotbs01.dbf';
set newname for datafile 69 to '/disk2/oradata/crmtemp/undotbs03.dbf';
set newname for datafile 79 to '/disk4/oradata/crmtemp/undotbs04.dbf';
set newname for datafile 93 to '/data2/oradata/crmtemp/undotbs05.dbf';
set newname for datafile 1 to '/disk1/oradata/crmtemp/system01.dbf';
set newname for datafile 45 to '/disk1/oradata/crmtemp/appdata01.dbf';
set newname for datafile 46 to '/disk1/oradata/crmtemp/appdata02.dbf';

--restore 表空间
restore tablespace system,UNDOTBS1,APPDATA1M;

--其他的数据文件offline drop
sql "alter database datafile 3,4,5,6,7,8,13,14,15,16,18,19,20,23,25,26,27,28,29,30,31,33,35,36,60,61,62,38,39,40,41,42,43,44,47,48 offline drop";

--将newname的变化应用的controlfile
switch datafile all;

--把需要恢复的数据文件online
sql "alter database datafile 2, 69, 79, 93, 1, 45, 46 online";

--不完全恢复,关键就是这里使用了skip tablespace,把不需要恢复的ts跳过
recover database until TIME "TO_DATE('2005-6-7 15:00:00', 'yyyy-mm-dd hh24:mi:ss')"
skip tablespace TEMP,
INDX,
TOOLS,
ADMIN_DATA1M,
TPCRM,
...;
}


恢复完后,需要重建controlfile,因为目前的controlfile是clone状态的,需要
alter database backup controlfile to trace;
然后提取创建脚本。因为没有online redo,所以使用resetlog的那种方式。

创建完毕后:
alter database open resetlogs;

数据库打开,马上把需要的表exp出来:
exp userid=zeus/zeus file=/home/oracle/xiaojinyu.dmp tables=(CS_COL_CONTENT,CS_COLUMNS,SAMPLE) rows=Y

然后imp到开发库上,交给应用处理。


另外,大家有时间可以测试一下,能否直接在sqlplus 里面直接作
recover database until TIME "TO_DATE('2005-6-7 15:00:00', 'yyyy-mm-dd hh24:mi:ss')"
skip tablespace TEMP.....;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/39335/viewspace-351723/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: decode 的用法
请登录后发表评论 登录
全部评论

注册时间:2003-03-08

  • 博文量
    790
  • 访问量
    628556