• 博客访问: 589833
  • 博文数量: 162
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-18 10:40
个人简介

暂无介绍

文章存档

2018年(3)

2017年(3)

2013年(3)

2012年(13)

2011年(84)

2010年(56)

我的朋友

分类: Linux操作系统

2010-12-20 14:20:59

一、Oracle  冷备份通常步骤:
今天看到一个非常好冷备份的博文,一目了然:http://space.itpub.net/12778571/viewspace-166613

1  正常关闭数据库
2  备份所有重要的文件到备份目录(数据文件、控制文件、重做日志文件等)
3  完成备份后启动数据库
  用冷备份进行恢复时,只需要将所有文件恢复到原有位置,就可以启动数据库了 。

1  进入数据库#sqlplus "/as sysdba"
2  如果没有启动则要启动:SQL>startup
3  查询数据文件datafile的所在目录:
SQL>SELECT name FROM v$datafile;
     查询控制文件controlfile的所在目录:
 SQL>SELECT name FROM v$controlfile;
     查询重做日志文件的所在目录:
  SQL>SELECT member FROM v$logfile;
4  关闭数据库
   SQL>shutdown
5  备份文件到备份的目录
    #cp /u01/app/oracle/oradata/orcl/*.dbf  /home/mzl/BackupDatabase
    #cp /u01/app/oracle/oradata/orcl/*.ctl  /home/mzl/BackupDatabase
    #cp /u01/app/oracle/oradata/orcl/*.log  /home/mzl/BackupDatabase
6  然后启动数据库
   #sqlplus "/as sysdba"
   SQL>startup

二、oracle冷备份下的不完全恢复

