PRM-DUL Whitepaper ParnassusData Recovery Manager For Oracle Database User Guide V0.4


ParnassusData Recovery Manager (PRM) is an enterprise-level Oracle database recovery tool, which can extract and restore database datafile from Oracle 9i, 10g, 11g, 12c directly without any SQL execution on Oracle database instances. ParnassusData Recovery Manager is a Java-based green software without any installation. Download it, and click to run.


PRM adopts the convenient GUI for any command (as shown in Picture1). There is no need to learn additional scripts or master any skill in Oracle data structure. It is all integrated in Recovery Wizard of the tool.



Download PRM-DUL:




Why PRM is necessary?

Isn’t RMAN enough for ORACLE database recovery? Why do the users need PRM for Oracle recovery? You may ask.

In the growing IT systems within enterprises, database size is expanding geometrically. Oracle DBAs are facing the problems that disks are insufficient for full backup, and tape storages take much more time than usual expectation.



“For Database, backup 1st” is the first lesson for DBAs, however, the fact is that: disk space for backup is not sufficient, new storage device is still on the way, and even the backup does not actually work in the process of data recovery.



In order to solve the above problems, PD Recovery Manager, based on its understanding of the data structure within Oracle DB and core startup process, can not only solve cases such as system tablespace lost without any backup, data dictionary table misoperation, and database unable to be opened caused by inconsistent data dictionary due to power outages, but also restore data from Truncated/Deleted business data tables.



No matter you are a professional DBA or new fish in Oracle world, you can master this user-friendly tool immediately. PRM is easy to install and use. You don’t need to have any deep Oracle knowledge or skills in scripts. All you need to do is to click-by-click and you will finish all recovery processes.



Comparing the traditional recovery tool Oracle DUL, which is an Oracle internal tool and only for Oracle employee usage, PRM can be used by any     kind of IT professionals or geeks. It greatly shortens the failure time from database failure to complete data recovery, and cuts down the total cost of   enterprise.



There are 2 ways for data recovery by PRM:

By traditional way, data has to be extracted to text file and then inserted to a new DB by SQLLDR tools, which takes double time and occupies double storage size.



Another way that we strongly recommend for you is to use the unique data bridge feature of ParnassusData Recovery Manager. It can extract data from original source database and then insert into new destination database without any inter-media. This is a truly time and storage saver.



Oracle ASM is becoming popular in enterprise database implementation, due to its advantage in high performance, cluster support, and convenient management. However, for many IT professionals, ASM is a black box. Once the data structure of certain Disk Group in ASM is corrupted so that the Disk Group cannot be mounted, which means that all data is locked in ASM. In this circumstance without PRM, only senior Oracle experts can manually patch ASM internal structure, but it is too expensive and time-consuming for normal Oracle users.




PRM now can support two kinds of ASM data recovery:



  1. Once Disk Group cannot be mounted, PRM can read metadata, and clone ASM file from Disk Group.
  2. Once Disk Group cannot be mounted, PRM can read ASM file and extract data, which supports both traditional data export and data bridge.


PRM-DUL  Software Introduction

ParnassusData Recovery Manager (PRM) was based on Java development, which ensured that PRM can run across platforms. No matter AIX, Solaris, HPUNIX, Red-Hat, Oracle Linux, SUSE, or Window, It can be run  smoothly. Whether AIX, Solaris, HPUX and other Unix platforms, Redhat, Oracle Linux, SUSE and other Linux platforms, or Windows can run PRM directly.



OS & Platform that PRM Supports:




Platform Name Supported
Solaris Sparc ü
Solaris X86 ü
Linux X86 ü
Linux X86-64 ü
MacOS ü



Database Version that PRM Supports:



Oracle 7 û
Oracle 8 û
Oracle 8i û
Oracle 9i ü
Oracle 10g ü
Oracle 11g ü
Oracle 12c ü





Considering some old servers run early OS like AIX 4.3, on which the latest JD cannot be installed. Any platforms that can run JDS 1.4 can run PRM.



In addition, Oracle 10g database is integrated with JDK 1.4, and 11g with JDK 1.5. Therefore, users can run PRM directly without any JDK updates or installation.



For users who needs JDK 1.4, please download from below link: rchive-downloads-javase14-419411.html



For less bug and performance purpose, ParnassusData strongly recommend users to use Open JDK on Linux.



Open JDK for Linux download Link:



Open jdk x86_64 for Linux   5
Tzdata-java x86_64 for Linux 5
Open jdk x86_64 for Linux   6
Open jdk x86_64 for Linux   6
Open jdk x86 for Linux 5
Tzdata-java x86 for Linux  5
Open jdk x86 for Linux 6
Tzdata-java x86 for Linux  6




JDK on Other platforms download link:



JDK Windows x86
JDK Windows x86-64
Solaris JDK 7 x86-64bit
Solaris JDK 7 x86-32bit
Solaris JDK 7 Sparc



The minimum JAVA software environment for PRM is JDK 1.4. Parnassus Data strongly recommends you to run it on JDK 1.6, since JDK 1.4, it has greatly improved performance on JAVA procedure.

