Skip to content

Mdata 4.0.3 更新下载 新增asm unload table

版本更新到4之后,后面的版本一直没有放开下载,因为要修复验证bug.经过一段时间的测试,修复了部分已经发现的bug,比如system多数据文件情况下识别错误,dmp格式导出后无法导入的问题.

放在这个论坛上下载是为了把Mdata的问题提交到该站上面,这样Mdata维护以及更新起来较为方便.Mdata一直都是免费使用,是程序难免有bug,我们从Mdata 1.0版本到现在更新了如此多的版本就是不断的修复各种bug.我和hc都是利用工作之外的时间来处理,因此还请谅解!

大家以后碰到mdata的使用问题或者报错请发截图以及日志到Mdata使用问题版块上,我们会跟进处理以及更新.

目前最新版本为Mdata 4.0.3 ,新增在Oracle asm instance下直接unload table的功能.
下载选择附件.以后每2个月周期都会发步新的下载版本.

下载地址:
http://www.dataunload.net/?/article/20

Mdata针对column删除恢复的支持情况说明

从前面分析的unused column和drop column的实质结果上可以获得初步的结论,在使用drop column后是无法使用恢复工具恢复这部分drop的数据的,dul也好mdata也罢都回天无力,只能借助有备份的情况下基于时间点的恢复或者oracle12c中的表恢复功能。

而由于unused的特性,使得unused column部分的时间是可以通过mdata恢复的,需要使用到drop table的恢复机制,通过指定恢复表的字段属性列表,还有objdataid来恢复对应的数据。这部分可以用现用的mdata 3.62版本测试。这里不作描述。

测试案例:

1

关于rowid的基础常识

后面的更新文章会以坏块修复以及异常恢复为主,期间会用到不少的rowid,这里简要的把rowid的寄出常识过一遍。

我们从rowid伪列里select出来的rowid是基于base64编码,一共有18位,分为4部分:

OOOOOOFFFBBBBBBRRR

在此rowed的结构中可以分为以下4类解析:
1.
OOOOOO: 六位表示data object id,根据object id可以确定segment。
2.
FFF: 三位表示相对文件号。根据该相对文件号可以得到绝对文件号,从而确定datafile。
3.
BBBBBB:六位表示data block number。这里的data block number是相对于datafile的编号,而不是相对于tablespace的编号。
4.
RRR:三位表示row number.

Oracle提供了dbm_rowid来进行rowid的一些转换计算.

SQL> select rowid from luda.t1 where rownum <2;

ROWID
------------------
AAANfEAAEAAAEicAAA

通过dbms_rowid包可以查询rowid对应的信息,示例如下:

select dbms_rowid.rowid_object(AAANfEAAEAAAEicAAA) obj#,
dbms_rowid.rowid_relative_fno(AAANfEAAEAAAEicAAA) rfile#,
dbms_rowid.rowid_block_number(AAANfEAAEAAAEicAAA) block#,
dbms_rowid.rowid_row_number(AAANfEAAEAAAEicAAA) row#,
dbms_rowid.rowid_to_absolute_fno(rowid,'LUDA','T1') file#
from luda.t1;

具体使用方法可以参考以下文档:
PACKAGE DBMS_ROWID Specification (文档 ID 67639.1)
HOW TO USE DBMS_ROWID PROCEDURE AND FUNCTIONS (文档 ID 1057891.6)

微信一个朋友问的imp过程遭遇Ora-01114

Oracle process number: 8

Windows thread id: 580, image: ORACLE.EXE


*** SESSION ID:(7.10) 2015-09-10 00:15:03.000
*** 2015-09-10 00:15:03.000
ksedmp: internal or fatal error
ORA-01114: 将块写入文件 201 时出现 IO 错误 (块 # 524044)
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 524050)
ORA-01114: 将块写入文件 201 时出现 IO 错误 (块 # 524044)
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 524050)
ORA-01114: 将块写入文件 201 时出现 IO 错误 (块 # 524044)
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 524050)
ORA-01114: 将块写入文件 201 时出现 IO 错误 (块 # 524037)
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 524043)
No current SQL statement being executed.
----- Call Stack Trace -----

创建唯一索引时候报错,文件201号,temp4G大小(db中唯一的4g大小文件),524*8k/1024=4G,不能远程查验,初步猜测临时表空间不能扩展导致,而且此过程报错‘ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O’,说明io超出了文件范围,验证了临时表空间的可能性。
最终通过增加temp的大小解决。