设为首页 收藏本站
查看: 621|回复: 0

[经验分享] Oracle只读表空间的备份与恢复

[复制链接]

尚未签到

发表于 2018-9-14 08:12:29 | 显示全部楼层 |阅读模式
  --======================
  -- 只读表空间的备份与恢复
  --======================
  一、只读表空间的特性
  使用只读表空间避免对静态数据的频繁备份
  当使用alter tablespace tbs read only时,数据文件会执行检查点进程(将所有脏缓冲区的内容写至磁盘),
  当前的SCN号会被标注,同时存储了SCN的数据文件头部被冻结.控制文件内也会记录该数据文件的冻结信息。
  可以清除只读表空间的对象
  二、只读表空间的备份
  一般情况下,只读表空间只需要进行一次备份,即当表空间状态发生改变时应立即进行备份
  可以使用OS系统cp命令来备份或RMAN进行备份只读表空间
  使用RMAN时建议启用备份优化选项
  RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
  只读表空间不支持热备

  SQL>>
  >  *
  ERROR at line 1:
  ORA-01642: begin backup not needed for read only tablespace 'TBS1'
  三、只读表空间的还原与恢复
  还原与恢复只读表空间的问题在于控制文件如何控制只读表空间,分为下列三种情况:
  --------- --------------- ---------------- -------------------------------------
  case      backup 1   crash status          recovery
  --------- --------------- ---------------- -------------------------------------
  case 1    Read-Only    Read-Only   将备份的只读表空间复制到目的地(Restore)
  case 2    Read-Only    Read-Write   先Restore backup1,后recover(applied log )
  case 3    Read-Write    Read-only    先Restore backup1,后recover(applied log )
  只读表空间恢复时需要考虑的问题
  重建一个控制文件时
  重命名数据文件时
  使用一个备份的控制文件时
  下面对表空间tbs1置为只读后对比前后生成的重建控制文件的脚本

  SQL>>
  SQL>>
  SQL>>  SQL> ho diff /tmp/rectl1.sql /tmp/rectl2.sql
  69,70c69
  <  '/u01/app/oracle/oradata/orcl/example01.dbf',
  <  '/u01/app/oracle/oradata/orcl/tbs01.dbf'
  ---
  >  '/u01/app/oracle/oradata/orcl/example01.dbf'
  97a97,102
  > -- Files in read-only tablespaces are now named.

  >>  >  TO '/u01/app/oracle/oradata/orcl/tbs01.dbf';
  >
  > -- Online the files in read-only tablespaces.

  >>  对比两者
  1.使用create controlfile命令时,datafile中未列出只读表空间的数据文件
  2.成功创建控制文件并打开后,使用alter database rename file命令重命名只读表空间的数据文件
  3.使用alter tablespace readonly_tablespacename online 将只读表空间联机
  四、演示只读表空间变化的恢复过程
  1. 演示整个过程为只读表空间的情况(对应前面描述的case 1)
  SQL> create table scott.tb1 tablespace tbs1
  2 as select * from scott.emp;
  SQL> commit;

  SQL>>  SQL> select file#,name,enabled from v$datafile where file#=6;
  FILE# NAME                     ENABLED
  ---------- --------------------------------------------- ----------
  6 /u01/app/oracle/oradata/orcl/tbs01.dbf    READ ONLY
  SQL> ho cp /u01/app/oracle/oradata/orcl/tbs01.dbf /tmp/tbs01.dbf
  SQL> insert into scott.tb1(empno,ename) values(3333,'Thomas');
  SQL> update scott.tb1 set sal=sal*1.2 where ename='SCOTT';
  SQL> delete from scott.tb1 where ename='SCOTT';
  --执行上述三条命令,收到下列同样的错误提示
  ORA-00372: file 6 cannot be modified at this time
  ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'
  从上面的演示可以看出对只读表空间内的数据作任何DML操作均不可用
  在 Oracle 表空间与数据文件  一文中,可以对只读表空间作delete操作(版本是10.2.0.1.0),应该是数
  据库补丁的问题,  此版本为10.2.0.4.0。
  --使用vim 打开?/oradata/orcl/tbs01.dbf文件做任意操作来模拟破坏该只读表空间的数据文件
  --重启数据库后收到下面的错误提示

  ORA-01157: cannot>  ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'
  SQL> ho cp /tmp/tbs01.dbf /u01/app/oracle/oradata/orcl/tbs01.dbf

  SQL>>  SQL> select count(1) from scott.tb1;
  COUNT(1)
  ----------
  16
  2. 演示由只读变为读写后发生损坏且只有只读备份的恢复情况(对应前面描述的case 2)

  SQL>>  SQL> insert into scott.tb1(empno,ename) values(3333,'Thomas');
  SQL> commit;
  --使用vim 打开/u01/app/oracle/oradata/orcl/tbs01.dbf文件做任意操作来模拟破坏该读写表空间的数据文件
  --重启数据库后未收到错误提示
  SQL> insert into scott.tb1(empno,ename) values(4444,'Jackson');
  insert into scott.tb1(empno,ename) values(4444,'Jackson')
  *
  ERROR at line 1:
  ORA-00376: file 6 cannot be read at this time
  ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'
  SQL> select * from v$recover_file;
  FILE# ONLINE ONLINE_ ERROR        CHANGE# TIME
  ---------- ------- ------- ---------------- ---------- ---------
  6 OFFLINE OFFLINE FILE NOT FOUND      0
  SQL> ho cp /tmp/tbs01.dbf /u01/app/oracle/oradata/orcl/tbs01.dbf
  SQL> recover datafile 6;
  Media recovery complete.

  SQL>>
  Tablespace>  SQL> select * from scott.tb1 where ename='Thomas';
  EMPNO ENAME   JOB       MGR HIREDATE     SAL    COMM   DEPTNO
  ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
  3333 Thomas
  3. 演示由读写表空间变为只读表空间,且仅有读写表空间备份的恢复(对应前面描述的case 3)
  SQL> select file#,name,enabled from v$datafile where file#=6;
  FILE# NAME                     ENABLED
  ---------- --------------------------------------------- ----------
  6 /u01/app/oracle/oradata/orcl/tbs01.dbf    READ WRITE

  SQL>>  SQL> ho cp /u01/app/oracle/oradata/orcl/tbs01.dbf /tmp/tbs01.dbf

  SQL>>  SQL> delete from scott.tb1 where empno=3333;
  SQL> commit;

  SQL>>  --使用vim 打开?/oradata/orcl/tbs01.dbf文件做任意操作来模拟破坏该只读表空间的数据文件
  --重启数据库后收到下面的错误提示

  ORA-01157: cannot>  ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'
  SQL> ho cp /tmp/tbs01.dbf /u01/app/oracle/oradata/orcl/tbs01.dbf
  SQL> recover datafile 6;

  SQL>>  SQL> select * from scott.tb1 where ename='Thomas';
  ,;
  no rows selected
  4. 演示数据文件状态发生多次变化且在变化时没有任何备份的恢复处理(实际上使用日志来重新构造该数据文件)
  SQL> select file#,name,enabled from v$datafile where file#=6;
  FILE# NAME                     ENABLED
  ---------- --------------------------------------------- ----------
  6 /u01/app/oracle/oradata/orcl/tbs01.dbf    READ WRITE
  SQL> drop table scott.tb1;
  SQL> commit;

  SQL>>
  SQL>>  SQL> create table scott.tb2 tablespace tbs1 as select * from scott.emp;
  SQL> commit;

  SQL>>  [oracle@oradb orcl]$tail -n 50 $ORACLE_BASE/admin/orcl/bdump/alert_orcl.log
  Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_ckpt_4064.trc:
  ORA-01171: datafile 6 going offline due to error advancing checkpoint
  ORA-01122: database file 6 failed verification check
  ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'
  ORA-01251: Unknown File Header Version read for file number 6
  SQL> select * from v$recover_file;
  FILE# ONLINE ONLINE_ ERROR       CHANGE# TIME
  ---------- ------- ------- --------------- ---------- ---------
  6 OFFLINE OFFLINE FILE NOT FOUND      0
  SQL> select file#,name,status from v$datafile where file#=6;
  FILE# NAME                     STATUS
  ---------- --------------------------------------------- -------
  6 /u01/app/oracle/oradata/orcl/tbs01.dbf    RECOVER

  SQL>>  SQL> recover datafile 6;
  Media recovery complete.

  SQL>>  SQL> select count(1) from scott.tb2;
  COUNT(1)
  ----------
  16
  5. 演示删除只读表空间上的对象
  SQL> select file#,name,enabled from v$datafile where file#=6;
  FILE# NAME                     ENABLED
  ---------- --------------------------------------------- ----------
  6 /u01/app/oracle/oradata/orcl/tbs01.dbf    READ ONLY
  SQL> select segment_name,segment_type,tablespace_name,owner from dba_segments where
  2 tablespace_name='TBS1' and segment_name='TB2';
  SEGMENT_NAME     SEGMENT_TYPE    TABLESPACE_NAME        OWNER
  -------------------- ------------------ ------------------------------ ----------
  TB2         TABLE       TBS1              SCOTT
  SQL> drop table scott.tb2;
  Table dropped.
  五、总结
  1. 表空间置为只读后将减少数据的备份量
  2. 表空间置为只读后,不能对其中的对象执行任何DML操作
  3. 只读表空间内的对象可以被清除,因为drop命令更新了数据字典,而不更新对象本身
  4. 当表空间的状态发生变化时,应立即备份该表空间,以减少恢复工作
  5. 对于状态多次发生改变且未及时备份的情况,日志未损坏时,可以使用联机重做、归档日志来进行恢复
  使用下列命令来实现:
  删除受损的数据文件(rm dbfile.dbf)
  重建受损的数据文件(alter database create datafile n)
  进行介质恢复(recover datafile n)
  使受损的数据文件联机(alter database datafile n online)
  6. 演示中多为在mount状态下来恢复,生产环境中多在open状态下恢复,可以按下列步骤实现
  先将受损的只读表空间(数据文件)脱机(offline)
  使用备份的表空间(数据文件)来还原(restore)
  使用归档、联机日志进行介质恢复(recover)
  使恢复成功的表空间(数据文件)联机(online)
  7. 对于原始介质受损,不能恢复到原始位置的情况下,使用下面的命令实现转移

  >  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-581603-1-1.html 上篇帖子: oracle linux下载 下篇帖子: Oracle 基于用户管理恢复的处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表