Therefore, the recovery speed of PRM under JDK 1.6 is faster than JDK 1.4.




PRM hardware requirement:



CPU At least 800 MHZ
Memory At least 512 MB
Disk At least 50 MB



PRM recommended hardware configuration:



Memory 2 GB
Disk 2 GB




Languages that PRM Supports:





Language Character Set Encoding
Simplified/Traditional Chinese  




Simplified/Traditional Chinese  




Simplified/Traditional Chinese  




Simplified/Traditional Chinese  




Simplified/Traditional Chinese  






Simplified/Traditional Chinese  




Simplified/Traditional Chinese  




Japanese JA16SJIS SJIS
Japanese JA16EUC EUC_JP
Japanese JA16DBCS CP939
Korean KO16MSWIN949 MS649
Korean KO16KSC5601 EUC_KR
Korean KO16DBCS CP933
French WE8MSWIN1252 CP1252
French WE8ISO8859P15 ISO8859_15
French WE8PC850 CP850
French WE8EBCDIC1148 CP1148
French WE8ISO8859P1 ISO8859_1
French WE8PC863 CP863
French WE8EBCDIC1047 CP1047
French WE8EBCDIC1147 CP1147
Deutsch WE8MSWIN1252 CP1252
Deutsch WE8ISO8859P15 ISO8859_15
Deutsch WE8PC850 CP850
Deutsch WE8EBCDIC1141 CP1141
Deutsch WE8ISO8859P1 ISO8859_1
Deutsch WE8EBCDIC1148 CP1148
Italian WE8MSWIN1252 CP1252
Italian WE8ISO8859P15 ISO8859_15
Italian WE8PC850 CP850
Italian WE8EBCDIC1144 CP1144
Arabic AR8MSWIN1256 CP1256
Arabic AR8ISO8859P6 ISO8859_6
Arabic AR8ADOS720 CP864
Spanish WE8MSWIN1252 CP1252
Spanish WE8ISO8859P1 ISO8859_1



Spanish WE8PC850 CP850
Spanish WE8EBCDIC1047 CP1047
Portuguese WE8MSWIN1252 CP1252
Portuguese WE8ISO8859P1 ISO8859_1
Portuguese WE8PC850 CP850
Portuguese WE8EBCDIC1047 CP1047
Portuguese WE8ISO8859P15 ISO8859_15
Portuguese WE8PC860 CP860




Features that PRM supports:



Features Supported
Cluster Table YES
Inline or out-of-line LOBS, different chunk version and size, LOB partition YES
Heap            table,           partitioned            or non-partitioned YES
Partition and Non-partition YES
Table With chained rows ,migrated rows, intra-block  chaining YES
Bigfile Tablespace YES
ASM Automatic Storage Management 10g,11g,12c,diskgroups  are dismounted YES
ASM      11g    Variable Extent Size YES
IOT, partitioned or non-partitioned YES(Future)
Basic Compressed Heap table YES(Future)
Advanced Compressed Heap Table NO
Exudates HCC Heap Table NO
Encrypted Heap Table NO
Table with Virtual Column NO




Attention: for virtual column、11g optimized default column, data export has no problem, but it may lose the corresponding column. These two are new features after 11g with less users.





Data type that PRM supports:



Data Type Supported
Binary XML No
Collections (including VARRAYS and nested tables) No
Date Yes
LOBs stored as SecureFiles Future
Multimedia data types (including Spatial, Image, and Oracle Text) No
Number Yes
User-defined types No
XMLType stored as CLOB No
XMLType stored as Object Relational No




Support for ASM by PRM:





Function Supported
Directly extract Table data from ASM YES
Directly copy datafile from ASM YES
Repair ASM metadata YES
Draw ASM Structure by  GUI Future


PRM installation and start-up

It is not necessary to install PRM since it is a Java-based green software. Users simply need to extract the ZIP package and click to RUN.



ParnassusData recommends you to run PRM with command line, from which you can get more diagnostic information.



Starting method under Windows:



  1. Make sure you have installed JDK correctly and add JAVA to environment variable.
  2. Double click ‘prm.bat’ under the folder.


prm.bat will start PRM in the background.

Then, it pops up PRM-DUL main interface:




In Linux/Unix, use X Server for GUI


  1. Make sure you had installed JDK and add Java to profile
  2. cd to PRM-DUL folder, and run./ to start the tool




Starting method under Linux/Unix:



Under Linux/Unix, use X Server for GUI



  1. Make sure you have installed JDK correctly and add Java to environment variable
  2. Cd to the directory of PRM, and run./ to start the main interface of the program





PRM License Registration

ParnassusData Recovery Manager (PRM) needs license for full use. ParnassusData provide the community version of PRM for user testing and demo. (Community version has no limits on ASM clone, and we will add more free features in it.)



It needs license for full use of PRM. Now, we provide two kinds of license for clients: Standard Edition and Enterprise Edition, and specifications are as follows.




Clients can purchase PRM license from official website:, and it needs Database name. After your purchasing, you will receive an email which includes a DBNAME and License Key.



