Oracle 阅读器-刚看完表空间回复的详细解释
(一) 当使用一个控制文件的备份恢复,例如下面的附图。使用备份控制文件恢复位置
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVtb25zb24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
1) 创建測试表空间ts1及相关測试表(表空间为ts1)
SYS@ORCL>create tablespace ts1 datafile '/u01/app/oracle/oradata/ORCL/ts1.dbf' size 10m;
Tablespace created.
SYS@ORCL>create table scott.t(x int) tablespace ts1;
Table created.
SYS@ORCL>insert into scott.t select rownum from dual connect by rownum<=10;
10 rows created.
SYS@ORCL>commit;
Commit complete.
SYS@ORCL>
2) 通过RMAN备份ts1表空间和控制文件
RMAN> backup tablespace ts1 include current controlfile;
Starting backup at 17-JAN-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=141 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00006 name=/u01/app/oracle/oradata/ORCL/ts1.dbf
channel ORA_DISK_1: starting piece 1 at 17-JAN-13
channel ORA_DISK_1: finished piece 1 at 17-JAN-13
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp tag=TAG20130117T101646 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
channel ORA_DISK_1: starting piece 1 at 17-JAN-13
channel ORA_DISK_1: finished piece 1 at 17-JAN-13
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp tag=TAG20130117T101646 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 17-JAN-13
RMAN>
3) 删除t表部分记录
SYS@ORCL>delete scott.t where x>=6;
5 rows deleted.
SYS@ORCL>commit;
Commit complete.
SYS@ORCL>
4) 切换几次日志。让上面的动作归档(对于測试来说,意义不是特别的大)
SYS@ORCL>alter system switch logfile;
System altered.
SYS@ORCL>/
System altered.
SYS@ORCL>/
System altered.
SYS@ORCL>/
System altered.
SYS@ORCL>
5) 在users表空间上创建t1表
SYS@ORCL>create table scott.t1(x int) tablespace users;
Table created.
SYS@ORCL>insert into scott.t1 select rownum from dual connect by rownum<=2;
2 rows created.
SYS@ORCL>commit;
Commit complete.
SYS@ORCL>
6) 将表ts1改动为仅仅读模式
SYS@ORCL>alter tablespace ts1 read only;
Tablespace altered.
SYS@ORCL>select tablespace_name,status from dba_tablespaces where tablespace_name='TS1';
TABLESPACE_NAME STATUS
------------------------- ---------
TS1 READ ONLY
SYS@ORCL>select file_id,file_name,status,online_status from dba_data_files where tablespace_name='TS1';
FILE_ID FILE_NAME STATUS ONLINE_
---------- --------------------------------------------- --------- -------
6 /u01/app/oracle/oradata/ORCL/ts1.dbf AVAILABLE ONLINE
SYS@ORCL>
7) 删除ts1表空间数据文件和全部控制文件
SYS@ORCL>!rm /u01/app/oracle/oradata/ORCL/ts1.dbf
SYS@ORCL>!rm /u01/app/oracle/oradata/ORCL/*.ctl
8) 重新启动数据库到nomount状态
SYS@ORCL>shutdown abort;
ORACLE instance shut down.
SYS@ORCL>
SYS@ORCL>startup nomount;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 96470608 bytes
Database Buffers 184549376 bytes
Redo Buffers 2973696 bytes
SYS@ORCL>
9) 通过RMAN备份的控制文件完毕控制文件的恢复,恢复完毕,数据库改动为mount
RMAN> restore controlfile from '/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp';
Starting restore at 17-JAN-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=157 devtype=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:05
output filename=/u01/app/oracle/oradata/ORCL/control01.ctl
output filename=/u01/app/oracle/oradata/ORCL/control02.ctl
output filename=/u01/app/oracle/oradata/ORCL/control03.ctl
Finished restore at 17-JAN-13
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
RMAN>
10) 恢复ts1表空间
RMAN> restore tablespace ts1;
Starting restore at 17-JAN-13
Starting implicit crosscheck backup at 17-JAN-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=157 devtype=DISK
Crosschecked 2 objects
Finished implicit crosscheck backup at 17-JAN-13
Starting implicit crosscheck copy at 17-JAN-13
using channel ORA_DISK_1
Finished implicit crosscheck copy at 17-JAN-13
searching for all files in the recovery area
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00006 to /u01/app/oracle/oradata/ORCL/ts1.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp tag=TAG20130117T101646
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 17-JAN-13
RMAN>
11) 表空间恢复完成。尝试open数据库
--当然。我们知道一定是无法open数据库的,由于控制文件恢复的是老版本号的
SYS@ORCL>!ls /u01/app/oracle/oradata/ORCL/ts1.dbf
/u01/app/oracle/oradata/ORCL/ts1.dbf
SYS@ORCL>alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
--提示resetlogs方式打开
SYS@ORCL>alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'
--提示须要恢复1号数据文件
SYS@ORCL>recover datafile 1;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
--提示using BACKUP CONTROLFILE方式完毕恢复
SYS@ORCL>
12) using backup controlfile恢复数据库
注:假设要恢复到控制文件SCN以后的时间。这时候。就须要用using backup controlfile. 恢复就不会受“当前controlfile所纪录的SCN”的限制。
这时候的限制就来自于你的语句(until time , until scn),或者可用的archive log(until cancel)
SYS@ORCL>recover database using backup controlfile until cancel;
ORA-00279: change 493760 generated at 01/16/2013 17:10:46 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_01_16/o1_mf_1_7_%u_.arc
ORA-00280: change 493760 for thread 1 is in sequence #7
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
--此处回车则是利用下一个归档日志文件进行恢复。只是在这里也能够输入CANCEL,表示恢复到此结束,不再使用后面的归档日志文件
……
--在恢复的过程中又出现了例如以下警告
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'
SYS@ORCL>
13) 尝试再次resetlogs打开数据库
SYS@ORCL>alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'
SYS@ORCL>
14) 採用极端办法
注:此时仅仅能採取极端手段:隐含參数_allow_resetlogs_corruption强制启动数据库,设置此參数之后,在数据库Open过程中。Oracle会跳过某些一致性检查。从而使数据库可能跳过不一致状态,Open打开:
--查看隐藏參数_allow_resetlogs_corruption。默认值为false
SYS@ORCL>SELECT ksppstvl, ksppdesc
2 FROM x$ksppi x, x$ksppcv y
3 WHERE x.indx = y.indx
4 AND ksppinm = '_allow_resetlogs_corruption';
KSPPSTVL KSPPDESC
---------- --------------------------------------------------
FALSE allow resetlogs even if it will cause corruption
SYS@ORCL>
--将隐藏參数设置为true
SYS@ORCL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
System altered.
SYS@ORCL>
--因为是静态參数,重新启动数据库使其生效
SYS@ORCL>shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SYS@ORCL>
--数据库启动到mount状态
SYS@ORCL>startup mount;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 83887696 bytes
Database Buffers 197132288 bytes
Redo Buffers 2973696 bytes
Database mounted.
SYS@ORCL>
15) 再次尝试open数据库。提示RESETLOGS方式open
SYS@ORCL>alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SYS@ORCL>
16) 数据库成功以resetlogs方式open
SYS@ORCL>alter database open resetlogs;
Database altered.
SYS@ORCL>
SYS@ORCL>select count(*) from scott.t;
COUNT(*)
----------
5
SYS@ORCL>select count(*) from scott.t1;
select count(*) from scott.t1
*
ERROR at line 1:
ORA-00942: table or view does not exist
SYS@ORCL>
17) 恢复參数,重新启动数据库
SYS@ORCL>alter system set "_allow_resetlogs_corruption"=false scope=spfile;
System altered.
SYS@ORCL>startup force;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 88082000 bytes
Database Buffers 192937984 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SYS@ORCL>
5.1.1. 小结
假设在生产中使用了仅仅读表空间,那么切记,在改动为仅仅读以后,第一件事情就是备份的孩子,这将节省不必要的麻烦和损失。
版权声明:本文博主原创文章,博客,未经同意不得转载。
Oracle 阅读器-刚看完表空间回复的详细解释的更多相关文章
- [独孤九剑]Oracle知识点梳理(一)表空间、用户
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...
- Oracle 释放过度使用的Undo表空间
故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃: 问题分析:产生问题的原因主要以下两点: 1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况: ...
- centos 安装oracle 11g r2(三)-----表空间创建
centos 安装oracle 11g r2(三)-----表空间创建 创建表空间前要保证监听与数据库实例已经启动 1.启动监听 [oracle@localhost ~]$ lsnrctl start ...
- oracle 怎么查看用户对应的表空间
oracle 怎么查看用户对应的表空间? 查询用户: 查看数据库里面所有用户,前提是你是有 dba 权限的帐号,如 sys,system: select * from dba_users; 查看你能管 ...
- 【Oracle】删除(释放)数据文件/表空间流程
oracle删除(释放)数据文件/表空间流程 生产环境:数据库里空间不足,niptest 表空间251G,只使用了17G 再alter database datafile '...../niptest ...
- Oracle数据库-建库、建表空间,建用户
Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 对于初学者来说,为了避免麻烦,可以用'Database Configuration Assistan ...
- Oracle 高水位说明和释放表空间,加快表的查询速度
高水位的介绍 数据库运行了一段时间,经过一些列的删除.插入.更改操作有些表的高水位线就有可能和实际的表存储数据的情况相差特别多,为了提高检索该表的效率,建议对这些表进行收缩: 查找高水位线的表 查找表 ...
- oracle 删除用户命令和部分表空间操作
删除用户 drop user user_name cascade; 建立表空间 CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01. ...
- oracle 创建用户和imp指定表空间
创建用户: 1,sqlplus sys/pwd as sysdba; 2, create user username identified by password; 3, grant dba,conn ...
随机推荐
- 显示形状回归算法(ESR)代码介绍
源地址:http://www.thinkface.cn/thread-3704-1-6.html 人脸对齐包括两个部分,分别为训练部分和测试部分.所有的代码基于opencv2.0.(一)训练阶段Ste ...
- linux教程之一
相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 1. 忘记my ...
- Web Api集成Swagger
WebApi集成Swagger 1.新建一个WebApi空项目 2.新建一个Person实体类: public class Person { public int ID { get; set; } p ...
- robots.txt禁止搜索引擎收录
禁止搜索引擎收录的方法 一.什么是robots.txt文件? 搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息. 您可以在您的网站中创建一个纯文 ...
- Cocos2dx 3.x创建Layer的步骤
创建 1.新建类文件.注意文件夹为Classes下.否则文件不能正常找到. 2.改动预编译头.如用VS,默觉得#pragma once,为了兼容,改为#ifndef | #define | #endi ...
- android编译自己 内置的jar做法
1.首先 android.mk LOCAL_PATH := $(call my-dir) # ===================================================== ...
- Invalid character constant
Invalid character constant 无效的字符常数 可能是双引号写成了单引号了.
- MD5 概念与用途
MD5概念: MD5这是message-digest algorithm 5(信息-摘要算法)缩写.用于加密和解密技术上,它能够说是文件的"数字指纹".不论什么一个文件,不管是可运 ...
- Hadoop-2.2.0中国文献—— MapReduce 下一代 -- 公平调度
目的 此文档描写叙述了 FairScheduler, Hadoop 的一个可插入式的调度器.同意 YARN 应用在一个大集群中公平地共享资源. 简单介绍 公平调度是一种分配资源给应用的方法,以致到最后 ...
- Boost中timer的简易用法
boost::asio::deadline_timer timer_; timer_(io_service), timer_.expires_from_now(boost::posix_time::s ...