DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 789|回复: 0
打印 上一主题 下一主题

[待整理] Life is DUL without it

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-13 14:47:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经常有人在论坛上谈及DUL,问DUL的相关内容,要DUL。还有人不清楚DUL是什么东东,谁写的,做什么用的。一直想写一篇关于DUL稍完整些的文档,目的有两个,(1)让不知道dul的人知道这是一个什么的东西,心里好有一个生存的底线,(2)让用过dul的人有一个参考,放于身边,比英文的guide看起来更轻松、实用。

Life is DUL without it这句话是退出DUL工具时的一句提示,感觉非常有意思,找了英语精进的人也动用了在线的翻译也没准确表达出这句话的含义。我想,作者想表达的是DUL某些时侯同生命一样重要,就像一株救命的稻草,在特别的时侯会挽救生命。


DUL是一个什么样的程序
DUL是Data Unloader的缩写,是一个荷兰的Oracle工程师开发的,他的名字为Bernard Van Duijnen。DUL是一个C开发的小程序,编译后整个程序只有一个文件,大小也不过几百KB,它工作时不需Oracle RDBMS以及任何的Oracle的程序、组件,它可以直接从一个坏了数据库的数据文件中读取数据,生成IMP或SQL*Loader可以识别的文件。它观注的只是数据。存储过程、触发器、视图及建表语句这些脚本DUL是不生成的,不过如果系统表空间数据文件存在,可以通过数据字典表(sys.source$)折中的把这些脚本得到。

自Oracle 6.x这个数据库版本,For各种平台(Hp-unix,Aix,solaris,SCO Unix,Linux,windows…)的各个版本的Oracle都有Dul的相应版本。这个工具是Oracle不做技术支持的,也没有BUG的修订,它不是我们常规备份恢复操作的一个替代产品,而是在所有可能用到的手段都试过而不能解决问题时最后的一个数据挽救的方式。DUL可以用简单的一个命令卸载(unload)一个表,一个schema或整个库。DUL支持跨平台的Unload,比如可以将hp-unix平台的数据库的数据文件传到Aix平台做Unload操作。同时DUL的鲁棒性也非常的好,它不会因为数据库坏的不成样子hang住,或停在一点不动。总之,DUL是一个十分优秀的工具。

什么时侯用?
如果你的备份做的到位,可能你永远也用不到它。DUL是在一些特殊的情况下被用到的,例如在数据库没有有效的备份,系统表空间发生了损坏,而一些常规的手段(包括使用非文档参数(Undocument parameter),使用诊断事件,BBED或ORAPATCH工具修正)都无能为力无法解决问题时DUL才会被用到,它被称为last resort,即最后一种方法,也就是所有可能的方法你都试过了且不能解决问题时,才该用DUL。

哪里可以获得DUL
DUL不是一个商用化的产品,Oracle不卖、不提供也不支持它的使用。DUL只有在Oracle的内部网站才可以下载到,因此也只有Oracle的Supporter才能下载到有这个工具,如果与Oracle的Supporter熟悉,没准他私底下会给你一个,这个工具也因此有一些流落到民间,被一些人收入囊中,奉为珍宝。

不同的平台、不同版本的数据库都有相应的DUL软件,9.x及之前DUL是没有License限制的,也就是有这个工具可以无限制的使用,不过最新的DUL在这方面已经改进了,kamus说最新DUL拿到手只能用一个月。
关于这一小点稍总结一下,获得DUL有以下几种途径:
如果你是Oracle的Supporter,可以在内部网站下载,地址为:http://www.nl.oracle.com/support/dul/
如果你有Oracle的Supporter的朋友可以向他们要一个,itpub也几位斑竹都到Oracle了,如coolyl,kamus,lunar。
一些dul流落到民间,可以向有这软件的朋友要一个,不过他们不一定有你需要的那个。

使用前最好有哪些东西
数据库可能用尽各种方式启动不了,但要保证所有要挽救的数据所在的数据文件是完好的,且数据文件越新越好。数据文件的完好程度也决定了挽救回数据多少的完好程度,数据文件的坏块越来丢失的数据也越多。

最好有数据文件的列表。因为DUL工作的控制文件需要这些信息,光知道文件名是不够的,还需要数据文件所属的表空间的号(ts#),及数据文件号(rfile#),这些信息都位于v$datafile视图,因此在每次加数据文件后备份一下v$datafile视图相当必要。
应用所用到表等对象的数据字典或这些对象创建的DDL脚本。当系统表空间数据文件丢失时,DUL可以通过扫描发现表,但是无法明确哪张表叫什么名字,如果你对你的应用很了解也行,但大部分的时侯可能都不清楚扫描出来的对象对应的是哪张表,因此有对象的创建脚本是很有帮助的,存储过程、触发器、视图这些Object也可以很容易的重建回来。生成整个库的DDL脚本很容易,执行带FULL=y ROWS=n的EXP就可以了,也可以通过Dbartisan这样的工具去做。

你要对你的数据库、操作系统的有充足的了解;要有空间的准备,因为数据导出需要空间,备份原库或新库都需要空间;要有充足的耐心,特别是处理系统表空间数据文件丢失这样的情况,DBA这个工作的本身也要求这个人要胆大心细、有耐心及钻研精神。
Obj$或Dba_objects的备份,因为在无system表空间时,如果有这方面的备份会减轻很多工作。

DUL支持什么?
DUL支持分区表、索引组织表(IOT)这些选项,支持标准的数据类型及数据结构,具体如下:
支持行链接和行迁移
支持哈希和索引cluster
支持NULL列
支持LONG、RAW,DATE,NUMBER,ROWID
支持多free list group
支持多字节字符集
支持LOB类型列,不过需要注意的是,有LOB类型列的表在做DUL时输出需要为SQL*Loader格式。

DUL有什么限制和危险?
DUL毕竟是一个大小几百K的一个小工具而已,而Oracle功能越来越复杂,也因而有一些是DUL不支持或做的不完备的。前面已经提到,你的数据库可以是启动不了的,但是要Unload的数据的数据文件、数据块是保证是好的,因为DUL在Unload过程中会对数据块做检验,检验读到的数据块是不是块的,是不是属于正确的段。如果发现坏块,DUL会在屏幕显示出错误信息,同时将报错信息写到日志。

DUL不支持多级别安全标签(MLSLABEL),不支持VARRAY,object类型列,也不支持嵌套表。DUL在Unload过程中不会考虑到数据库一致性,它假定所有数据文件中的数据都是已经提交了的,没有了数据一致性的校验DUL实际做的是脏读,这是DUL比较大的缺点。不过关于这一点也是有点好处的,可以用此恢复truncate/drop误操作的表。

DUL的输出格式
以.dmp为输同格式时每表生成一个文件(owner_tablename.dmp),以sql*loader为输出格式时每表生成两个文件(owner_tablename.ctl和owner_tablename.dat)。如果设定了FILE参数,生成的文件名将会为FILEnnn.ext,如果你的操作系统不支持长文件名,FILE参数此时才会用到。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-15 23:51 , 耗时 0.087774 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表