Oracle数据库在无备份情况下的使用DUL数据恢复

2025-09-28 01:45:09

1、假设本场景中 D 公司的DBA由于误操作删除了TS$数据字典基表导致数据库无法启动

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, Automatic Storage Management, OLAP, Data Mining

and Real Application Testing options

 

INSTANCE_NAME

----------------

ASMME

SQL>

SQL>

SQL> select count(*) from sys.ts$;

  COUNT(*)

----------

         5

SQL> delete ts$;

5 rows deleted.

SQL> commit;

Commit complete.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

Database mounted.

ORA-01092: ORACLE instance terminated. Disconnection forced

ORA-01405: fetched column value is NULL

Process ID: 5270

Session ID: 10 Serial number: 3

Undo initialization errored: err:1405 serial:0 start:3126020954 end:3126020954 diff:0 (0 seconds)

Errors in file /s01/diag/rdbms/asmme/ASMME/trace/ASMME_ora_5270.trc:

ORA-01405: fetched column value is NULL

Errors in file /s01/diag/rdbms/asmme/ASMME/trace/ASMME_ora_5270.trc:

ORA-01405: fetched column value is NULL

Error 1405 happened during db open, shutting down database

USER (ospid: 5270): terminating the instance due to error 1405

Instance terminated by USER, pid = 5270

ORA-1092 signalled during: ALTER DATABASE OPEN...

opiodr aborting process unknown ospid (5270) as a result of ORA-1092

2、此场景中由于数据字典已经损坏,所以想要正常打开数据库是十分困难的。

此时则可以使用PRM来抽取数据库中的数据。具体步骤与场景1中的相似,用户仅仅需要输入该数据库的所有数据文件即可

 启动PRM 

在Windows下仅仅需要点击prm.bat , 在unix/linux下为SHELL运行prm.sh

出现PRM  DUL FOR ORACLE DATABASE后, 点击  工具 =》恢复向导

Oracle数据库在无备份情况下的使用DUL数据恢复

3、进入恢复向导界面后 ,点击下一步 =》字典模式 下一步 =》

下一步骤 我们要选择几个参数 : 包括Endian 字节序和DB NAME

由于ORACLE数据文件在不同的操作系统平台上采用了不同的Endian字节序格式,字节序和平台对应列表如下:

Solaris[tm] OE (32-bit)

Big

Solaris[tm] OE (64-bit)

Big

Microsoft Windows IA (32-bit)

Little

Linux IA (32-bit)

Little

AIX-Based Systems (64-bit)

Big

HP-UX (64-bit)

Big

HP Tru64 UNIX

Little

HP-UX IA (64-bit)

Big

Linux IA (64-bit)

Little

HP Open VMS

Little

Microsoft Windows IA (64-bit)

Little

IBM zSeries Based Linux

Big

Linux x86 64-bit

Little

Apple Mac OS

Big

Microsoft Windows x86 64-bit

Little

Solaris Operating System (x86)

Little

IBM Power Based Linux

Big

HP IA Open VMS

Little

Solaris Operating System (x86-64)

Little

Apple Mac OS (x86-64)

Little

 

例如在传统Unix  AIX-Based Systems (64-bit) 、HP-UX (64-bit) 上使用的是Big Endian大端字节序,则这里要选为Big Endian:

注意事项: 如果你的数据文件是在AIX(即Big Endian的)上生成的,你为了方便而将这些数据文件拷贝到Windows服务器上并使用PRM来恢复数据,那么你仍应当选择其原生的Big Endian格式。

之后需要为指定的数据文件指定其Block Size即ORACLE数据块的大小,这里根据实际情况修改即可, 例如你的DB_BLOCK_SIZE是8K,但是部分表空间指定16K作为数据块大小的,仅仅需要为那些不是8k的数据文件修改BLOCK_SIZE即可。

 

这里的OFFSET 参数主要是为了那些采用裸设备存放数据文件的场景,例如在AIX上基于普通VG的LV作为数据文件,则存在4k的OFFSET,需要在此处指定。

如果你恰巧正在使用裸设备数据文件,而又不知道OFFSET到底是多少? 则可以使用$ORACLE_HOME/bin下自带的dbfsize工具查看,如下面的例子高亮部分显示该裸设备具有4K的OFFSET

选好后点击 下一步

Oracle数据库在无备份情况下的使用DUL数据恢复

Oracle数据库在无备份情况下的使用DUL数据恢复

4、点击 选择文件,加入要修复的数据库的数据文件,之后点击加载

Oracle数据库在无备份情况下的使用DUL数据恢复

5、PRM会加载数据字典,之后主界面左侧会出现对象树形图,点击你需要的对象表并选择unload 或者dataBridge即可

Oracle数据库在无备份情况下的使用DUL数据恢复

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