欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是通过网络精心收集筛选的最优节选:“【oracle备份tablespace】Oracle中无备份情况恢复DROP Tablespace上数据-电脑软件--电脑-游戏-数码”,请注意:文中所谈及的内容不代表本站的真正观点,也请不要相信各种联系方式。下面是关于网络上【oracle备份tablespace】Oracle中无备份情况恢复DROP Tablespace上数据-电脑软件--电脑-游戏-数码的整理详细信息
操作前的准备
select tablespace_name,segment_type,count(*) from dba_segments where owner='PARNASSUSDATA' group by tablespace_name,segment_type;
TABLESPACE SEGMENT_TYPE COUNT(*)
---------- --------------- ----------
USERS TABLE 126
USERS INDEX 136
SQL> select count(*) from obj$;
COUNT(*)
----------
75698
SQL> select current_scn, systimestamp from v$database;
CURRENT_SCN
-----------
SYSTIMESTAMP
---------------------------------------------------------------------------
1895940
25-4月 -14 09.18.00.628000 下午 +08:00
SQL> select file_name from dba_data_files where tablespace_name='USERS';
FILE_NAME
--------------------------------------------------------------------------------
H:\PP\MACLEAN\ORADATA\PARNASSUS\DATAFILE\O1_MF_USERS_9MNBMJYJ_.DBF
SQL> drop tablespace users including contents;
表空间已删除。
C:\Users\maclean>dir H:\APP\MACLEAN\ORADATA\PARNASSUS\DATAFILE\O1_MF_USERS_9MNBMJYJ_.DBF
驱动器 H 中的卷是 entertainment
卷的序列号是 A87E-B792
H:\APP\MACLEAN\ORADATA\PARNASSUS\DATAFILE 的目录
找不到文件
因为drop tablespace 后该TABLESPACE对应的数据文件在 OS上被删除。
此时通过文件恢复工具例如Windows平台上可以使用UNDELETER将被误删除的数据文件还原出来

启动PRM=> recovery Wizard=> 非字典模式


由于是非字典模式,所以需要自己选择合理的字符集!

加入刚才恢复出来的数据文件并点击扫描


之后选择从段头/盘区扫描表,如果从段头扫描表未能找到所有表,则考虑用从盘区扫描:

此时可以看到主界面树形图出现大量OBJXXXXX的表,这里的OBJXXXXX实际就是表的DATA_OBJECT_ID,一般如果有熟悉该套系统应用模式开发的技术人员可以通过浏览样本数据分析将该表与应用表对应起来:

