手把手教你Oracle手工热备份

所谓热备就是数据库处于open状态并且运行在archive模式下。

如何设置数据库为archive模式,请看下面例子。
 

  1. SQL> shutdown immediate
     
  2. Database closed.
     
  3. Database dismounted.
     
  4. ORACLE instance shut down.
     
  5. SQL> startup mount
     
  6. ORACLE instance started.
     

  7.  
  8. Total System Global Area 236000356 bytes
     
  9. Fixed Size 451684 bytes
     
  10. Variable Size 201326592 bytes
     
  11. Database Buffers 33554432 bytes
     
  12. Redo Buffers 667648 bytes
     
  13. Database mounted.
     
  14. SQL> alter database archivelog;
     

  15.  
  16. Database altered.
     

  17.  
  18. SQL> alter system archive log start;
     

  19.  
  20. System altered.
     

  21.  
  22. SQL> alter database open;
     

  23.  
  24. Database altered.
     

  25.  
  26. SQL> archive log list
     
  27. Database log mode Archive Mode
     
  28. Automatic archival Enabled
     
  29. Archive destination /zwc/oracle/dbs/arch
     
  30. Oldest online log sequence 4
     
  31. Next log sequence to archive 6
     
  32. Current log sequence 6
     
  33. SQL>

简单的介绍下操作
1. 干净的关闭数据库。
2. 把数据库启动到mount状态,不打开数据库。
3. 设置数据库为归档模式。
4. 启动系统自动归档(Oracle10g以后的版本包括10g,设置为归档模式后系统会自动开启自动归档,也就是Automatic archival Enabled,我这里用的是9i版本)。
5. 打开数据库。
6. 查看当前归档信息。



执行以下的脚本就可以对你想备份的表空间进行copy了。
 

  1. SQL> alter tablespace tbs_zhong begin backup;
     

  2.  
  3. Tablespace altered.
     

  4.  
  5. SQL> alter tablespace tbs_zhong end backup;
     

  6.  
  7. Tablespace altered.


如果是noarchive模式执行上面命令会出现什么呢?
 

  1. SQL> alter database noarchivelog;
     

  2.  
  3. Database altered.
     

  4.  
  5. SQL> alter database open;
     

  6.  
  7. Database altered.
     

  8.  
  9. SQL> alter tablespace tbs_zhong begin backup;
     
  10. alter tablespace tbs_zhong begin backup
     
  11. *
     
  12. ERROR at line 1:
     
  13. ORA-01123: cannot start online backup; media recovery not enabled

看它报错了,意思是你无法在线备份。
我们还是把数据库设置为归档模式,命令就不演示了。

我们下面开始备份数据文件,和控制文件,redo log file是不要备份的,因为他一直在写入。

我的Oracle服务器是在Linux环境下,由于我们是学习环境,数据文件和控制文件可能不会很多,在这里我只新建了一个表空间。但是在测试环境或者生产环境下,表空间可能会很多,所以我们一个个的敲命令肯定是不现实的,所以在这里我写了一个脚本,大家看下。

图片
b1.jpg



代码脚本
 

  1. /*设置些头参数,生成的sql脚本没有分页,排版整齐,去掉左右空格,屏幕输出*/
     
  2. set feedback off pagesize 0 heading off verify off linesize 32767 trimspool on termout off serveroutput on
     
  3. remark 备份目录要先建立好,并赋给ORACLE用户所有,确保有足够的空间
     
  4. define dir='/backup'
     
  5. define fil='&dir/open_backup_commands.sql'
     
  6. define spo='&dir/open_backup_output.log'
     
  7. spool &fil
     
  8. prompt connect sys/go@zhong as sysdba;
     
  9. prompt alter system switch logfile;
     
  10. /*tablespace是read only和临时的不需要备份*/
     
  11. declare
     
  12. cursor cur_tablespace is
     
  13. select tablespace_name from dba_tablespaces where status <> 'READ ONLY' and contents <> 'TEMPORARY';
     
  14. cursor cur_datafile (tn varchar2) is
     
  15. select file_name from dba_data_files where tablespace_name=tn;
     
  16. begin
     
  17. for ct in cur_tablespace loop
     
  18. dbms_output.put_line('alter tablespace '||ct.tablespace_name||' begin backup;');
     
  19. for cd in cur_datafile (ct.tablespace_name) loop
     
  20. dbms_output.put_line('!cp '||cd.file_name||' &dir;');
     
  21. end loop;
     
  22. dbms_output.put_line('alter tablespace '||ct.tablespace_name||' end backup;');
     
  23. end loop;
     
  24. end;
     
  25. /
     
  26. prompt alter system switch logfile;
     
  27. prompt alter database backup controlfile to '&dir/open_backup.ctl' reuse;
     
  28. prompt alter database backup controlfile to trace;
     
  29. spool off;
     
  30. remark 写好脚本先别加@&fil执行,看看输出是否正确,确认无误在加上@&执行,控制文件的reuse表示如果目标文件存在则覆盖
     
  31. spool &spo
     
  32. @&fil
     
  33. spool off


