(仅做研究使用))
恢复DELETE数据的PACKAGE操作手册篇关于package的介绍和使用演示请见《Oracle恢复DELETE数据的PACKAGE介绍篇》安装package下载链接https://download.csdn.net/download/sp60cn/92942843我将恢复delete数据PACKAGE简单集成在一个sql文件中方便直接执行创建或者自行复制sql文件中的创建语句执行也可以。sqlplus/assysdbadel_recover_basic.sql脚本就是简单的sqlplus / as sysdba进入数据库后执行创建如果不是ORACLE_SID指向的实例请修改脚本中的登录部分或是复制语句后自行执行创建。如果是CDB/PDB环境请在要恢复的源表所在的容器的SYS用户中执行创建。注意事项暂时仅支持恢复普通表暂不支持如分区表、索引组织表等类型的表。暂时仅支持恢复NUMBER, VARCHAR2, CHAR, DATE, TIMESTAMP, RAW这六种数据类型。大部分不支持的数据类型会填充为null目前已知的有CLOB、BLOB、XMLTYPE、INTERVAL等。部分不支持的数据类型可能还会导致数据读取错误目前已知的有LONG、LONG RAW。源表元数据必须存在未被 DROP若底层数据被覆盖则无法恢复。目标数据文件必须在文件系统不支持共享存储支持CDB/PDB环境目前已知适用于Oracle11g和Oracle19c期间版本和更高版应该是支持的但未经过测试。如果源表中有行迁移、行链接现象会导致恢复失败。由于测试环境有局限性不同环境可能导致失败。测试脚本的环境为Linux的Oracle19c的单机数据库。参数详解init_set 过程设置恢复时的输出模式。语法DEL_RECOVER_BASIC.INIT_SET(tracingINBOOLEANDEFAULTFALSE,loggingINBOOLEANDEFAULTTRUE);参数参数模式默认值描述tracingINFALSE恢复时是否输出详细的字段解析信息,供开发调试时使用。loggingINTRUE恢复时是否输出恢复信息如对象号、恢复出的表名、处理的数据文件、使用的目录、恢复的行数建议保持开启。使用说明init_set的设置会持续整个会话直到再次调用覆盖。init_set单独执行没有效果它是为recover_deleted_table过程服务的。在sqlplus中执行recover_deleted_table恢复时务必打开set serveroutput on否则init_set的设置不会有任何输出。若源表较大不建议开启tracing会导致恢复时间加长。示例EXECDEL_RECOVER_BASIC.init_set(FALSE,TRUE);recover_deleted_table 过程创建恢复表读取数据文件解析行内数据将指定源表的数据恢复到恢复表内。语法DEL_RECOVER_BASIC.RECOVER_DELETE_TABLE(p_ownerINVARCHAR2,p_tableINVARCHAR2,p_new_ownerINVARCHAR2DEFAULTUSER,p_new_tableINVARCHAR2DEFAULTNULL,p_ts_nameINVARCHAR2DEFAULTNULL);参数项目模式默认值描述p_ownerIN无源表所属的用户模式名称。必选。p_tableIN无源表名称。必须与 dba_tables.table_name 完全一致不能包含空格。必选。p_new_ownerINUSER恢复表所属的用户名。默认为当前用户即执行USER函数返回的用户名。可选。p_new_tableINNULL恢复表的名称。若为 NULL自动生成 R_源表名若重名则自动添加数字后缀。可选。p_ts_nameINNULL恢复表存放的表空间名称。若为 NULL则使用恢复表所属用户的默认表空间。可选。使用说明再次说明在sqlplus中执行recover_deleted_table恢复时建议打开set serveroutput on否则不会有任何输出。在SYS用户中创建在SYS用户中执行。需要预先存在指向源表数据所在数据文件的目录对象如不存在在执行RECOVER_DELETE_TABLE后会提供一个创建语句创建目录后再次执行恢复即可。恢复表会自动创建但不包含源表的约束、索引、触发器、权限等每成功恢复一行即自动提交无需用户手动 COMMIT。若恢复表名已存在脚本会自动添加数字后缀如 R_EMP_1不会覆盖已有表。每个参数的值均需全部大写若数据量大恢复时间可能会很长。示例EXECDEL_RECOVER_BASIC.recover_deleted_table(TEST,EMP,TEST);usage 过程显示包的简要帮助信息。语法DEL_RECOVER_BASIC.USAGE;示例EXECDEL_RECOVER_BASIC.usage;