Once you obtain the License Key, please register in the software as below,

  1. In the Menu,  Help  => Register
  2. Input DB NAME and you License Key, then click Register button


After registration, you don’t need to input license key again on your next boot.




Your registration information can be found in Help=>about





Case Study on Oracle database recovery via PRM

CASE 1: General recovery of truncated table by mistake


User D had truncated all data in a table by mistake due to mistaking test environment library for product database. The DBA tried to recover table from RMAN backup, and accidently the backup is unavailable. Therefore DBA decided to use PRM for rescuing all truncated data.

Since all database system files under the environment are available and healthy, DBA just needs to load SYSTEM tablespace datafile in dictionary mode and datafile in TRUNCATED table. For example:



create table ParnassusData.torderdetail_his1	tablespace	users as select * from parnassusdata.torderdetail_his;

SQL> desc	ParnassusData.TORDERDETAIL_HIS
Name	Null?	Type
----------------------- -------- --------------


select count(*) from ParnassusData.TORDERDETAIL_HIS;


select bytes/1024/1024 from dba_segments where segment_name='TORDERDETAIL_HIS' and owner='PARNASSUSDATA';


SQL>  truncate  table ParnassusData.TORDERDETAIL_HIS;

Table truncated.

SQL> select count(*) from ParnassusData.TORDERDETAIL_HIS;


Run PRM, and select Tools =>Recovery Wizard



Click Next



Since client did not use ASM storage in the scenario, just select ‘Dictionary Mode’:



Next, we  need  to  select  a few parameters: Endian byte- order  and DBNAME.



Oracle datafiles adopt different Endian byte orders on different OS, please choose accordingly:


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

In traditional UNIX, AIX (64-bit), UP-UNIX (64-bit), it uses Big Endian byte order.




Usually, Linux X86/64, Windows remain the default Little Endian:


Attention: if your data file was generated on AIX, and you want to copy the datafile to Windows and recover data by PRM, you should select the original Big Endian mode.
Since the data file is on Linux X86, we select Little for Endian, and input the database name.

license key is generated based on DB_NAME found in datafile header)


Click “Next” =>Click “Choose Files”



If the database is not too big, you can select all data files together; if the database is very big and DBA knows the data location, you can just select SYSTEM tablespace datafile(necessary) and specified datafile.


Attention: make sure the GUI Supports Ctrl + A & Shift short keys:





Then specify the Block Size (i.e. Oracle data block size) based on the actual situation. For example, if the default DB_BLOCK_SIZE is 8K, but some tablespace specify 16k as its block size, then users just need to modify the block size for datafile whose block size are not 8k.


OFFSET setting are mainly for raw device storage mode, for example: on AIX, LV based on normal VG as datafile, the offset will be 4k OFFSET.


If you are using raw device but don’t know what the OFFSET is, you can use dbfsize tool under $ORACLE_HOME/bin to check, as shown in the picture below.


$dbfsize /dev/lv_control_01


Database file: /dev/lv_control_01

Database file type: raw device without 4K starting offset Database file size: 334 16384 byte blocks


Since the block size of all data file here is 8K and there is no OFFSET, please click Load:




During Load phase, PRM read Oracle data dictionary directly from system tablespace, and recreate a new data dictionary in embedded database, which enables PRM to process all kinds of data in Oracle DB.


After loading, information such as the database character set and the national character set will be output in the background:


Attention: PRM supports multiple languages and multiple character set of Oracle DB. However,
the prerequisite is the OS have installed specified language packages. For example, if you didn’t install Chinese language package on Windows, and Oracle database character set are independent and support ZHS16GBK, PRM would display Chinese as messy code. Once the Chinese language package is installed on OS, PRM can display multi-byte character set properly.

Similarly, it needs to install font-Chinese language package on Linux.

[oracle@mlab2 log]$ rpm -qa|grep chinese


After loading, on the left side of PRM GUI, it will display a tree diagram grouped by database users.

Click Users, you can find more users. For example, if users want to recover a table under PARNASSUSDATA SCHEMA, click PARNASSUSDATA and double click the table name:


The TORDERDETAIL_HIS table has been truncated before,   so  it    won’t  show any data.

Now right-click and select Unload truncated data on the table:



PRM will scan the tablespace and extract data from truncated table.





As shown in the above picture, 984359 record have been exported from the truncated TORDERDETAIL_HIS, and stored under the specified path.

In addition, it generated SQLLDR control file for text data importing.


$ cd /home/oracle/PRM-DUL/PRM-DULdata/parnassus_dbinfo_PARNASSUSDATA/$ ls -l ParnassusData*-rw-r–r– 1 oracle oinstall       495 Jan 18 08:31 ParnassusData.torderdetail_his.ctl-rw-r–r– 1 oracle oinstall 191164826 Jan 18 08:32 ParnassusData.torderdetail_his.dat.truncated 

$ cat ParnassusData.torderdetail_his.ctl


INFILE  ‘ParnassusData.torderdetail_his.dat.truncated’


INTO TABLE ParnassusData.torderdetail_his




“SEQ_ID” ,














