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源代码,所以必须被严格控制
PRM-DUL(ParnassusData Recovery Manager-Data Unloader)
诗檀软件(Maclean 所在的公司)开发了DUL的同类产品 ,PRM-DUL。 在DUL的基础上引入了图形化界面GUI和DataBridge(数据无需落地成为SQLLDR文件,直接像DBLINK一样传输到目标数据库)等功能;同时由于PRM-DUL是基于JAVA编写的,所以可以跨所有平台,包括HP-UX。
PRM-DUL的免费版本默认每张表只能抽取一万行数据,如果你的数据库很小以至于没有超过一万行数据的表,那么可以直接使用免费的PRM-DUL。 如果你的数据库较大且数据十分重要,那么可以考虑购买企业版的PRM-DUL,企业版PRM-DUL 针对一套数据库提供一个License软件使用许可证,一个License的价格是7500元人民币(含17%增值税)。
prm-dul工具测试。(以truncate bable为例)
以下我找了两张表一张大于10000行,一张小于10000行。
- 查看表所在的数据文件,以供prm-dul在恢复时选择恢复文件。
select count(*) from admin.FA_CHECK_ACCEPT; --5209
select count(*) from admin.MSI_FA_ADDITIONS_SETPOINT; --206202
select owner,tablespace_name,file_id,extent_id,block_id,blocks from dba_extents where owner='ADMIN' and segment_name='FA_CHECK_ACCEPT';--4
select owner,tablespace_name,file_id,extent_id,block_id,blocks from dba_extents where owner='ADMIN' and segment_name='MSI_FA_ADDITIONS_SETPOINT';
select file#,name from v$datafile where file#=4;----(dba_extents.file_id)
- truncate 表数据
truncate table admin.FA_CHECK_ACCEPT;
truncate table admin.MSI_FA_ADDITIONS_SETPOINT;
select count(*) from admin.FA_CHECK_ACCEPT; --0
select count(*) from admin.MSI_FA_ADDITIONS_SETPOINT; --0
- prm-dul 数据unload(工具的具体操作看以下文档,此处忽略)
https://zcdn.parnassusdata.com/prm03.pdf
https://zcdn.parnassusdata.com/prm04.pdf - sqlldr导入
select userenv('language') from dual;--AMERICAN_AMERICA.AL32UTF8
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
sqlldr system/oracle control=admin.fa_check_accept.ctl direct=y
sqlldr system/oracle control=admin.msi_fa_additions_setpoint.ctl direct=y
具体操作如下:
SQL> !date
Thu Aug 20 07:43:44 CST 2020
SQL> select count(*) from admin.FA_CHECK_ACCEPT;
COUNT(*)
----------
5209
SQL> select count(*) from admin.MSI_FA_ADDITIONS_SETPOINT;
COUNT(*)
----------
206202
SQL> truncate table admin.FA_CHECK_ACCEPT;
Table truncated.
SQL> truncate table admin.MSI_FA_ADDITIONS_SETPOINT;
Table truncated.
SQL> select count(*) from admin.FA_CHECK_ACCEPT;
COUNT(*)
----------
0
SQL> select count(*) from admin.MSI_FA_ADDITIONS_SETPOINT;
COUNT(*)
----------
0
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
SQL> select count(*) from admin.FA_CHECK_ACCEPT;
COUNT(*)
----------
5209
SQL> select count(*) from admin.MSI_FA_ADDITIONS_SETPOINT;
COUNT(*)
----------
9977
SQL>
总结:笔者安装的软件是免费版的,所以最多只能恢复10000行数据。
小表5209行数据全部恢复。
大表206202只恢复了9977行,接近一万行。至于为什么比10000少23行,这个估计得问下客服。
建议,生产中如果需要用到此工具,最好个license。