完全恢复:基于三种情况
  一 冷备份.
     建立表空间test,用户test,表名test 插入数据
  insert into test.test(a,b) values(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate,'yyyy-mm-dd hh24:mi’));
  commit;
  alter system  archive log  current;
  进行了两个事务(commit)和日志切换
  commit;
  alter system  archive log  current;日志切换同时归档
  
  select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  1  984675  983549  984675 初始备份时的scn
  此时进行冷备份
  执行shutdown immediate
  拷贝所有的数据文件,控制文件,在线日志文件,归档日志文件,如果需要,spfile,密码文件
  最好多拷贝几份,以便反复测试使用。
  二、添加数据文件
  startup
  打开数据库
  删除test.test 表中的所有数据
  然后插入数据
  insert into test.test(a,b) values(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate,'yyyy-mm-dd hh24:mi’));
  commit;
  alter system  archive log  current;
  进行了两个事务(commit)和日志切换
  commit;
  前14条每两个进行一个commit,同时alter system  archive log  current;
  后面的
  每一个进行commit;
  alter system  archive log  current;
  select * from test.test
    产生scn的历史记录是
  select * from V$log_History
    21  21  577298563  1  21  988328  2005-12-17 16:42:08  988445
  此时
  select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  1  987945  987670  987945
  shutdown immediate ;
  再次完全冷备份当前的数据文件、控制文件、日志文件,归档日志文件(没有归档日志文件恢复就成了空话)(当不完全恢复不成功或反复使用时使用,这点很重要,在实际你的生产运行数据库恢复时也是要这样。)


  
恢复:三种方法
  基于时间
  (alter database ) recover database (automatic) until time ‘2005-12-16 11:09:01’;
  (alter database ) recover database (automatic) until time ‘2005-12-16 11:09:01’ using backup controlfile;
  
  基于变更
  (alter database ) recover database   until change 985822;
  (alter database ) recover database   until change 985822using backup controlfile;
  
  基于撤销
   (alter database ) recover database until cancel ;
  (alter database ) recover database until cancel until change 985822using backup controlfile;
  这里的是否使用控制文件,取决于原有的控制文件是否损坏,和控制文件发生了变化(比如删除了表空间的操作,而,删除数据和表的操作时不会影响到控制文件的变化)
  
  A、  基于时间恢复(不使用备份的控制文件)
  shutdown immediate
  使用原来备份的数据文件,控制文件使用最新的,而不是备份的数据文件;
  SQL> shutdown immediate
  数据库已经关闭。
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> startup mount
  ORACLE 例程已经启动。
  
    数据库装载完毕。
  SQL> recover database until time  '2005-12-17 16:30:07' ;
  ORA-00279: 更改 984674 (在 12/17/2005 16:14:05 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00003.001
  ORA-00280: 更改 984674 对于线程 1 是按序列 # 3 进行的
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  auto
  ORA-00279: 更改 985596 (在 12/17/2005 16:28:34 生成) 对于线程 1 是必需的
    
  
  已应用的日志。
  完成介质恢复。
  SQL> alter database open resetlogs;
  
  数据库已更改。
  ------------------------------
  到此恢复成功
  因为使用的是介质恢复(不完全恢复)
  故一定要使用resetlogs,重置日志序列号,和将日志scn归零,当再次添加数据或引起scn变化的时候 archive_change#将得到和其他连个相近(?)的数字
  可以查询一下
  
  
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
              985935               0              985997
  
  
  SQL> select * from test.test;
  
  A                    B
  -------------------- --------------------
    
  已选择6行。
  查询第六行的时间和log_history的记录发现是scn=985822
  故恢复的时候如果直接恢复到第六条数据,就可使用scn=985822

  b  
基于时间恢复(使用备份的控制文件)
  拷贝第一次冷备份的所有的数据文件,控制文件
  SQL> shutdown immediate
  ORA-01109: 数据库未打开
  
  
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> startup mount
  ORACLE 例程已经启动。
  
   数据库装载完毕。
  SQL>  recover database until time  '2005-12-17 16:30:07'  using backup controlfile;
  ORA-00279: 更改 984674 (在 12/17/2005 16:14:05 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00003.001
  ORA-00280: 更改 984674 对于线程 1 是按序列 # 3 进行的
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  auto
    
  已应用的日志。
  完成介质恢复。
  SQL> alter database open resetlogs;
  
  数据库已更改。
  
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
              985935               0              985997
  
  SQL> select * from test.test;
  
  A                    B
  -------------------- --------------------
    
  已选择6行。
  
  SQL>
  
  
  
  
  
  
   B、a 基于变更的恢复(不包含备份的控制文件)
  SQL> recover database  until change 985822;
  ORA-00905: 缺少关键字
  
  
  SQL> recover database  until change 985822;
  ORA-00279: 更改 984674 (在 12/17/2005 16:14:05 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00003.001
  ORA-00280: 更改 984674 对于线程 1 是按序列 # 3 进行的
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  auto
    
  
  已应用的日志。
  完成介质恢复。
  SQL> alter database open resetlogs;
  
  数据库已更改。
  
  SQL> select * from test.test;
  
  A                    B
  -------------------- --------------------
   
  已选择6行。
  
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
  985824               0              985886

  B、b 基于变更的恢复(包含备份的控制文件)

  SQL> shutdown immediate
  数据库已经关闭。
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> startup mount
  ORACLE 例程已经启动。
  
   数据库装载完毕。
  SQL> recover database automic until change 985822 using backup controlfile;
  ORA-00905: 缺少关键字
  #说明这里的automic 是不能使用的
  
  
  SQL> recover database until  change 985822 using backup controlfile;
  ORA-00279: 更改 984674 (在 12/17/2005 16:14:05 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00003.001
  ORA-00280: 更改 984674 对于线程 1 是按序列 # 3 进行的
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  auto
   
  已应用的日志。
  完成介质恢复。
  SQL> alter database open resetlogs;
  
  数据库已更改。
  
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
              985824               0              985885
  
  SQL> select * from test.test;
  
  A                    B
  -------------------- --------------------
    
  已选择6行。
  
  SQL>
  SQL> shutdown immediate
  数据库已经关闭。
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> startup
  ORACLE 例程已经启动。
  
    数据库装载完毕。
  数据库已经打开。
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
              987124               0              987124
  
  SQL
  这里关闭后重启发现 CHECKPOINT_CHANGE和controlfile_change# from v$database
  数字变了,而ARCHIVE_CHANGE#依然是0,说明什么问题呢???
  如果添加数据后
  SQL> insert into test.test(a,b) values(to_char(sysdate,'YYYY-MM-DD hh24:mi:ss'),to_char(sysdate,'YYYY-MM-DD hh24:mi
  :ss'));
  
  已创建 1 行。
  
  SQL> commit;
  
  提交完成。
  
  SQL> alter system archive log current;
  
  系统已更改。
  
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
  987124          987744              987747
  添加数据后发现archive 和控制文件的scn一致,但check_point 的scn没变
  下面的事件
  
  SQL> shutdown immediate
  数据库已经关闭。
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> startup
  ORACLE 例程已经启动。
  
   数据库装载完毕。
  数据库已经打开。
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
              987906          987744              987906
  
  SQL>
  发现CHECKPOINT_CHANGE# 和CONTROLFILE_CHANGE#序号始终一致,而日志scn
  值得思考????????

  C a基于取消(不包含备份的控制文件)

  SQL> shutdown immediate
  数据库已经关闭。
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> startup mount
  ORACLE 例程已经启动。
  
   数据库装载完毕。
  SQL> recover database until cancel;
  ORA-00279: 更改 984674 (在 12/17/2005 16:14:05 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00003.001
  ORA-00280: 更改 984674 对于线程 1 是按序列 # 3 进行的
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  
  ORA-00279: 更改 985596 (在 12/17/2005 16:28:34 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00004.001
  ORA-00280: 更改 985596 对于线程 1 是按序列 # 4 进行的
  ORA-00278: 此恢复不再需要日志文件 'D:\ORACLE\ORACLE92\RDBMS\ARC00003.001'
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  
  ORA-00279: 更改 985702 (在 12/17/2005 16:29:20 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00005.001
  ORA-00280: 更改 985702 对于线程 1 是按序列 # 5 进行的
  ORA-00278: 此恢复不再需要日志文件 'D:\ORACLE\ORACLE92\RDBMS\ARC00004.001'
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  
  ORA-00279: 更改 985822 (在 12/17/2005 16:29:54 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00006.001
  ORA-00280: 更改 985822 对于线程 1 是按序列 # 6 进行的
  ORA-00278: 此恢复不再需要日志文件 'D:\ORACLE\ORACLE92\RDBMS\ARC00005.001'
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  cancel
  介质恢复已取消。
  SQL> alter database open resetlogs;
  
  数据库已更改。
  
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
              985824               0              985886
  
  SQL> select * from test.test;
  
  A                    B
  -------------------- --------------------
  2005-12-17 16:29:14  2005-12-17 16:29:14
  2005-12-17 16:28:26  2005-12-17 16:28:26
  2005-12-17 16:28:27  2005-12-17 16:28:27
  2005-12-17 16:29:12  2005-12-17 16:29:12
  2005-12-17 16:29:49  2005-12-17 16:29:49
  2005-12-17 16:29:49  2005-12-17 16:29:49
  
  已选择6行。
  
  SQL>

  C b基于取消(包含备份的控制文件)

  SQL> shutdown immediate
  数据库已经关闭。
  已经卸载数据库。
  ORACLE 例程已经关闭。
  SQL> recover database until cancel using backup controlfile;
  ORA-01034: ORACLE not available
  
  
  SQL> startup mount
  ORACLE 例程已经启动。
  
  Total System Global Area  135338868 bytes
  Fixed Size                   453492 bytes
  Variable Size             109051904 bytes
  Database Buffers           25165824 bytes
  Redo Buffers                 667648 bytes
  数据库装载完毕。
  SQL> recover database until cancel using backup controlfile;
  ORA-00279: 更改 984674 (在 12/17/2005 16:14:05 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00003.001
  ORA-00280: 更改 984674 对于线程 1 是按序列 # 3 进行的
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  
  ORA-00279: 更改 985596 (在 12/17/2005 16:28:34 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00004.001
  ORA-00280: 更改 985596 对于线程 1 是按序列 # 4 进行的
  ORA-00278: 此恢复不再需要日志文件 'D:\ORACLE\ORACLE92\RDBMS\ARC00003.001'
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  
  ORA-00279: 更改 985702 (在 12/17/2005 16:29:20 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00005.001
  ORA-00280: 更改 985702 对于线程 1 是按序列 # 5 进行的
  ORA-00278: 此恢复不再需要日志文件 'D:\ORACLE\ORACLE92\RDBMS\ARC00004.001'
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  
  ORA-00279: 更改 985822 (在 12/17/2005 16:29:54 生成) 对于线程 1 是必需的
  ORA-00289: 建议: D:\ORACLE\ORACLE92\RDBMS\ARC00006.001
  ORA-00280: 更改 985822 对于线程 1 是按序列 # 6 进行的
  ORA-00278: 此恢复不再需要日志文件 'D:\ORACLE\ORACLE92\RDBMS\ARC00005.001'
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  cancle
  ORA-00308: 无法打开存档日志 'cancle'
  ORA-27041: 无法打开文件
  OSD-04002: 无法打开文件
  O/S-Error: (OS 2) 系统找不到指定的文件。
  
  
  指定日志: {=suggested | filename | AUTO | CANCEL}
  cancel
  介质恢复已取消。
  SQL> alter database open resetlogs;
  
  数据库已更改。
  
  SQL> select checkpoint_change#,archive_change# ,controlfile_change# from v$database;
  
  CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROLFILE_CHANGE#
  ------------------ --------------- -------------------
              985824               0              985886
  
  SQL> select * from test.test;
  
  A                    B
  -------------------- --------------------
  2005-12-17 16:29:14  2005-12-17 16:29:14
  2005-12-17 16:28:26  2005-12-17 16:28:26
  2005-12-17 16:28:27  2005-12-17 16:28:27
  2005-12-17 16:29:12  2005-12-17 16:29:12
  2005-12-17 16:29:49  2005-12-17 16:29:49
  2005-12-17 16:29:49  2005-12-17 16:29:49
  
  已选择6行。
  
  SQL>
阅读(1805) | 评论(0) | 转发(0) |
0

上一篇:Linux 下添加多网段方法

下一篇:ssh scp命令

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册