“N_QTY” ,











When you import data to original table, ParnassusData strongly recommends you to modify the SQLLDR table name as a temporary table, thus it would not overwrite the original environment.


$ sqlldr control=ParnassusData.torderdetail_his.ctl direct=yUsername:/ as sysdba//user SQLLDR to import data//Minus can be used for data comparing

select * from ParnassusData.torderdetail_his minus select * from parnassus.torderdetail_his;


no rows selected



After comparing the tested truncate case table with original data table, it is found that the records are exactly the same.

It demonstrates that PRM has successfully and completely recovered the record on truncated table.


CASE 2: Recovery of MIS-truncated table by DataBridge

In Case 1, we used traditional unload+sqlldr method for data recovery, but in fact ParnassusData strongly recommend you to use DataBridge Feature for recovery.


Why use DataBridge?



  • Traditional unload+sqlldr method means that a copy of data needs to be saved as flat file on file system first, the data has to be loaded into Unicode text file and then inserted into destination database by sqlldr, which will take double storage space and double
  • DataBridge can extract data from source DB and export to destination DB without any
  • The data sent to destination DB by databridge is structured, users can immediately use SQL statement to verify its integrity and consistency.
  • If the source and destination database locate on different servers, the read/write IO will be balanced on two servers, and MTTR will be
  • If DataBridge is used in truncated table recovery, it is very convenient for the truncated data to be exported back to problem database


DataBridge is very easy and convenient to use. Right click the table on the left side, and select DataBridge:



For the first time to use DataBridge, DB connection information is necessary, which is similar with SQL Developer connection, including DB host, Port, Service_Name and user login information.

Attention: DataBridge will save data to the specified schema given in the DB connection.



For example, the above G10R25 connection, the user is maclean, and the corresponding Oracle Easy Connection is


After inputting the account/connection information, you can use the Test button for connection testing. If the message “Connect to DB server successfully “is returned, the connection is done and click to save.



After saving connection, and then enter the DataBridge main interface, first select the just added Connection G10R25 under the drop-down list of DB Connection:


If your DB connection is not in the drop down list, please click DB connection Button, which is highlighted in red.



After selecting DB Connection, the Tablespace dropdown list will be selectable:



Notes on recovering truncated/dropped table by DataBridge: when recovering truncated/dropped data and inserting back to source DB, users should choose another tablespace which differs from the original tablespace. If exporting data into the same tablespace, oracle will reuse the space which stores truncated/dropped table, and make data overwritten, thus we may lose the last resort to recover the data.

For example, we truncated a table and now use DataBridge to recover the data back to source database, but we do not want to use the original table name, for example, the original table name is torderdetail_his. Then the user can select “if need to remap table” and fill in the appropriate target table name as below:




Attention: 1) For destination DB which had the corresponding table name, PRM would not recreate a table but append all recovered data. 2) For destination DB which did not have corresponding table name, PRM would try to create table on specified tablespace and insert recovered data.


In this case, we need to recover truncated data, so please select “if data truncated”, Or, PRM will execute regular data extraction, which cannot extract the truncated data.





The mechanism of truncating data is: Oracle will only update table DATA_OBJECT_ID in data dictionary and segment header. And the real data will not be overwritten. Due to the difference between dictionary and DATA_OBJECT_ID, Oracle server process will not read data that was truncated but not yet overwritten while scanning table.


PRM will try to scan 10M-bytes blocks behind the table’s segment header, if some blocks with smaller DATA_OBJECT_ID than the object’s current DATA_OBJECT_ID were found, then PRM thinks it finds something useful.




There is a blank input field called “if to specify data object id”, which enables the user to input Data Object ID to be recovered. Generally, you don’t need to input any value, unless the recovery does not work. We suggest users contact ParnassusData for help.


Click the DataBridge button, then it will start extracting if the configuration is done.



DataBridge will display the successfully rescued rows and elapsed time.




Case 3: DB cannot be opened caused by corrupted Oracle Data Dictionary


DBA of Company D deleted SYS.TS$ (A bootstrap Table) by mistake, which causes Oracle DB cannot be opened.

Oracle Database 11g Enterprise Edition Release – 64bit ProductionWith the Partitioning, Automatic Storage Management, OLAP, Data Miningand Real Application Testing optionsINSTANCE_NAME






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






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




In this case, data dictionary had been damaged, so it would be very hard to open the database normally.


Then, we can use PRM to rescue data in DB. Follow the steps as below:




  1. Recovery Wizard
  2. Select Data Dictionary Mode
  3. Choose Big or Little Endian , and input DB NAME
  4. Click Load for database loading
  5. Restore the data in the table according to actual demand




Case 4: Mistakenly deleted or lost SYSTEM tablespace


A System Administrator of company D deleted SYSTEM tablespace by mistake, which caused DB unable to be opened. Unfortunately, there is no RMAN backup available. Therefore, company D try to use PRM to recover all data.


In this case, run PRM, enter Recovery Wizard, and select “Non-Dictionary mode”:




In Non-dictionary mode, we have to select User Specified Character Set and National Character


