Retrieve deleted files on Unix / Linux using File Descriptors [ID 444749.1]
Retrieve deleted files on Unix / Linux using File Descriptors [ID 444749.1] | |||
Modified 04-MAY-2009 Type HOWTO Status MODERATED | |||
This document is being delivered to you via Oracle Support's (RaV) process, and therefore has not been subject to an independent technical review. |
Applies to:
Oracle Server - Enterprise Edition - Version: 8.1.7.0 to 10.2.0.1
Linux x86-64
Sun Solaris SPARC (64-bit)
Goal
Retrieve deleted datafiles/logfiles from the operating system if the database has not been restarted.
Solution
Using the PROC file system available on Unix/Linux, we can retrieve deleted datafile/logfile when all of the following hold good:-
1.) Database is not restarted.
2.) Server is not restarted.
3.) The file was not offline before deletion.
Background processes (DBWR, PMON, SMON etc.) have access to all the datafiles currently opened by the database. So, with the PID of a background procss, list of files currently opened by that process can be obtained by using 'lsof' command.
Also, there is a file descriptor associated with every file opened by a process. If the file gets accidently deleted from the operating system, its entry is not removed from the proc file system. Using that entry, we can recreate the deleted file.
This is explained with an example below.
1.) Create a tablespace
SQL> create tablespace my_test datafile '/emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf' size 200k;
Tablespace created.
2.) Accidently, datafile belonging to this tablespace got deleted
$ rm /emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf
3.) Try resizing the datafile
SQL> alter database datafile '/emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf' resize 250k;
alter database datafile '/emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf' resize 250k
*
ERROR at line 1:
ORA-01565: error in identifying file
'/emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
Rescuing the file
1.) Find the process id of DBWr process:-
Format is:-
--> $ ps -ef |grep '
$ ps -ef |grep EMR102U6|grep dbw
emrdbms 21943 1 0 10:27:08 ? 0:00 ora_dbw0_EMR102U6
Note that Process ID for DBW0 here is 21943.
2.) Find open files for this Process Id using 'lsof' command :-
$ lsof -p 21943 |grep /emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf
Command | PID | USER | FD | TYPE | DEVICE | SIZE/OFF | NODE | NAME |
oracle | 21943 | emrdbms | 270uW | VREG | 304,25 | 212992 | 11273825 | /emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf |
Note the value of FD in the table above (270) .
3.) Go to the file descriptors directory :-
Format is :-
--> $ cd /proc/
$ cd /proc/21943/fd/
4.) Make the tablespace containing "deleted" datafiles READ-ONLY:
alter tablespace my_test read only;
Making the tablespace read only freezes the file header, preventing updates from being made to the file header. Since this datafile is then at a read only state, it is possible to copy the file while the database is open.
This will allow users to select from the tablespace, but prevents them from doing inserts, updates, and deletes.
5.) Make a copy of file using file descriptor (270uW) :-
$ cat 270 > /emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf
6.) To make sure that the old "deleted" copies of files will not be used after the copy has been done, do the following:
a) Take datafile offline
alter tablespace my_test offline;
Query the view v$datafile to verify the datafile is offline:
select status from v$datafile where file#=
b) Bring datafile back online
alter tablespace my_test online;
7.) Put tablespace back in read write mode:
alter tablespace my_test read write;
Query view dba_tablespaces to check status of the tablespace:
select tablespace_name,status from dba_tablespaces where tablespace_name='MY_TEST';
8.) Now datafile resize operation goes through fine.
SQL> alter database datafile '/emea/rdbms/64bit/app/oracle/oradata/EMR102U6/my_test_01.dbf' resize 250k;
Database altered.
Note:- This procedure can also be used for retrieving the deleted current redo logfile.
References
- How to Rename or Move Datafiles and Logfiles[@more@]的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8337095/viewspace-1033389/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- FILE ON OCFS CANNOT BE DELETED LINUX ERROR: 16: DEVICE OR RESOURCE BUSYdeleteLinuxErrordev
- Using UTL_FILE Package To Perform File I/O (UNIX) And Basic FAQ_44307.1PackageORM
- Unix Sed Tutorial: Delete File Lines Using Address and Patternsdelete
- SUID and SGID: -rwsr-xr-x Unix file permissionUI
- Analyze Core Files for Oracle Goldengate Processes on Unix/Linux_1360352.1OracleGoLinux
- Most Common Solutions to FRM-41839 and .tmp Files Not Being Deleteddelete
- python unix :No such file or directoryPython
- 10 Awesome Examples for Viewing Huge Log Files in UnixView
- 求助Exception: the model Id=(1) maybe be deleted!Exceptiondelete
- Using Create directory & UTL_FILE in OracleOracle
- TECH: Getting a Stack Trace from a CORE file on Unix (Doc ID 1812.1)
- DBMS_FILE_TRANSFER package which provides an API for copying binary files between database serversPackageIDEAPIDatabaseServer
- recover database using backup controlfile利用archivelog files.DatabaseHive
- recover database using backup control fileDatabase
- Step-By-Step Guide To Create Physical Standby On Normal File System For ASM Primary using RMANGUIIDEORMASM
- Uploading Files in SharePoint 2013 using CSOM and RESTREST
- linux udev Rules files 理解Linuxdev
- All mirror URLs are not using ftp, http[s] or file. Cannot find a valid baseurl for repo: baseFTPHTTP
- Oracle 12C Database File Mapping for Oracle ASM FilesOracleDatabaseAPPASM
- using dbms_file_transfer transportable tablespace between asmASM
- GoldenGate replication using a data definition file and DEFGEN utilityGo
- How to copy a datafile from ASM to a file system not using RMANASM
- Unable to View Chinese Font When Using Tools>Copy FileView
- Setup SSL using .PFX file on nginx/apache2NginxApache
- Retrieve id of record just inserted into a Java DB (Derby) databaseJavaDatabase
- dedecms /install/index.php.bak Installation File Not Deleted && Executed Via Apache Analytic VulIndexPHPdeleteApache
- docker mysql mysqld: Error on realpath() on ‘/var/lib/mysql-files‘ No such file or directoryDockerMySqlError
- How to serve uncommon file in WebDAV using IIS in Win ServerWebServer
- FROM ASM Migrating to FILE SYSTEM Using RMAN(三)ASM
- Linux/Unix下pid檔案作用淺析(轉)Linux
- 關於UNIX和Linux系統下SUID、SGID的解析LinuxUI
- How To Configure The "/etc/hosts" File On Linux [ID 242490.1]Linux
- Linux 錯誤:fatal error: uuid/uuid.h: No such file or directoryLinuxErrorUI
- Find Out Top Ten Largest Files in LinuxLinux
- deleted object would be re-saved by cascade (remove deleted object from associatdeleteObjectREM
- RAC On Linux Using NFSLinuxNFS
- 搭建備庫時報錯“ORA-00203: using the wrong control files”
- Unix, Linux 和MacOSLinuxMac