PRM-DUL是开放的ORACLE DUL 软件,点击下面的链接下载PRM-DUL
DUL FOR LINUX平台(已更新为PRM-DUL)
DUL FOR Windows平台 (已更新为PRM-DUL)
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:[email protected]
Oracle DUL Data Unloader数据恢复工具信息汇总
Oracle DUL 是Oracle公司内部的数据库恢复工具,由在荷兰的Oracle Support,Bernard van Duijnen开发:
- DUL不是Oracle的一个产品
- DUL不是一个受Oracle支持的产品
- DUL被严格限制为Oracle Support售后支持部门内部使用
- DUL的使用在国外需要经过Oracle公司的内部审批,首先你必须购买了Oracle的标准服务PS才可能用到DUL,否则甚至没有资格使用DUL
- DUL被严格控制的一个原因是其采用了部分Oracle源代码,所以必须被严格控制
大约从DUL 9开始,Bernard van Duijnen为了限制外界使用DUL,所以给DUL加上了软件时间锁,即他会定期编译不同平台上的DUL(DUL基于C语言编写)并定期上传到ORACLE 内部的DUL workspace(基于stbeehive的空间),Oracle Support可以使用内部VPN登陆后下载。就是说 好比bernard.van.duijnen 在10月1日发布了一个版本,日期锁是30天,那么这个版本到11月1日基本就失效了, DUL不是简单的读OS时间,所以改OS时间是没用的。 因为Oracle的datafile里也记录了一个当前时间,所以DUL读的是datafile里的时间。 一般用户不可能为了用DUL去改那个时间。
注意由于bernard.van.duijnen同学不提供HP-UX平台上的DUL,所以DUL没有HP-UX的对应版本。
同时早期的Oracle DUL版本用在现在的版本10g、11g、12c的数据库基本是用不了了,因为太老了。 在美国使用DUL是被严格控制的,在中国国内的话 基本就是Oracle ACS 高级客户服务部门对外在用,购买ORACLE ACS现场服务的价格还是很贵的。
附件为一个Oracle ACS提供DUL 服务的介绍文档(当然原厂现场服务是比较昂贵的,且前提是用户已经每年购买了PS标准服务,否则甚至无法购买ACS高级服务的现场服务):
http://www.askmaclean.com/wp-content/uploads/2014/01/DUL.pdf
DUL User’s and Configuration Guide V10.2.4.27
DUL可以从已经损坏严重的数据库中抽取数据, DUL可以直接扫描Oracle Datafile数据文件,并识别表头块segment header,访问Extent盘区信息,并从中读取实际行数据。 后续DUL能生成SQLLDR形式的导入文件,或者EXP格式的DMP文件。
如果SYSTEM表空间数据文件还在,那么 DUL读取Oracle数据字典。否则DUL采取采用的形式实际读取行,并根据内部算法判断字段类型,字段长度。
DUL可以基本上处理所有的常见行类型,包括常规行、迁移行、链式行、多盘区和簇表等;处理这些行时不需要额外人工介入。跨平台抽取也是OK的。 DUL直接从Oracle Datafile抽取数据,而无需Oracle数据库实例。 其实施脏读,假设每个事务均已经提交。 DUL不检测是否需要做介质恢复,即便是损坏的数据块也可以读出。 支持DMT和LMT表空间。 由于是脏读,所以DUL恢复数据后一般建议由应用验证数据。
兼容性方面DUL可以处理从不同操作系统上拷贝过来的数据文件。支持大多数数据库结构: 链式行、迁移行、hash/index 簇,LONG,RAW,ROWID,DATE,Number,多FreeList,高水位,NULL等等。 DUL 兼容ORACLE 6,7,8和9以及10g 11g 12c。
诗檀软件(Maclean 所在的公司)开发了DUL的同类产品 ,PRM-DUL。 在DUL的基础上引入了图形化界面GUI和DataBridge(数据无需落地成为SQLLDR文件,直接像DBLINK一样传输到目标数据库)等功能;同时由于PRM-DUL是基于JAVA编写的,所以可以跨所有平台,包括HP-UX。
http://parnassusdata.com/sites/default/files/ParnassusData_PRMForOracle_3206.zip
PRM-DUL的免费版本默认每张表只能抽取一万行数据,如果你的数据库很小以至于没有超过一万行数据的表,那么可以直接使用免费的PRM-DUL。 如果你的数据库较大且数据十分重要,那么可以考虑购买企业版的PRM-DUL,企业版PRM-DUL 针对一套数据库提供一个License软件使用许可证,一个License的价格是7500元人民币(含17%增值税)。
同时PRM-DUL还提供部分免费的License:
如果你的Oracle数据库恢复case在使用DUL后仍搞不定,那么可以考虑通过服务恢复:
诗檀软件目前提供几乎所有场景的Oracle恢复情况,包括:数据库无法打开,表被误DROP、TRUNCATE、DELETE等,ASM Diskgroup无法MOUNT等。
PRM-DUL 基于JAVA开发,这保证了PRM可以跨平台运行,无论是AIX、Solaris、HPUX等Unix平台, Redhat、Oracle Linux、SUSE等Linux平台,还是Windows平台上均可以直接运行PRM。
PRM-DUL支持的操作系统平台:
Platform Name | Supported |
AIX POWER | Yes |
Solaris Sparc | Yes |
Solaris X86 | Yes |
Linux X86 | Yes |
Linux X86-64 | Yes |
HPUX | Yes |
MacOS | Yes |
PRM-DUL目前支持的数据库版本
ORACLE DATABASE VERSION | Supported |
Oracle 7 | Yes |
Oracle 8 | Yes |
Oracle 8i | Yes |
Oracle 9i | Yes |
Oracle 10g | Yes |
Oracle 11g | Yes |
Oracle 12c | Yes |
PRM-DUL目前支持的多语言:
语言 | 字符集 | 对应的编码 |
中文 简体/繁体 | ZHS16GBK | GBK |
中文 简体/繁体 | ZHS16DBCS | CP935 |
中文 简体/繁体 | ZHT16BIG5 | BIG5 |
中文 简体/繁体 | ZHT16DBCS | CP937 |
中文 简体/繁体 | ZHT16HKSCS | CP950 |
中文 简体/繁体 | ZHS16CGB231280 | GB2312 |
中文 简体/繁体 | ZHS32GB18030 | GB18030 |
日文 | JA16SJIS | SJIS |
日文 | JA16EUC | EUC_JP |
日文 | JA16DBCS | CP939 |
韩语 | KO16MSWIN949 | MS649 |
韩语 | KO16KSC5601 | EUC_KR |
韩语 | KO16DBCS | CP933 |
法语 | WE8MSWIN1252 | CP1252 |
法语 | WE8ISO8859P15 | ISO8859_15 |
法语 | WE8PC850 | CP850 |
法语 | WE8EBCDIC1148 | CP1148 |
法语 | WE8ISO8859P1 | ISO8859_1 |
法语 | WE8PC863 | CP863 |
法语 | WE8EBCDIC1047 | CP1047 |
法语 | WE8EBCDIC1147 | CP1147 |
德语 | WE8MSWIN1252 | CP1252 |
德语 | WE8ISO8859P15 | ISO8859_15 |
德语 | WE8PC850 | CP850 |
德语 | WE8EBCDIC1141 | CP1141 |
德语 | WE8ISO8859P1 | ISO8859_1 |
德语 | WE8EBCDIC1148 | CP1148 |
意大利语 | WE8MSWIN1252 | CP1252 |
意大利语 | WE8ISO8859P15 | ISO8859_15 |
意大利语 | WE8PC850 | CP850 |
意大利语 | WE8EBCDIC1144 | CP1144 |
泰语 | TH8TISASCII | CP874 |
泰语 | TH8TISEBCDIC | TIS620 |
阿拉伯语 | AR8MSWIN1256 | CP1256 |
阿拉伯语 | AR8ISO8859P6 | ISO8859_6 |
阿拉伯语 | AR8ADOS720 | CP864 |
西班牙语 | WE8MSWIN1252 | CP1252 |
西班牙语 | WE8ISO8859P1 | ISO8859_1 |
西班牙语 | WE8PC850 | CP850 |
西班牙语 | WE8EBCDIC1047 | CP1047 |
葡萄牙语 | WE8MSWIN1252 | CP1252 |
葡萄牙语 | WE8ISO8859P1 | ISO8859_1 |
葡萄牙语 | WE8PC850 | CP850 |
葡萄牙语 | WE8EBCDIC1047 | CP1047 |
葡萄牙语 | WE8ISO8859P15 | ISO8859_15 |
葡萄牙语 | WE8PC860 | CP860 |
PRM-DUL支持的表存储类型:
表存储类型 | Supported |
Cluster Table簇表 | YES |
索引组织表,分区或非分区 | YES |
普通堆表,分区或非分区 | YES |
普通堆表 启用基本压缩 | YES(Future) |
普通堆表 启用高级压缩 | NO |
普通堆表 启用混合列压缩 | NO |
普通堆表 启用加密 | NO |
带有虚拟字段virtual column的表 | NO |
链式行、迁移行 chained rows 、migrated rows | YES |
注意事项: 对于virtual column、11g optimized default column而言 数据抽取可能没问题,但会丢失对应的字段。 这2个都是11g之后的新特性,使用者较少。
PRM-DUL支持的数据类型
数据类型 | Supported |
BFILE | No |
Binary XML | No |
BINARY_DOUBLE | Yes |
BINARY_FLOAT | Yes |
BLOB | Yes |
CHAR | Yes |
CLOB and NCLOB | Yes |
Collections (including VARRAYS and nested tables) | No |
Date | Yes |
INTERVAL DAY TO SECOND | Yes |
INTERVAL YEAR TO MONTH | Yes |
LOBs stored as SecureFiles | Future |
LONG | Yes |
LONG RAW | Yes |
Multimedia data types (including Spatial, Image, and Oracle Text) | No |
NCHAR | Yes |
Number | Yes |
NVARCHAR2 | Yes |
RAW | Yes |
ROWID, UROWID | Yes |
TIMESTAMP | Yes |
TIMESTAMP WITH LOCAL TIMEZONE | Yes |
TIMESTAMP WITH TIMEZONE | Yes |
User-defined types | No |
VARCHAR2 and VARCHAR | Yes |
XMLType stored as CLOB | No |
XMLType stored as Object Relational | No |
PRM-DUL对ASM的支持
功能 | Supported |
支持直接从ASM中抽取数据,无需拷贝到文件系统上 | YES |
支持从ASM中拷贝数据文件 | YES |
支持修复ASM metadata | YES |
支持图形化展示ASM黑盒 | Future |
以下 为ORACLE DUL 工具使用手册:
ORACLE DUL 的原理和功能列表:
独立的C-程序
DUL是一个独立的C程序,它直接从数据文件的表中检索行。 Oracle的RDBMS软件完全不被使用。 DUL进行脏读,它假定每个事务被提交。它也不检查/是否需要完成介质恢复。
最后一招
DUL旨在检索无法用其他方法检索的数据。它不是EXP,SQL *加等等的替代选择,而是最后的方案。不用于正常的生产环境。
在使用DUL之前,你必须知道RDBMS有许多隐藏的功能可以强制打开坏数据库。无记录的init.ora参数和事件可以用于跳过前滚,禁用回滚,禁用特定SMON行动,推进数据库scn等等。
数据库损坏 – 数据块OK
数据库可以被破坏,但单独的数据块必须是100%正确。在所有导出进行检查时,确保块没有损坏并属于正确的数据段。如果扫描时遇到损坏的块,一个错误信息被打印在加载程序(loader)文件和标准输出。导出将继续下一行或块。
cluster/表/索引中的行
DUL能且只能导出索引/表/cluster中数据。它不会转储触发器,存储过程,也不会创建表或视图的SQL脚本。 (但描述它们的数据字典表可以被导出)。该数据将被导出为在适合SQL * Loader或IMP的格式。同时,SQL * Loader的匹配控制文件也会生成。
DUL可以导出索引和索引组织表。索引的导出能用来确定表应该有多少行或标识缺失的行。
跨平台导出
支持跨平台导出。数据库可以从与DUL-主机不同的操作系统被复制。 (迄今所涉及的数据库/系统:Sequent/ptx, Vax Vms, Alpha Vms, MVS, HP9000/8xx, IBM AIX, SCO Unix, Alpha OSF/1, Intel Windows NT)。
在“init.dul”中的配置参数必须进行修改,以匹配原始平台和O / S,而非导出执行的平台。
强大功能
DUL不会转储,运行或挂起不论数据库的破坏有多严重;(几乎)支持所有Oracle功能
对于所有数据库结构的面支持:行链接,行迁移,散列/索引集群,longs,raws,行id,日期,数字,多空闲列表组(multiple free list groups),段高水位(segment high water mark),NULLs,显示NULL列尾部,无限扩展,Oracle8的新数据块布局,分区表。
后来增加的有lobs,压缩索引,9iR2压缩表。可变数组(varray)和抽象数据类型ADTs(用户定义的对象)在SQL * Loader模式下被部分支持。
ASM是完全支持的,文件可以从ASM磁盘组中提取。不使用装载的ASM实例,磁盘直接访问。支持非默认的ASM分配单元大小。
使用unexp命令套件,数据可以从导出的转储文件中恢复。Unpump的一些初步工作已完成,以支持数据pump文件。
支持的RDBMS版本
DUL能用于Oracle 6以上版本。 DUL已通过从6.0.26到10.2的所有版本。即使旧版数据块header布局(6.0.27.2前)也支持。
多字节支持
DUL本质上是一个单一字节的应用程序。它的命令解析器不理解多字节字符,但导出任何多字节的数据库是可以的。对于所有可能情况都有解决方法。
DUL可转换为UTF8。这是为了存储在UTF16的 NCLOBS。
限制
MLSLABELS
不支持受信任的Oracle多级安全标贴。
(LONG)RAW
DUL可以导出(long)raws。目前在SQL * Loader中合适的格式来保存所有的long raws。所以long raws和blobs可以在这两种模式下被导出。
ORACLE8对象选项和LOBS
尚不支持嵌套表,如果需要请告知我来添加。支持varray和ADT,以及储存为核心lob的。 在SQL * Loader模式和EXP模式下都支持CLOBS,NCLOBS。 BLOBS在EXP模式下最好处理,在SQL * Loader模式下产生的十六进制格式当前未能正确加载。
可移植性
通过ANSI-C编译器,DUL可以移植到任何操作系统。 DUL已经被移植到许多UNIX变体,VMS和WindowsNT。目前,所有构建都使用gcc和Linux的交叉编译环境完成。
RDBMS 内部知识
对Oracle RDBMS内部的良好掌握是成功地使用DUL的必要前提。例如数据服务器内部(DSI)文档和教程提供一个良好的基础。甚至还有专门的DUL模块。
设置和使用DUL
配置文件
针对DUL有两个配置文件。 “init.dul”包含所有的配置参数。 (缓存大小,header布局的详细内容,oracle数据块大小,输出文件格式)在控制文件中,“control.dul”,数据库的数据文件名和asm磁盘可以被指定。
可用数据字典
如果组成SYSTEM表空间的数据文件可用,那Oracle数据字典就可用。Oracle分配给这些文件的数字和你给定的名称(不需要是Oracle知道的原始名称),必须列入“control.dul”文件。您还需要包括文件数和其他表空间的文件名,这些表空间是最终想要导出表及其数据。不包含这些文件不会影响数据字典导出步骤,但会影响之后的表导出。
当USER$, OBJ$, TAB$ and COL$能被导出时,使用DUL
步骤如下:
- 在目标数据库配置DUL。这表示要创建一个正确的dul和control.dul。 SYSTEM表空间的数据文件数量和名称必须与任何你要导出表和数据的表空间的数据文件一并包括在control.dul文件中。对于Oracle8及以上版本,表空间数和相关文件数必须在每个数据文件中指定。
- 使用”BOOTSTRAP;”命令来准备导出。在引导过程中会发现一个兼容的段,找到bootstrap$表导出。不再需要旧的“dul dictv7.ddl”。
- 导出数据文件被包括在“dul”文件中的表。使用以下命令之一:
- “UNLOAD TABLE [ owner>.]table ;(别忘了分号)
- 这将导出表定义和表的数据。
- “UNLOAD USER user name ;
- 这为指定的用户导出所有表和数据。
- “UNLOAD DATABASE ;
- “UNLOAD TABLE [ owner>.]table ;(别忘了分号)
这导出所有可用的数据库表。 (除了用户SYS)。
unload user SCOTT;
没有可用的数据字典
如果SYSTEM表空间的数据文件不可用,那么虽然可以unload 导出数据,但USER,TABLE和COLUM名称是未知的。识别表会是艰巨的任务。但它可以(并已经)被完成。你需要深入了解你的应用程序和应用程序表。列类型可以由DUL猜测,但表和列名丢失了。来自同一数据库但旧了几周的任何SYSTEM表空间可以有很大的帮助!DUL使用的多数信息不改变。 (只有dataobj#是在truncate或索引重建过程中)
使用DUL而不用SYSTEM表空间
步骤如下:
- 在目标数据库配置DUL。这表示创建一个正确的dul和control.dul。 (见端口具体参数)。在这种情况下,control.dul文件需要将被导出的表和数据的数量和数据文件名,但它并不需要SYSTEM表空间信息。
- SCAN DATABASE; :扫描数据库,创建程度和分段图
- SCAN TABLES; or SCAN EXTENTS; :收集行统计
- 从步骤3的输出中识别丢失的表。
- 导出识别出的表。
自动搜索
为了便于寻找丢失的表:在seen_tab.dat和seen_col.dat扫描的统计信息可以被加载到一个全新的数据库。如果你要重建表(但愿创建表的脚本仍可用),那么通过两个SQL * Plus脚本(fill.sql和getlost.sql),“丢失”表的结构信息可以匹配到“可见”表被扫描的信息。
提示和陷阱
- 名称与DUL不是真正相关的,仅与必须加载数据的人相关。但是,如果你不知道被导出的数据来自哪个表,它就没有任何价值。
- 猜测的列可能是错误的。即使算法保守,在不确定时决定