Set. This is because the character set information of database cannot be obtained due to the lost system tablespace.


Similar to case 1, select all data (excluding temp file) and set correct Block Size and OFFSET.


Then click the scan button. PRM will scan all segment header and extents in datafile, and record it into SEG$.DAT and EXT$.DAT. In Oracle, each partition table or non-partition table has a segment header. Once we find segment header, we could find the whole table extent map information. Through extent map, we can get all record on the table.


There is one exception, for example, there is one non-partition table that is stored in two database files. The segment header and half of data are stored in datafile A, and the others are stored in datafile B. But for some reasons, both system tablespace and datafile A are lost, PRM can’t find segment header associated with problem table. Instead, it can scan datafile B to get the rest extent map.

In order to recover data via segment header and extent map in no-dictionary mode.

PRM will create two files: SEG$.DAT (stores segment header info) and EXT$.DAT (stores extent info), and record them in PRM embedded database.




After scaning, there appears the database icon on the left. Now, there are 2 options:

1、 Scan Tables From Segments:

  • System tablespace is lost, but all application data tablespace exists

2、 Scan Tables From Extents

  • Doesn’t apply to data recovery of truncated data in Dictionary Mode.
  • Both system tablespace and datafile of segment header are lost.


It is not necessary to first use “Scan Tables From Extents” mode, unless you can’t find the needed data by “Scan Tables From Segment “mode.


Scan tables from segments should be your first choice.





After scanning tables from segments, click the tree diagram on the left.


Scan Tables is for constructing the data based on segment header in SEG$. Each node in the diagram represent a data segment, which is named by DATA OBJECT ID recorded in obj+ segment.

Click on a node and observe the right side of main interface:





Intelligent field type analysis


Because of SYSTEM tablespace lost, there is not data structure information available in NO-Dictionary mode. The structure information includes field name and field type of the table. All these are stored in dictionary instead of table. Therefore, PRM needs to guess every field type.

PRM uses the advanced JAVA pre-analysis algorithm, and can parse up to 10 kinds of main data types.、


Intelligent analysis can successfully guess more than 90% of columns in most of cases.


The meaning of each field on the right side:


  • Col1 no
  • Seen Count


  • String Nice
  • Number Nice
  • Date Nice
  • Timestamp Nice
  • Timestamp with timezone Nice


Sample Data Analysis:



Intelligence Analysis will analyze 10 records and display the results. These results will help client to know the column information.



If the records on data segments are less than 10, it will displays all the records.



If PRM cannot recognize the column’s data type, you can specify the data type by yourself.


So far, PRM does not support below types: XDB.XDB$RAW_LIST_T、XMLTYPE、User-defined type



Unload Statement:

Here are the UNLOAD statements PRM generated, and these statements can be only used by PRM development team and supporting engineers of ParnassusData.


In “Non-Dictionary Mode”, the normal mode and Data Bridge are also applicable. Compared with” Dictionary Mode”, the user can perform the field type by themselves when using data bridge in Non-Dictionary Mode.  As below picture, the field type is UNKNOW. The field types might be types that PRM doesn’t supported yet, for instance:  XML.


If the user knows the data type in this table (from schema design documents), it is necessary to specify the correct column types manually.


CASE 5: Deleted System Tablespace and Part of User tablespace datafile by mistake


The SA of Company D deleted the system tablespace and part of user tablespace datafile by mistake.

In this case, part of tablespace datafile were deleted, and they might include datafile which stored segment header. Therefore it is better to use “Scan Tables From Extents” than” Scan Tables From Segment Header”.


The brief steps are as follows:


  1. Enter Recovery Wizard, select No-Dictionary mode, and added all usable data file. Then perform scan
  2. Select database, and right click on Scan Tables From Extents
  3. Analyze the data and implement data extraction and Data Bright
  4. Following steps are the same with Case 4


CASE 6: Copy DB datafile from damaged ASM diskgroup

The Company D begins to uses ASM instead of other file system. Since there are many bugs in the version it uses, causing that ASM DISKGROUP cannot be mounted and still does not work after repairing ASM Disk Header.

In this case, user can use the ASM Files Clone feature of PRM to rescue datafile from damaged ASM DiskGroup directly.


  1. Open main interface, and select ASM File(s) Clone under Tools:



Enter ASM   Disks   Window,  click  SELECT…to  add  ASM  Disks, for  example:

/dev/asm-disk5(linux). Then click ASM  analyze.





ASM Files Clone will analyze the specified ASM Disk header, in order to find corresponding files in Disk group and the File Extent Map. All of the information will be recorded into PRM embedded database for future use. PRM can collect, analyze and store all Metadata, and improve the basic functions of PRM in various forms, showing to users by diagram.


After ASM Analyze, PRM will find the file list in Disk groups. So users can select the datafile/archivelog which need to be cloned to destination folder


Click ASM Clone to start file cloning…


There is a progress bar of file cloning.


ASM File Clone log as below:



Preparing selected files…Cloning +DATA2/ASMDB1/DATAFILE/TBS2.256.839732369:……………………..1024MB………………………………..2048MB………………………………..3072MB


