我的脚本是放在$ORACLE_HOME目录下,所以以sys用户执行open_backup.sql这个文件就可以。
b2.jpg



下面我们开始执行这个脚本开始手工热备份。
b3.jpg



好,脚本执行结束,我们看下backup目录,有没有我们想要的东西。
b4.jpg



我们可以看到除了创建好数据库默认创建的表空间都备份过来了,还有控制文件backup.ctl,刚刚自己创建的数据文件tbs_zhong.dbf,以及open_backup_commands.sql脚本文件和open_backup_output.log日志文件。

我们看下它带我们生成的脚本文件。
b5.jpg



代码脚本
 

  1. SQL> prompt connect sys/go@zhong as sysdba;;
     
  2. connect sys/go@zhong as sysdba;
     
  3. SQL> prompt alter system switch logfile;;
     
  4. alter system switch logfile;
     
  5. SQL> declare
     
  6. 2 cursor cur_tablespace is
     
  7. 3 select tablespace_name from dba_tablespaces where status <> 'READ ONLY' and contents <> 'TEMPORARY';
     
  8. 4 cursor cur_datafile (tn varchar2) is
     
  9. 5 select file_name from dba_data_files where tablespace_name=tn;
     
  10. 6 begin
     
  11. 7 for ct in cur_tablespace loop
     
  12. 8 dbms_output.put_line('alter tablespace '||ct.tablespace_name||' begin backup;');
     
  13. 9 for cd in cur_datafile (ct.tablespace_name) loop
     
  14. 10 dbms_output.put_line('!cp '||cd.file_name||' &dir;');
     
  15. 11 end loop;
     
  16. 12 dbms_output.put_line('alter tablespace '||ct.tablespace_name||' end backup;');
     
  17. 13 end loop;
     
  18. 14 end;
     
  19. 15 /
     
  20. alter tablespace SYSTEM begin backup;
     
  21. !cp /zwc/oradata/zhong/system01.dbf /backup;
     
  22. alter tablespace SYSTEM end backup;
     
  23. alter tablespace UNDOTBS1 begin backup;
     
  24. !cp /zwc/oradata/zhong/undotbs01.dbf /backup;
     
  25. alter tablespace UNDOTBS1 end backup;
     
  26. alter tablespace CWMLITE begin backup;
     
  27. !cp /zwc/oradata/zhong/cwmlite01.dbf /backup;
     
  28. alter tablespace CWMLITE end backup;
     
  29. alter tablespace DRSYS begin backup;
     
  30. !cp /zwc/oradata/zhong/drsys01.dbf /backup;
     
  31. alter tablespace DRSYS end backup;
     
  32. alter tablespace EXAMPLE begin backup;
     
  33. !cp /zwc/oradata/zhong/example01.dbf /backup;
     
  34. alter tablespace EXAMPLE end backup;
     
  35. alter tablespace INDX begin backup;
     
  36. !cp /zwc/oradata/zhong/indx01.dbf /backup;
     
  37. alter tablespace INDX end backup;
     
  38. alter tablespace ODM begin backup;
     
  39. !cp /zwc/oradata/zhong/odm01.dbf /backup;
     
  40. alter tablespace ODM end backup;
     
  41. alter tablespace TOOLS begin backup;
     
  42. !cp /zwc/oradata/zhong/tools01.dbf /backup;
     
  43. alter tablespace TOOLS end backup;
     
  44. alter tablespace USERS begin backup;
     
  45. !cp /zwc/oradata/zhong/users01.dbf /backup;
     
  46. alter tablespace USERS end backup;
     
  47. alter tablespace XDB begin backup;
     
  48. !cp /zwc/oradata/zhong/xdb01.dbf /backup;
     
  49. alter tablespace XDB end backup;
     
  50. alter tablespace TBS_ZHONG begin backup;
     
  51. !cp /zwc/oradata/zhong/tbs_zhong.dbf /backup;
     
  52. alter tablespace TBS_ZHONG end backup;
     
  53. SQL> prompt alter system switch logfile;;
     
  54. alter system switch logfile;
     
  55. SQL> prompt alter database backup controlfile to '&dir/backup.ctl' reuse;;
     
  56. alter database backup controlfile to '/backup/backup.ctl' reuse;
     
  57. SQL> prompt alter database backup controlfile to trace;;
     
  58. alter database backup controlfile to trace;
     
  59. SQL> spool off;


至此 手工热备演示完毕。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

t115872285

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值