如果没有人可以帮忙对应数据与表之间的关系,则可以考虑使用如下的手段:
由于此例子中仅仅是DROP了TABLESPACE表空间,而数据库本身完全是可用的,则此时可以利用FLASHBACK QUERY来获得DATA_OBJECT_ID与表名之间的映射关系。
SQL> select count(*) from sys.obj$;
COUNT(*)
----------
75436
SQL> select count(*) from sys.obj$ as of scn 1895940;
select count(*) from sys.obj$ as of scn 1895940
*
第 1 行出现错误:
ORA-01555: 快照过旧: 回退段号 0 (名称为 "SYSTEM") 过小
一开始想利用FLASHBACK QUERY来找出OBJ$上之前的记录,但是发现由于使用SYSTEM ROLLBACK SEGMENT所以会出现ORA-01555错误
此时可以考虑使用AWR视图DBA_HIST_SQL_PLAN,只要在最近7天中访问过该表一般可以从执行计划中获得OBJECT#和OBJECT_NAME的映射关系:
SQL> desc DBA_HIST_SQL_PLAN
名称 是否为空? 类型
----------------------------------------- -------- -----------------------
DBID NOT NULL NUMBER
SQL_ID NOT NULL VARCHAR2(13)
PLAN_HASH_VALUE NOT NULL NUMBER
ID NOT NULL NUMBER
OPERATION VARCHAR2(30)
OPTIONS VARCHAR2(30)
OBJECT_NODE VARCHAR2(128)
OBJECT# NUMBER
OBJECT_OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(31)
OBJECT_ALIAS VARCHAR2(65)
OBJECT_TYPE VARCHAR2(20)
OPTIMIZER VARCHAR2(20)
PARENT_ID NUMBER
DEPTH NUMBER
POSITION NUMBER
SEARCH_COLUMNS NUMBER
COST NUMBER
CARDINALITY NUMBER
BYTES NUMBER
OTHER_TAG VARCHAR2(35)
PARTITION_START VARCHAR2(64)
PARTITION_STOP VARCHAR2(64)
PARTITION_ID NUMBER
OTHER VARCHAR2(4000)
DISTRIBUTION VARCHAR2(20)
CPU_COST NUMBER
IO_COST NUMBER
TEMP_SPACE NUMBER
ACCESS_PREDICATES VARCHAR2(4000)
FILTER_PREDICATES VARCHAR2(4000)
PROJECTION VARCHAR2(4000)
TIME NUMBER
QBLOCK_NAME VARCHAR2(31)
REMARKS VARCHAR2(4000)
TIMESTAMP DATE
OTHER_XML CLOB
例如:
select object_owner,object_name,object# from DBA_HIST_SQL_PLAN where sql_id='avwjc02vb10j4'
OBJECT_OWNER OBJECT_NAME OBJECT#
-------------------- ---------------------------------------- ----------
PARNASSUSDATA TORDERDETAIL_HIS 78688
可以利用如下脚本获得较多OBJECT_ID与OBJECT_NAME的映射关系
Select * from
(select object_name,object# from DBA_HIST_SQL_PLAN
UNION select object_name,object# from GV$SQL_PLAN) V1 where V1.OBJECT# IS NOT NULL minus select name,obj# from sys.obj$;
select obj#,dataobj#, object_name from WRH$_SEG_STAT_OBJ where object_name not in (select name from sys.obJ$) order by object_name desc;
另一个查询:
SELECT tab1.SQL_ID,
current_obj#,
tab2.sql_text
FROM DBA_HIST_ACTIVE_SESS_HISTORY tab1,
dba_hist_sqltext tab2
WHERE tab1.current_obj# NOT IN
(SELECT obj# FROM sys.obj$
)
AND current_obj#!=-1
AND tab1.sql_id =tab2.sql_id(+);
用户类似问题:
问题1:问下各位大神们,误删了一张表中的一条数据,怎样...
下面是一个例子: SQL> CREATE TABLE test_fb_table ( 2 ID int, 3 VAL VARCHAR2(10) 4 );Table created.SQL> INSERT INTO test_fb_table VALUES (1, 'TEST');1 row created.SQL> commit;Commit complete.假如 数据被错误的删除/更新需要检索某... >>详细
问题2:公司里的oracle备份,恢复。数据库的状态?
冷备也称为一致性备份,这种备份通常是在数据库关闭的情况下进行的,比如说简单的copy。 而你说的在mount状态下的备份,是我们常说的热备,是一种非一致性的备份。 当你恢复的时候,并不能像冷备份那样完全的恢复,而是只能恢复到你备份时的某一... >>详细
问题3:oracle 中数据文件丢失如何恢复/
其实考官问你这个问题有2个目的,1,就是对数据库的了解和操作的熟练程度,也就是你的能力。2,就是看你有没有实际管理数据库的经验,管理方法。 所以 首先你要问明数据库是否为归档模式,如果不是,你要说出作为dba或管理员如果数据库既不归档... >>详细
问题4:oracle数据恢复问题
这显然是不行的,因为你的数据文件与控制文件里的检查点号都不同步怎么可能打得开呢,如果只有数据文件应该是没有办法恢复到以前的,恢复需要控制文件、日志文件、数据文件。 >>详细
问题5:ORALCE数据恢复
北亚oracle数据恢复软件FROMBYTE Reconstructor for Oracle是一款用于恢复ORACLE数据库文件的软件产品,主要功能为重组ORACLE数据库碎片并导出完整的文件。 一、适用的灾难情况: (1)ORACLE数据库文件被误删除 . (2)存储重新分区、格式化导... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