Cloned size for this file (in byte): 21475885056


Cloned successfully!



Cloning +DATA2/ASMDB1/ARCHIVELOG/2014_02_17/thread_1_seq_47.257.839732751:


Cloned size for this file (in byte): 29360128


Cloned successfully!



Cloning +DATA2/ASMDB1/ARCHIVELOG/2014_02_17/thread_1_seq_48.258.839732751:


Cloned size for this file (in byte): 1048576


Cloned successfully!





All selected files were cloned done.


It is necessary to validate cloned data via the “dbv” or “rman validate” command, for example:

rman target /RMAN> catalog datafilecopy ‘/home/oracle/asm_clone/TBS2.256.839732369.dbf’;cataloged datafile copy

datafile copy file name=/home/oracle/asm_clone/TBS2.256.839732369.dbf RECID=2 STAMP=839750901


RMAN> validate datafilecopy ‘/home/oracle/asm_clone/TBS2.256.839732369.dbf’;


Starting validate at 17-FEB-14

using channel ORA_DISK_1

channel ORA_DISK_1: starting validation of datafile

channel ORA_DISK_1: including datafile copy of datafile 00016 in backup set

input file name=/home/oracle/asm_clone/TBS2.256.839732369.dbf

channel ORA_DISK_1: validation complete, elapsed time: 00:03:35

List of Datafile Copies


File Status Marked Corrupt Empty Blocks Blocks Examined High SCN

—- —— ————– ———— ————— ———-

16   OK     0              2621313      2621440         1945051

File Name: /home/oracle/asm_clone/TBS2.256.839732369.dbf

Block Type Blocks Failing Blocks Processed

———- ————– —————-

Data       0              0

Index      0              0

Other      0              127


Finished validate at 17-FEB-14



How to use PRM in ASM environment with ASMLIB?

asmlib related ASM DISK will be stored in OS as ll /dev/oracleasm/disks.

For example: Add files under /dev/oracleasm/disks into PRM ASM  DISK


$ll /dev/oracleasm/diskstotal 0brw-rw—-  1 oracle dba 8,  97 Apr 28 15:20 VOL001brw-rw—-  1 oracle dba 8,  81 Apr 28 15:20 VOL002brw-rw—-  1 oracle dba 8,  65 Apr 28 15:20 VOL003brw-rw—-  1 oracle dba 8,  49 Apr 28 15:20 VOL004

brw-rw—-  1 oracle dba 8,  33 Apr 28 15:20 VOL005

brw-rw—-  1 oracle dba 8,  17 Apr 28 15:20 VOL006

brw-rw—-  1 oracle dba 8, 129 Apr 28 15:20 VOL007

brw-rw—-  1 oracle dba 8, 113 Apr 28 15:20 VOL008


CASE 7: DB stored in ASM cannot be opened

One of CRM database in company D can’t be opened due to I/O error in a few disks that are added into ASM diskgroup, which generated some corrupted block in system tablespace datafile, and caused DB cannot be opened.


In this case, we can use PRM ASM Diskgroup to clone all datafile out of ASM.



Or, users can also use “Dictionary Mode(ASM)” to recover data from this ASM environment . Steps are as below:


  1. Recovery Wizard
  2. Dictionary Mode(ASM)
  3. Add ASM DISK (all ASM DISK in the ASM Disk Group that you want to recover)
  4. Click ASM analyze
  5. Select suitable Endian
  6. Select the needed datafile from the datafile lists by ASM analyze, or click “select all”
  7. Click “load”, following steps are the same with case3








CASE 8: Recovery of Mistakenly deleted or Lost system tablespace in ASM 

The operation staff of Company D deleted system tablespace FILE#=1 datafile and user tablespace by mistake, causing the database cannot be opened.

In this case, users can use” Non-Dictionary Mode (ASM)” to recover data.



Steps are as below:



  1. Recovery Wizard
  2. Non-Dictionary Mode (ASM)
  3. Add necessary ASM Disk
  4. Click ASM analyze
  5. Select the suitable Endian and Character set. (Manually select character set due to Non-Dictionary Mode)
  6. Select all data file, or click “Select all”
  7. Click “scan”, following steps are the same with Case 3







CASE 9: Data Recovery of Dropped Tablespace

Staffs of Company D dropped a tablespace(DROP TABLESAPCE INCLUDING CONTENTS) by mistake. They want to recover data resided in that tablespace, but there is no RMAN backup.

Now we can use PRM in No-Dictionary mode to recover data. In this way, we can recover most of the data. However, the data is not mapping to the dictionary. Users need to manually recognize the table. Since it changed data dictionary by DROPPING TABLE and deleted objects in OBJ$, we cannot know the corresponding relations between DATA_OBJECT_ID and OBJECT_NAME. Below is the instruction of getting mapping.


select tablespace_name,segment_type,count(*) from dba_segments where owner=’PARNASSUSDATA’  group by tablespace_name,segment_type;TABLESPACE SEGMENT_TYPE      COUNT(*)———- ————— ———-USERS      TABLE                  126

USERS      INDEX                  136


