技术开发 频道

Life is DUL without it:DUL流程

【IT168技术文档】
   上一篇:http://publish.itpub.net/db/2007-11-13/200711130951031.shtml

4 DUL流程
4.1 有系统表空间数据文件时
此种情况下,操作比较容易,流程如下:
○1 依不同的系统环境和数据库环境创建init.dul和control.dul文件。
上面已经详细的说明了生成方法。
○2 启动dul,转载数据字典。
$dul
DUL>bootstrap;
○3 转载你要转载的对象,例如库、用户或某一个表
DUL>unload database;
DUL>unload user hr;
DUL>unload table hr.employees;

4.2 无系统表空间数据文件时
    这种情况下,要求你非常了解你的应用和你应用的表,此时如果你不知转载出来的数据源于哪张表,那么这些数据将没有任何用处,有如下几点麻烦需要你处理:
DUL能够猜出表的大部列的数据类型,但是表名及列名都丢失了,而且DUL猜出的列名也有可能是错的。
如果表中的一列是TRAILING NULL的,这样的列DUL是发现不了的,因为这样的列在数据库内并不存储。
被TRUNCATE/DROP掉的表可能会被找到,如果相应的空间未被重用的话。因为对于一个表的TRUNCATE/DROP操作,并不实际的去删除数据,只是把要删除的表从数据字典移除而已。
空表(没有数据)将被遗漏。

这种情况,操作流程如下:
○1 依不同的系统环境和数据库环境创建init.dul和control.dul文件。
○2 启动DUL,扫描数据库生成成SEG.dat和EXT.dat文件。
DUL>scan database;
○3 告诉DUL用scan database生成的SEG.dat和EXT.dat做为输入文件,并以些扫描表段及EXTENT信息。
DUL>alter session set use_scanned_extent_map=TRUE;
DUL>scan tables;

DUL>scan extents;
○4 凭借你对应用的了解,辨识出scan tables或scan extents生成的结果,需要注意的是这是一个非常艰苦的工作,且需要充足的耐心。
○5 转载出你认识的表,例如,可以用如下的命令:
DUL> unload table departments
2 (department_id number
3 ,department_name varchar2(30)
4 ,manager_id number
5 ,location_id number)
6 storage (objno 31444);
. unloading table DEPARTMENTS 27 rows unloaded

0
相关文章