Linux下誤刪除/home目錄的恢復方法
一般情況下,我們在安裝的時候,都會建立一個Oracle使用者,用該使用者來安裝和管理Oracle。Oracle使用者的根目錄就是/home/oracle。
通常安裝Oracle資料庫是按照官方文件的建議來建立和管理的資料庫,這樣也便於進行進行資料庫的管理。
今天早上,一朋友就出現這個問題,在客戶那裡,使用rm –rf ./home命令誤刪除了整個/home目錄,當時他整個人都快要崩了,不知道該如何去恢復,沒有任何思路。居然犯這麼低階的錯誤:rm -rf 這樣的命令也敢用;哎,都是苦逼的DBA,這樣的錯誤誰會沒有犯過呢?所以,作為一名DBA,在執行任何的命令都要想清楚,尤其是在生產環境中,在使用rm命令的時候,最好不要使用-f引數,哎,還是慢慢的歷練吧,遇到的坑越多,也許成長的越快吧!!!
該文主要是針對誤刪除/home/oracle 目錄的解決方法。這裡不涉及Oracle的資料檔案的恢復。
1、在安裝oracle 資料庫的時候,我們都會建立相關的使用者和組。
[root@seiang11g ~]# groupadd oinstall
[root@seiang11g ~]# groupadd dba
[root@seiang11g ~]# groupadd oper
[root@seiang11g ~]# useradd -g oinstall -G dba oracle
這裡是用的命令來建立的。 和資料庫建立一樣,我們一般都是透過OUI來建立例項。所以我們在講這個故障的處理之前,需要了解Linux手工建立使用者和組的方法。
每個使用者的建立,都會涉及到如下幾個檔案:
/etc/passwd (使用者)
/etc/group (使用者組)
/etc/shadow (金鑰檔案)
/home/username (家目錄)
/etc/skel/.* (骨架檔案)
/etc/skel
目錄/etc/skel目錄一般是存放使用者啟動檔案的目錄,這個目錄是由root許可權控制,當新增使用者時,這個目錄下的檔案自動複製到新新增的使用者的家目錄下;/etc/skel 目錄下的檔案都是隱藏檔案,也就是類似.file格式的;我們可透過修改、新增、刪除/etc/skel目錄下的檔案,來為使用者提供一個統一、標準的、預設的使用者環境。
/etc/skel
目錄下的檔案,一般是用useradd命令新增使用者(user)時,系統自動複製到新新增使用者(user)的家目錄下;如果我們透過修改 /etc/passwd 來新增使用者時,我們可以自己建立使用者的家目錄,然後把/etc/skel 下的檔案複製到使用者的家目錄下,然後要用chown 來改變新使用者家目錄的屬主。
/etc/default/useradd 檔案
透過useradd 新增使用者時的規則檔案,內容如下:
# useradd defaults file
GROUP=100
HOME=/home --把使用者的家目錄建在/home中;
INACTIVE=-1 --是否啟用帳號過期停權,-1表示不啟用;
EXPIRE= --帳號終止日期,不設定表示不啟用;
SHELL=/bin/bash --所用SHELL的型別;
SKEL=/etc/skel --預設新增使用者的目錄預設檔案存放位置;也就是說,當我們用useradd新增使用者時,使用者家目錄下的檔案,都是從這個目錄中複製過去的;
在建立使用者的時候,會在/etc/passwd,/etc/group,/etc/shadow三個檔案中新增使用者的資訊,建立一個/home 下的使用者根目錄,然後把所有的骨架檔案複製到使用者的根目錄下。
[root@seiang11g ~]# cat /etc/passwd | grep oracle
oracle:x:1001:1001::/home/oracle:/bin/bash
[root@seiang11g ~]# tail -3 /etc/group
oinstall:x:1001:
dba:x:1002:oracle
oper:x:1003:oracle
[root@seiang11g ~]# cat /etc/shadow | grep oracle
oracle:$6$GjeAhxPv$XLNcGZyLVTsm/GTzQPCL57A1/uKIlGgcfFunveGhAe56qTiYW1RwWims77GpHvp3l2GysGqt63vJHBmlFkxRv/:17357:0:99999:7:::
當我們刪除/home/oracle這個使用者的根目錄之後,使用者的配置資訊還存在系統的配置檔案中,所以只需要還原骨架檔案,在修改一下環境變數的資訊,就可以了。
誤刪除/home/oracle目錄的案例分析:
檢視資料庫的執行狀態:正常執行
[oracle@seiang11g ~]$ ps -ef | grep ora | grep -v grep
root 1681 1552 0 16:08 pts/0 00:00:00 su - oracle
oracle 1682 1681 0 16:08 pts/0 00:00:00 -bash
oracle 1722 1682 0 16:08 pts/0 00:00:00 rlwrap sqlplus / as sysdba
oracle 1723 1722 0 16:08 pts/3 00:00:00 sqlplus as sysdba
root 1725 1604 0 16:08 pts/1 00:00:00 su - oracle
oracle 1726 1725 0 16:08 pts/1 00:00:00 -bash
oracle 1768 1 0 16:08 ? 00:00:00 /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -inherit
oracle 1774 1 0 16:08 ? 00:00:00 ora_pmon_seiang11g
oracle 1776 1 0 16:08 ? 00:00:00 ora_psp0_seiang11g
oracle 1778 1 1 16:08 ? 00:00:05 ora_vktm_seiang11g
oracle 1782 1 0 16:08 ? 00:00:00 ora_gen0_seiang11g
oracle 1784 1 0 16:08 ? 00:00:00 ora_diag_seiang11g
oracle 1786 1 0 16:08 ? 00:00:00 ora_dbrm_seiang11g
oracle 1788 1 0 16:08 ? 00:00:00 ora_dia0_seiang11g
oracle 1790 1 0 16:08 ? 00:00:00 ora_mman_seiang11g
oracle 1792 1 0 16:08 ? 00:00:00 ora_dbw0_seiang11g
oracle 1794 1 0 16:08 ? 00:00:00 ora_lgwr_seiang11g
oracle 1796 1 0 16:08 ? 00:00:00 ora_ckpt_seiang11g
oracle 1798 1 0 16:08 ? 00:00:00 ora_smon_seiang11g
oracle 1800 1 0 16:08 ? 00:00:00 ora_reco_seiang11g
oracle 1802 1 0 16:08 ? 00:00:00 ora_mmon_seiang11g
oracle 1804 1 0 16:08 ? 00:00:00 ora_mmnl_seiang11g
oracle 1806 1 0 16:08 ? 00:00:00 ora_d000_seiang11g
oracle 1808 1 0 16:08 ? 00:00:00 ora_s000_seiang11g
oracle 1814 1723 0 16:08 ? 00:00:00 oracleseiang11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 1816 1 0 16:08 ? 00:00:00 ora_arc0_seiang11g
oracle 1818 1 0 16:08 ? 00:00:00 ora_arc1_seiang11g
oracle 1820 1 0 16:08 ? 00:00:00 ora_arc2_seiang11g
oracle 1822 1 0 16:08 ? 00:00:00 ora_arc3_seiang11g
oracle 1824 1 0 16:08 ? 00:00:00 ora_qmnc_seiang11g
oracle 1838 1 0 16:08 ? 00:00:00 ora_cjq0_seiang11g
oracle 1850 1 0 16:08 ? 00:00:00 ora_q000_seiang11g
oracle 1852 1 0 16:08 ? 00:00:00 ora_q001_seiang11g
oracle 1945 1726 0 16:13 pts/1 00:00:00 ps -ef
直接把/home/oracle 目錄刪掉,我這裡直接mv模擬rm。
[root@seiang11g ~]# cd /home
[root@seiang11g home]# ll
total 4
drwx------ 15 oracle oinstall 4096 Aug 9 15:08 oracle
drwx------. 3 seiang seiang 78 Jul 10 09:46 seiang
[root@seiang11g home]# mv oracle/ oracle.bak
[root@seiang11g home]#
[root@seiang11g home]# ll
total 4
drwx------ 15 oracle oinstall 4096 Aug 9 15:08 oracle.bak
drwx------. 3 seiang seiang 78 Jul 10 09:46 seiang
[root@seiang11g home]#
[root@seiang11g home]# su - oracle
Last login: Wed Aug 9 16:08:15 CST 2017 on pts/1
su: warning: cannot change directory to /home/oracle: No such file or directory
-bash-4.2$
-bash-4.2$ sqlplus / as sysdba
bash: sqlplus: command not found...
-bash-4.2$
-bash-4.2$ pwd
/home
-bash-4.2$
-bash-4.2$ whoami
oracle
開始恢復:
建立目錄:
[root@seiang11g home]# pwd
/home
[root@seiang11g home]# mkdir oracle
[root@seiang11g home]# chown oracle:oinstall oracle
[root@seiang11g home]# ll
total 16
drwxr-xr-x 5 oracle oinstall 8192 Aug 9 16:33 oracle
drwx------ 15 oracle oinstall 4096 Aug 9 15:08 oracle.bak
drwx------. 3 seiang seiang 78 Jul 10 09:46 seiang
複製骨架檔案:
[root@seiang11g oracle]# cp -R /etc/skel/.* /home/oracle/
[root@seiang11g oracle]# chown -R oracle:oinstall/home/oracle
[root@seiang11g oracle]# ls -al
total 28
drwxr-xr-x 3 oracle oinstall 8192 Aug 9 16:30 .
drwxr-xr-x. 5 root root 52 Aug 9 16:22 ..
-rw-r--r-- 1 oracle oinstall 18 Aug 9 16:29 .bash_logout
-rw-r--r-- 1 oracle oinstall 193 Aug 9 16:29 .bash_profile
-rw-r--r-- 1 oracle oinstall 231 Aug 9 16:29 .bashrc
drwxr-xr-x 4 oracle oinstall 39 Aug 9 16:29 .mozilla
-rw------- 1 oracle oinstall 0 Aug 9 16:29 .pwd.lock
-rw-r--r-- 1 oracle oinstall 163 Aug 9 16:29 .updated
修改oracle使用者的環境變數:
[root@seiang11g oracle]# vim .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
unset TNS_ADMIN
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=seiang11g
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
[root@seiang11g ~]# su - oracle
Last login: Wed Aug 9 16:16:48 CST 2017 on pts/2
[oracle@seiang11g ~]$
[oracle@seiang11g ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Aug 9 16:32:54 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SYS@seiang11g>
恢復正常。但如果在/home/oracle目錄下存在Oracle的資料檔案,那麼恢復就比這裡要複雜多。
作者:SEian.G(苦練七十二變,笑對八十一難)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31015730/viewspace-2145418/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux誤刪除/(根)目錄下usr目錄系統救援方法Linux
- linux下恢復誤刪除的資料檔案Linux
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- Linux下用rm刪除的檔案的恢復方法Linux
- 幾種刪除Linux目錄的方法Linux
- linux系統下檔案誤刪除該如何恢復?Linux
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- Linux 中刪除目錄的多種方法Linux
- linux刪除目錄Linux
- Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)Oracle資料恢復Linux
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- Linux下誤刪除後的恢復操作(ext3/ext4)Linux
- Linux下使用lsof恢復刪除的檔案Linux
- oracle恢復誤刪除資料Oracle
- SQL2005誤刪除資料的恢復方法SQL
- DB2 恢復誤刪除的表DB2
- 使用lsof恢復誤刪除的檔案
- 儲存過程誤刪除的恢復儲存過程
- Linux下建立及刪除帶有空格的目錄Linux
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- Oracle閃回刪除恢復誤刪資料Oracle
- lsof恢復oracle誤刪除檔案Oracle
- Linux恢復誤刪的資料Linux
- LINUX下資料被誤刪除、LINUX下資料被誤格式化後資料恢復Linux資料恢復
- 【伺服器資料恢復】LINUX誤刪除、格式化的資料恢復伺服器資料恢復Linux
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- linux將掛載在home目錄下的磁碟轉移到根目錄下Linux
- 【伺服器資料恢復】Linux系統下誤刪除虛擬機器的資料恢復案例伺服器資料恢復Linux虛擬機
- Oracle恢復誤刪除的資料檔案Oracle
- flashback database 恢復誤刪除的表空間。Database
- truncate table 誤刪除資料後的恢復
- ZT:使用lsof恢復誤刪除的檔案
- extundelete工具恢復rm -rf 刪除的目錄(ext4、ext3)delete
- 【伺服器資料恢復】LINUX誤刪除、誤格式化怎麼恢復資料?伺服器資料恢復Linux
- Flashback Query恢復誤刪除資料(轉)
- 刪除檔案或目錄提示"檔案或目錄無法刪除"的解決方法!
- 被誤刪的檔案快速恢復方法
- linux下刪除目錄及其子目錄下某種型別檔案Linux型別