SQL> select count(*) from obj$;







SQL> select current_scn, systimestamp from v$database;







25-4月 -14 下午 +08:00




SQL> select file_name from dba_data_files where tablespace_name=’USERS’;







SQL> drop tablespace users including contents;





The volume is entertainment in drive H and SN is A87E-B792




The drive can not find the file



Here, we can use file recovery tools, for example: Undeleter on Windows, to restore the accidentally deleted datafile.



Start up PRM => recovery Wizard => No-Dictionary mode




For it is in No-Dictionary mode, please select the correct character set manually.

Add the recovered files and Click scan.



Then scan the table from the segment head/panel. If it fails to find all of the table from segment head, try to use extend scan:


Now you can see lots of tables named OBJXXXXX, which is a combination of “OBJ” and

DATA_OBJECT_ID.     We   need   some   technicians   who are familiar   with schema design and application data, they can match this table with application tables through browsing sample data analysis.



If no one can help clarify the relationship between data and table, try the following methods:


In this case, just the tablespace is dropped and Oracle still works, so we can use FLASHBACK QUERY to get the mapping between DATA_OBJECT_ID and table name.

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





SQL> select count(*) from sys.obj$ as of scn 1895940;

select count(*) from sys.obj$ as of scn 1895940



ORA-01555: Snapshot is too old,


Try to use DBA_HIST_SQL_PLAN of AWR and find the mapping between OBJECT# and OBJECT_NAME in recent 7 days.



NAME                                        NULL? TYPE

—————————————– ——– ———————–

DBID                                      NOT NULL NUMBER

SQL_ID                                    NOT NULL VARCHAR2(13)

PLAN_HASH_VALUE                           NOT NULL NUMBER

ID                                        NOT NULL NUMBER

OPERATION                                          VARCHAR2(30)

OPTIONS                                            VARCHAR2(30)

OBJECT_NODE                                        VARCHAR2(128)

OBJECT#                                            NUMBER

OBJECT_OWNER                                       VARCHAR2(30)

OBJECT_NAME                                        VARCHAR2(31)

OBJECT_ALIAS                                       VARCHAR2(65)

OBJECT_TYPE                                        VARCHAR2(20)

OPTIMIZER                                          VARCHAR2(20)

PARENT_ID                                          NUMBER

DEPTH                                              NUMBER

POSITION                                           NUMBER

SEARCH_COLUMNS                                     NUMBER

COST                                               NUMBER

CARDINALITY                                        NUMBER

BYTES                                              NUMBER

OTHER_TAG                                          VARCHAR2(35)

PARTITION_START                                    VARCHAR2(64)

PARTITION_STOP                                     VARCHAR2(64)

PARTITION_ID                                       NUMBER

OTHER                                              VARCHAR2(4000)

DISTRIBUTION                                       VARCHAR2(20)

CPU_COST                                           NUMBER

IO_COST                                            NUMBER

TEMP_SPACE                                         NUMBER

ACCESS_PREDICATES                                  VARCHAR2(4000)

FILTER_PREDICATES                                  VARCHAR2(4000)

PROJECTION                                         VARCHAR2(4000)

TIME                                               NUMBER

QBLOCK_NAME                                        VARCHAR2(31)

REMARKS                                            VARCHAR2(4000)

TIMESTAMP                                          DATE

OTHER_XML                                          CLOB



For exmaple:


select object_owner,object_name,object# from DBA_HIST_SQL_PLAN where sql_id=’avwjc02vb10j4′


OBJECT_OWNER         OBJECT_NAME                                 OBJECT#

——————– —————————————- ———-


PARNASSUSDATA        TORDERDETAIL_HIS                              78688




Use below scrip for the mapping relationship between OBJECT_ID and OBJECT_NAME


Select * from

