Backup && recover read only tablespace

 

1.alter tablesacpe  read only

    SQL> alter tablespace test1 read only;
   
    Tablespace altered.
   
    SQL> alter tablespace test2 read only;
   
    Tablespace altered.
   
    SQL> commit;
   
    Commit complete.
   

check read only tablespace: 

 
 

 2.backup read only tablespace (exclude tablespace);

     backup tablespace test1 format='/u02/rmback/data/%N_%f_%s.dbf';
   
     backup tablespace test2  format='/u02/rmback/data/%N_%f_%s.dbf';
   
   
     linux cp datafile :   
   


3.configure rman   
   rman target /
  
   CONFIGURE EXCLUDE FOR TABLESPACE 'TEST1';
   CONFIGURE EXCLUDE FOR TABLESPACE 'TEST2';
  

4.rman backup  level 0;    
   nohup  /u02/rmback/scripts/rmback_level0.sh  &

 

5. delete database

 

6.restore and recover database

     RMAN> restore database; 
    
     RMAN> recover database;
    
                                          
     RMAN> restore database check readonly;
    
    
     SQL> alter database datafile '/u02/oradata/hanmi/test1.dbf' offline;
                                                                        
     Database altered.                                                  
                                                                   
     SQL> alter database datafile 8 offline   
    
    SQL> alter database open resetlogs;    

7.restore and recover read only tablespace
     cp test1.dbf  /u02/oradata/hanmi/   
     cp test2.dbf  /u02/oradata/hanmi/ 
    
     select a.name,b.name,b.status from v$tablespace a,v$datafile b where a.ts#=b.ts# and a.name like '%TEST%';
    
     SQL> shutdown immediate;
     SQL> startup mount;
     SQL> alter database datafile 6  online;
     SQL> alter database datafile 8 online;
     SQL> alter database open;   
    
    
 8.restore and recover read only tablespace (method 2)
 
   SQL> shutdown immediate;
  SQL> startup mount;

  RMAN> restore tablespace test1;
  RMAN> restore tablespace test2; 
  SQL> alter database open; 
                                                 

check:
     SQL> select a.name,b.name,b.status from v$tablespace a,v$datafile b where a.ts#=b.ts# and a.name like '%TEST%';
    
     SQL> select tablespace_name ,status from dba_tablespaces;
    
     SQL> select name,checkpoint_change# from v$datafile_header;  

 

在使用只读表空间时,有几点需要注意:

1. 如果有事物在用户发出'alter tablespace xxx read only'前开始,且没有提交,不管这些事物是否与这个表空间有关,'alter xxx read only'会被阻塞直到那些事物提交或回滚。
--可以用以SQL找出阻塞read only的会话,必要时可kill这些会话。
SELECT S.SID, S.SERIAL#
FROM (SELECT SES_ADDR, START_SCNB, S.SADDR, MIN(START_SCNB) KEEP(DENSE_RANK FIRST ORDER BY DECODE(SADDR, NULL, 2, 1), START_SCNB) OVER() MIN_SCN
FROM V$TRANSACTION T,
(SELECT S.SADDR
FROM V$SQLAREA SQ, V$SESSION S
WHERE SQ.SQL_ID = S.SQL_ID
AND LOWER(SQL_TEXT) LIKE 'alter tablespace%') S
WHERE T.SES_ADDR = S.SADDR(+)) B, V$SESSION S
WHERE B.SADDR IS NULL
AND START_SCNB < MIN_SCN
AND B.SES_ADDR = S.SADDR;
上述SQL原理很简单,就是找出'alter tablespace read only'的SCN,并找出活动事物中,开始SCN比该SCN还要小的会话。

2. 只读表空间只需备份一次,日常数据库备份可通过skip readonly选项来跳过对只读表空间的备份。
3. 在做全库恢复时(restore database),默认是不恢复只读表空间的;如果需要restore 只读表空间,可用restore tablespace命令实现。
4. 一个好的习惯是,无论何时把表空间设为只读,要立刻备份该表空间。
5. 如果需要对只读表空间设置成read write模式,再修改数据,重新置为read only后要立刻备份该表空间,以免因为疏忽导致原来只读表空间因为时间过长,缺少归档日志而无法恢复。
6. 如果表(如分区表)的一部分数据在只读表空间中,一部分不在只读表空间中,只有在只读表空间的数据不能被修改,其余数据可以正常修改。


reference:
   http://blog.itpub.net/post/12157/509405
   http://xsb.itpub.net/post/419/456614

 

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

转载于:http://blog.itpub.net/7583803/viewspace-717958/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值