oracle热备恢复总结

数据库热备份与完整恢复实验:
1。需要保证数据库在归档模式下。
2。热备份数据文件,通过alter tablespace xxx begin backup把表空间设为备份状态,  可以手工或在sql下运行host copy把数据
文件复制到指定地方,最后把表空间改为正常状态(alter tablepace xxx end backup)。
3。 数据库恢复:使用语句rcover datafile,alter database open可以实现数据库的完整恢复
热备份可以非常精确的备份表空间级和用户级的数据,由于它是根据归档日志的时间轴来备份恢复的,理论上可以恢复到前一个操作,
甚至就是前一秒的操作。具体步骤如下:
注意:当数据库处在ARCHIVE模式下时,一定要保证指定的归档路径可写,否则数据库就会挂起,直到能够归档所有归档信息后才可以使
用。另外,为创建一个有效的备份,当数据库在创建时,必须履行一个全数据库的冷备份,就是说数据库需要运行在归档方式,然后正常关
闭数据库,备份所有的数据库组成文件。这一备份是整个备份的基础,因为该备份提供了一个所有数据库文件的拷贝。(体现了冷备份与
热备份的合作关系,以及强大的能力)
详细步骤如下:
1,通过SQL>archive log list 查看数据库是否工作归档模式下并且是自动归档
SQL> archive log list;                  
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /opt/ora9/product/9.2.0.4/dbs/arch
Oldest online log sequence     63
Current log sequence           65
由此可以看出目前数据不是工作归档模式下。
首先设定数据库运行于归档模式下:
        SQL>shutdown immediate
        SQL>startup mount
        SQL> alter database archivelog;
        SQL> alter database open;
如果Automaticarchival显示为“Enabled”(用些命令判断是否工作在自动归档模式
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Disabled
Archive destination            /opt/ora9/product/9.2.0.4/dbs/arch
Oldest online log sequence     5
Next log sequence to archive   7
Current log sequence           7
),则数据库归档方式为自动归档。否则需要手工归档,或者将归档方式修改为自动归档.
现在开始设置自动归档
简单方法就是执行:
SQL> alter system set log_archive_start=true scope=spfile;
#SQL> alter system setsh log_archive_start=false scope=spfile;关闭自动归档
SQL> alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION=/opt/arch';设置归档路径,这里LOG_ARCHIVE_DEST_为1表示只使用了一个
归档路径,可以设置多个。LOCATION这项表示使用本地归档路径,SERVICE可以设置远程归档路径。
 