(select object_name,object# from DBA_HIST_SQL_PLAN

UNION select object_name,object# from GV$SQL_PLAN) V1 where V1.OBJECT# IS NOT NULL minus select name,obj# from sys.obj$;


select obj#,dataobj#, object_name from WRH$_SEG_STAT_OBJ where object_name not in (select name from sys.obJ$) order by object_name desc;



another script:





dba_hist_sqltext tab2

WHERE tab1.current_obj# NOT IN

(SELECT obj# FROM sys.obj$


AND current_obj#!=-1

AND tab1.sql_id  =tab2.sql_id(+);



Attention: Since it relies on AWR repository, the mapping table is not that accurate and exact.


CASE 10: Data Recovery of Dropped Table by mistake.

The application developers of Company D dropped one core application table in ASM without any backup.  Oracle has introduced recycle bin feature since 10g. First check whether the dropped table is in the recycle bin or not by viewing the DBA_RECYCLEBINS. If so, flashback to before drop via the recycle bin. Otherwise, use PRM for recovery as soon as possible.

The brief steps of Recovery by PRM:

  1. OFFLINE the tablespace where the dropped table
  2. Find the DATA_OBJECT_ID of dropped table by data dictionary query or logminer. If it fails, users have to recognize this table in No-dictionary
  3. Start PRM, enter No-dictionary mode, and add all datafiles of the dropped tablespace. Then SCAN DATABASE+SCAN TABLE from Extent MAP.
  4. Locate the data table by DATA_OBJECT_ID in object tree, and insert data back to source database by DataBridge.
SQL> select count(*) from “MACLEAN”.”TORDERDETAIL_HIS”;COUNT(*)———-984359 


SQL> create table maclean.TORDERDETAIL_HIS1 as select * from  maclean.TORDERDETAIL_HIS;


Table created.


SQL> drop table maclean.TORDERDETAIL_HIS;


Table dropped.


We can get the general DATA_OBJECT_ID by logminer or the method provided in “CASE 9”:






Even no DATA_OBJECT_ID can be obtained, we can still locate the data table that we need to recover through artificial data identification, provided the data table is not much.


First, OFFLINE the tablespace of dropped table.


SQL> select tablespace_name from dba_segments where segment_name=’TPAYMENT’;TABLESPACE_NAME——————————USERS 

SQL> select file_name from dba_data_files where tablespace_name=’USERS’;






SQL> alter tablespace users offline;


Tablespace altered.


Start PRM in NON-DICT mode, add the corresponding datafile and select SCAN DATABASE+SCAN TABLE From Extents:




Add all of the related ASM Disks and click ASM Analyze:



Select the character set in Non-Dict  mode:


Select the datafile of dropped table, and click scan:



Click the generated database name and right click to select scan tables from extents:



To find that the data of DATA_OBJECT_ID=82641 is mapped to the dropped TORDERDETAIL_HIS table through artificial identification, and pass them back to other tablespace in the source repository by DataBridge.







  1. How to get my database character set information?



You can know your database character set information by Oracle Alert.log.

[oracle@mlab2 trace]$ grep     -i character alert_Parnassus.log Database Characterset is US7ASCII

Database Characterset is US7ASCII

alter database character set INTERNAL_CONVERT AL32UTF8

Updating character set in controlfile to AL32UTF8

Synchronizing connection with database character set information Refreshing type attributes with new character set information

Completed: alter database character set INTERNAL_CONVERT AL32UTF8

alter  database  national  character  set  INTERNAL_CONVERT  UTF8

Completed: alter database national character set INTERNAL_CONVERT UTF8 Database Characterset is AL32UTF8

Database Characterset is AL32UTF8

Database Characterset is AL32UTF8


  1. Why PRM failed with GC ” gc warning: Repeated allocation of very large block (appr.size 512000)”?


So far, most of the problems are caused by usage of Java environments that are not recommended. Especially, it easily leads to such problem to use redhat gcj java on Linux. ParnassusData suggests users use Open JDK 1.6 for PRM, or directly use $JAVA_HOME/bin/java –jar prm.jar to start PRM.


Open JDK for Linux download Link:



Open jdk x86_64 for Linux   5
Tzdata-java x86_64 for Linux 5
Open jdk x86_64 for Linux   6
Open jdk x86_64 for Linux   6
Open jdk x86 for Linux 5
Tzdata-java x86 for Linux  5
Open jdk x86 for Linux 6



Tzdata-java x86 for Linux  6



JDK on Other platforms download link:



JDK Windows x86
JDK Windows x86-64
Solaris JDK 7 x86-64bit
Solaris JDK 7 x86-32bit
Solaris JDK 7 Sparc



Oracle JDK download link: ownloads-javase6-419409.html#jdk-6u45-oth-JPR


  1. If you find bugs in PRM, how to report the bug to ParnassusData?

Everyone is welcome to report bug to ParnassusData by sending emails to Please enclose the detailed description of operating environment, including OS, Java environment and Oracle database versions, when reporting bug.


  1. What should I do if PRM failed with the following error?

Error:               no                `server’               JVM                 at               `D:\Program                 Files (x86)\Java\jre1.5.0_22\bin\server\jvm.dll’.

If users just installed JAVA Runtime Environment JRE without installing JDK, please start PRM without –server option. This option does not exist in the version before JRE 1.5.

ParnassusData recommends Open JDK 1.6 or above for running PRM.



The download link of JDK 1.6 on various OS:




  1. Why does PRM display Chinese as messy code?



So far, there are two reasons for Chinese encoding problem:



  • The OS does not have Chinese language pack, thus PRM cannot display Chinese correctly
  • If OS have installed the necessary language package, please use Open JDK1.6 or above version. There might be some problem in 4.

Find More




Resource:                       Technical Support:                        

Sales:                               Download Software:                                          






ParnassusData Corporation, Shanghai, GaoPing Road No. 733. China Phone: (+86) 13764045638

Facebook: Twitter:





Copyright©2013, ParnassusData and/or its affiliates. All rights reserved. This document is provided for information purposes only and the contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or fitness for a particular purpose. We specifically disclaim any liability with respect to this document and no contractual obligations are formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without our prior written permission.


Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.


AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. UNIX is a registered trademark licensed through X/Open Company, Ltd. 0410


Copyright © 2014 ParnassusData Corporation. All Rights Reserved.




沪公网安备 31010802001379号