oracle的备份与恢复(二)

author:skate

time:2010-09-06


 

 

oracle的备份与恢复

 

基于我个人的理解把恢复分为来两大类:

 

1. 基于备份的恢复

这种基于备份饿恢复是指通过备份文件,redo,archivelog等来实现备份。

 

2. 没有备份的恢复

没有备份的恢复是指不利用备份文件(备份文件,redo,archivelog)的恢复。也就是非常规的恢复,强制打开数据库

 

但是根据恢复时丢失数据的多少,也可以分为完全恢复和不完全恢复

 

1. 基于备份的恢复

 

基于备份的恢复相对很简单,根据损坏的文件和恢复时间,oracle提供很多方式

 

A。数据文件的恢复(包括datafile,undofile)
B。表空间的恢复,假如损坏多个数据文件,可以通过表空间来恢复比较当便
C。数据库的恢复,基于数据库的恢复,这个恢复动作较大
D。数据块恢复
E。没有备份文件,利用redo,archivelog恢复数据文件

 

 

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 

B。表空间的恢复,假如损坏多个数据文件,可以通过表空间来恢复比较当便

 

表空间是数据文件集合的逻辑概念,表空间的恢复根据不同表空间,可以分为:

 

1)用户表空间恢复
2)临时表空间恢复
3)undo表空间恢复
4)系统表空间恢复


1)用户表空间恢复

 

SQL> shutdown abort;
ORACLE 例程已经关闭。


SQL> quit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断

 

C:/Documents and Settings/Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 9月 6 16:20:21 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

已连接到空闲例程。

 

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  574619648 bytes
Fixed Size                  1297944 bytes
Variable Size             234881512 bytes
Database Buffers          331350016 bytes
Redo Buffers                7090176 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF'

 


SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_
---------- ------- -------
ERROR                                                                CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
         6 ONLINE  ONLINE
FILE NOT FOUND                                                             0


         7 ONLINE  ONLINE
FILE NOT FOUND                                                             0


     FILE# ONLINE  ONLINE_
---------- ------- -------
ERROR                                                                CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------

 


SQL> recover tablespace tbs_test1;
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 7: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST04.DBF'
ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 7: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST04.DBF'

 


SQL> recover tablespace tbs_test1;
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 6: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF'
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TBS_TEST03.DBF'

 


SQL> recover tablespace tbs_test1;
完成介质恢复。


SQL> select * from v$recover_file;

未选定行

 

SQL> alter database open;

数据库已更改。

 

SQL>

 

这里用的表空间恢复命令,当然也可以用数据文件恢复命令,只不过那样会麻烦些,要一个一个文件的恢复

 

-------------------------------------------------------------------------------------------------

 

 

2) 临时表空间恢复

 

临时表空间的恢复要简单些,因为这里没有存储数据,只是用于磁盘排序和临时表,所以当临时表空间有故障可以直接删除

一般临时表空间会有一个或多个临时文件,当是一个过很少的几个临时文件损坏,就可以直接删除临时文件,如果是多个临时
文件损坏,可以重建一个临时表空间


SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
TBS_TEST1
TBS_TEST2
TEMP1

已选择9行。

 

SQL> select name,status from v$tempfile;

NAME
--------------------------------------------------------------------------------

STATUS
-------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP01.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP02.DBF
ONLINE

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP10.DBF
ONLINE


SQL>

 

查看系统的默认临时表空间

 

SQL> select * from database_properties where property_name='DEFAULT_TEMP_TABLESP
ACE';

PROPERTY_NAME
------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------

DESCRIPTION
--------------------------------------------------------------------------------

DEFAULT_TEMP_TABLESPACE
TEMP
Name of default temporary tablespace


SQL>

 


如果是临时文件坏了,可以通过增加新的临时文件,再删除损坏的临时文件;或者创建新的临时表空间,删除损坏的临时表空间

 

实验:用UE编辑临时表空间文件,模拟临时文件的损坏


执行一个大排序语句,好产生disk sort

 

SQL> insert into tabtest3 select * from tabtest3;
insert into tabtest3 select * from tabtest3
            *
第 1 行出现错误:
ORA-01653: 表 SYS.TABTEST3 无法通过 128 (在表空间 TBS_TEST1 中) 扩展

 

这个错误说明测试表所在的表空间不足, 那就扩展

 

SQL> alter tablespace tbs_test1 add datafile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/T
EST/TBS_TEST05.DBF' size 50m;

表空间已更改。

 


SQL> select * from tabtest3 order by owner;
select * from tabtest3 order by owner
              *
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 203 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 203: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP10.DBF'

 


查看现有的临时文件情况:

 

SQL>  select  t.NAME, tf.name from v$tempfile tf,v$tablespace t
  2   where t.ts#=tf.TS#;


NAME                           NAME
------------------------------ --------------------------------------------------------------------------------
TEMP1                          E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP12.DBF
TEMP1                          E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP10.DBF
SQL>

 


既然有两个临时文件,那就把把有问题临时文件删除


SQL> alter database tempfile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP10.DBF'
drop including datafiles;

表空间已更改。

 

再就可以执行排序了
SQL> select * from tabtest3 order by owner;

 

 


也可以删除临时表空间
SQL> drop tablespace temp including contents and datafiles;
drop tablespace temp including contents and datafiles
*
第 1 行出现错误:
ORA-12906: 不能删除默认的临时表空间

SQL>

 

创建临时表空间

 

SQL> create temporary tablespace temp1
  2  tempfile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP10.DBF' size 10m;

表空间已创建。

 

 


更改系统的临时表空间

SQL> alter database default temporary tablespace temp1;

数据库已更改。

 

查看系统的默认临时表空间


SQL> select * from database_properties where property_name='DEFAULT_TEMP_TABLESP
ACE';

PROPERTY_NAME
------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------

DESCRIPTION
--------------------------------------------------------------------------------

DEFAULT_TEMP_TABLESPACE
TEMP1
Name of default temporary tablespace

 


现在默认的临时表空间是temp1,不是temp了,那现在就可以删除了temp了

 

SQL> drop tablespace temp including contents and datafiles;

表空间已删除。

 

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
EXAMPLE
TBS_TEST1
TBS_TEST2
TEMP1

已选择8行。


SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------

E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP10.DBF

SQL>

 


总结:

如果是删除临时数据文件,要先添加一个临时文件,在删除有故障的临时数据文件

1. SQL> alter  tablespace temp1  add tempfile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP11.DBF' size 50m  ;
2. SQL> alter database tempfile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP11.DBF' drop including datafiles;

 

如果是创建新的临时表空间的话
1. 创建一个临时表空间
   create temporary tablespace temp1 tempfile 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/TEMP10.DBF' size 10m;


2. 更改系统的默认临时表空间
   alter database default temporary tablespace temp1;


3. 删除有问题的表空间
   drop tablespace temp including contents and datafiles;

 

-------end------

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值