这时再执行archive log list 就可以看数据库为自动归档了。
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /opt/arch
Oldest online log sequence     8
Next log sequence to archive   10
Current log sequence           10
再介绍另外一种设置数据自动归档的方法
SQL> alter system set....其实就是在修改spfile这个数据库服务端初始化文件,spfile这个文件是oracle9.2之后新增加的一个功能
,可以在不关实例的情况一下,修改初始文件并且可以立刻生效。(简单介绍了一下,详细说明
我们可以将spfile文件导出之后修改,再将修后的文件导入一下就可以了,步骤如下:
shutdown immediate;
SQL> create pfile='/tmp/expspfile' from spfile;  可以理解为导spfile文件
vi /tmp/expspfile
添加下面两行
*.LOG_ARCHIVE_START=TRUE
*.LOG_ARCHIVE_DEST_1 = 'LOCATION=/opt/arch'
SQL>create spfile from pfile='/tmp/expspfile';  导入刚才修改的文件
SQL> startup
ORACLE instance started.
Total System Global Area  236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
查看一下
SQL> archive log list
'Database log mode             Archive Mode
Automatic archival             Enabled
Archive destination            /opt/arch
Oldest online log sequence     8
Next log sequence to archive   10
Current log sequence           10
可以验证是否使用了spfile文件
SQL> SELECT name,value FROM v$parameter WHERE name='spfile';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
spfile
?/dbs/spfile@.ora
  然后,重新启动数据库,此时Oracle数据库将以自动归档的方式工作在Archive模式下。其中参数LOG_ARCHIVE_DEST1是指定的归档
日志文件的路径,建议与Oracle数据库文件存在不同的硬盘,一方面减少磁盘I/O竞争,另外一方面也可以避免数据库文件所在硬盘毁坏
之后的文件丢失。归档路径也可以直接指定为磁带等其它物理存储设备,但可能要考虑读写速度、可写条件和性能等因素。  
如果需要停止归档模式,此处使用:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area  101782828 bytes
Fixed Size                   451884 bytes
Variable Size              37748736 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.
SQL> alter database noarchivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Enabled
Archive destination            /opt/oracle/oradata/conner/archive
Oldest online log sequence     149
Current log sequence           152

SQL> alter system setsh log_archive_start=false scope=spfile;
 
Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式,从Oracle10g开始,log_archive_start参数已经废除。

2,备份表空间文件:
//将表空间设为备份状态
SQL> alter tablespace users begin backup;
拷贝表空间文件到安全区域
 !cp /opt/ora9/oradata/oradb/users01.dbf /tmp/;
SQL> alter tablespace users end backup;
//建表test的目的为测试此恢复是否是完整恢复。
SQL> create table scott.test(t int);
表已创建。
SQL> insert into scott.test values(1);
已创建 1 行。
SQL> insert into scott.test values(2);
已创建 1 行。
SQL> commit;
提交完成。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

//删除users01.dbf或移动到其他目录造成数据库崩溃。
SQL> startupORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytesVariable Size 109051904 bytes
Database Buffers 25165824 bytesRedo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 /opt/ora9/oradata/oradb

//将备份的数据文件复制回目录/opt/ora9/oradata/oradb
下.
SQL> !cp /tmp/users01.dbf /opt/ora9/oradata/oradb
//恢复数据文件users01.dbf。
SQL> recover datafile '/opt/ora9/oradata/oradb/users01.dbf';

SQL> alter database open;
数据库已更改。
//此说明数据库是完整恢复了。
SQL> select * from scott.test;
 T----------
1
2
3,对归档日志文件的备份:

4、备份控制文件:
SQL> alter database backup controlfile to '/tmp/controlfile_20060821'reuse;
 
恢复表空间数据文件
表空间数据文件损坏的恢复:
首先将归档日志放在指定位置,
其次,将表空间备份复制到指定位置
cp /tmp/users01.dbf /opt/ora9/oradata/oradb/
sqlplus " / as sysdba "
startup mount
recover database;(也可恢复指定数据文件)  recover datafile '/opt/ora9/oradata/oradb/users01.dbf';
alter database open;

备份控制文件
alter database backup controlfile to '/tmp/controlfile_bak_060801'reuse;
恢复备份控制文件
假设oracle数据库,控制文件丢失。
shutdown immediate;
将热备的控制文件恢复回来
cp /tmp/controlfile_bak_060801 /opt/ora9/oradata/oradb/control01.ctl
cp /tmp/controlfile_bak_060801 /opt/ora9/oradata/oradb/control02.ctl
cp /tmp/controlfile_bak_060801 /opt/ora9/oradata/oradb/control03.ctl
sql>startup mount
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/opt/ora9/oradata/oradb/system01.dbf'

SQL> alter database open noresetlogs;
alter database open noresetlogs
*
ERROR at line 1:
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 208117 generated at 07/01/2006 00:05:18 needed for thread 1
ORA-00289: suggestion : /opt/arch/1_15.dbf
ORA-00280: change 208117 for thread 1 is in sequence #15

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 235728 generated at 07/01/2006 01:41:22 needed for thread 1
ORA-00289: suggestion : /opt/arch/1_16.dbf
ORA-00280: change 235728 for thread 1 is in sequence #16
ORA-00278: log file '/opt/arch/1_15.dbf' no longer needed for this recovery

ORA-00308: cannot open archived log '/opt/arch/1_16.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/opt/ora9/oradata/oradb/system01.dbf'
 
以上恢复方法无效,所以采用重建控制文件的方法:
用to trace 备份控制文件

alter database backup controlfile to trace;
sql>shutdown immediate
执行alter database backup controlfile to trace;之后/opt/ora9/admin/udump/(看里面文件的时间)目录下产生一个跟踪文件,你
打开这个文件,把一些不要的语句屏蔽掉,保存为一个SQL文件,就可以按SQL文件的方式进行执行,来创建新的控制文件.
主要有以下内容存在,其它的可以注释掉
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORADB" NORESETLOGS  ARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
  GROUP 1 '/opt/ora9/oradata/oradb/redo01.log'  SIZE 100M,
  GROUP 2 '/opt/ora9/oradata/oradb/redo02.log'  SIZE 100M,
  GROUP 3 '/opt/ora9/oradata/oradb/redo03.log'  SIZE 100M
-- STANDBY LOGFILE
DATAFILE
  '/opt/ora9/oradata/oradb/system01.dbf',
  '/opt/ora9/oradata/oradb/undotbs01.dbf',
  '/opt/ora9/oradata/oradb/cwmlite01.dbf',
  '/opt/ora9/oradata/oradb/drsys01.dbf',
  '/opt/ora9/oradata/oradb/example01.dbf',
  '/opt/ora9/oradata/oradb/indx01.dbf',
  '/opt/ora9/oradata/oradb/odm01.dbf',
  '/opt/ora9/oradata/oradb/tools01.dbf',
  '/opt/ora9/oradata/oradb/users01.dbf',
  '/opt/ora9/oradata/oradb/xdb01.dbf'
CHARACTER SET WE8ISO8859P1

之后执行此文件
sql>@/opt/ora9/admin/udump/oradb_ora_8032.trc
ORA-01967: invalid option for CREATE CONTROLFILE

SP2-0734: unknown command beginning "No tempfil..." - rest of line ignored.
SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT.
  1  CREATE CONTROLFILE REUSE DATABASE "ORADB" RESETLOGS  ARCHIVELOG
  2  RECOVER DATABASE USING BACKUP CONTROLFILE
  3* ALTER DATABASE OPEN RESETLOGS
恢复完成
select * from user.test
验证恢复成功
 

备份表窨
#!/bin/sh
date=`date +%Y%m%d`
sqlplus " / as sysdba" <<EOF
alter tablespace users begin backup;
!cp /opt/ora9/oradata/oradb/users01.dbf /tmp/hotbak/users01_$date.dbf
alter tablespace users end backup;
alter database backup controlfile to '/tmp/hotbak/controlfile_$date'reuse;
exit
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值