首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Linux 誤刪 /home/oracle 根目錄緊急恢復實戰

     編輯:Oracle 教學

Linux 誤刪 /home/oracle 根目錄緊急恢復實戰

一、背景與風險

Oracle 安裝用戶 oracle 的家目錄 /home/oracle 存放環境變量腳本 (.bash_profile)、SSH 金鑰、SQL 腳本、跟蹤文件等。若誤刪且**無備份**,雖不直接導致數據庫掛掉 (進程仍在運行),但會造成:

  • 無法 su - oracle 切換環境 (報 No such file or directory)
  • sqlplus、lsnrctl 等命令找不到 (PATH 丟失)
  • SSH 免密登錄失效
  • 若數據文件也放在該目錄下 (違反 OFA),將導致數據庫無法打開

二、Linux 用戶創建機制回顧

創建用戶涉及 5 個核心組件:

文件/目錄作用
/etc/passwd用戶基本信息 (UID, GID, 家目錄, Shell)
/etc/group用戶組信息
/etc/shadow加密密碼、過期策略
/home/username家目錄 (需 r+x 權限進入)
/etc/skel/.*骨架文件 (新用戶家目錄默認模板)

刪除家目錄**不影響**前三個系統配置文件,只需重建目錄並復制骨架文件即可恢復登錄環境。

三、實戰恢復步驟 (以 root 執行)


# 1. 確認用戶信息仍存在
grep oracle /etc/passwd
# oracle:x:502:507::/home/oracle:/bin/bash

grep oracle /etc/group
# oinstall:x:507:
# dba:x:502:oracle

# 2. 重建家目錄並授權
mkdir /home/oracle
chown oracle:oinstall /home/oracle
chmod 750 /home/oracle

# 3. 復制骨架文件 (隱藏文件需 cp -a 或 rsync)
cp -a /etc/skel/. /home/oracle/
# 或
rsync -a /etc/skel/ /home/oracle/

# 4. 修正所有權 (cp 可能保留 root 屬主)
chown -R oracle:oinstall /home/oracle

# 5. 核心:恢復 .bash_profile 環境變量
cat > /home/oracle/.bash_profile <<'EOF'
# .bash_profile
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
PATH=$PATH:$HOME/bin
export PATH

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=your_host; export ORACLE_HOSTNAME
ORACLE_UNQNAME=your_db; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=your_sid; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
EOF
chown oracle:oinstall /home/oracle/.bash_profile
chmod 640 /home/oracle/.bash_profile

四、驗證恢復


su - oracle
# 應正常進入 /home/oracle,提示符變為 [oracle@host ~]$
sqlplus / as sysdba
# 應正常連接
lsnrctl status
# 應正常顯示

五、若數據文件也在 /home/oracle 下 (違規部署)

  1. 若數據庫仍在運行:進程持有文件句柄,Linux 允許讀寫已刪除 inode (通過 /proc/PID/fd/ 恢復)。
  2. 若數據庫已關閉:需從備份恢復,或數據文件未被覆寫時用 extundelete / debugfs 嘗試恢復 inode。
  3. 鐵律:嚴格遵循 OFA,**數據文件絕不可放在 /home/oracle**,應放在 /u01/app/oracle/oradata/SID/ 獨立掛載點。

六、預防措施

  • chattr +i /home/oracle 防止誤刪 (需 root 解鎖)
  • 將 /home/oracle 納入每日備份 (rsync/tar)
  • 操作前 ls -ld /home/oracle 確認目標
  • 建立「刪除需雙人確認」運維規範

七、總結

誤刪 /home/oracle 屬於**運維級故障**,不涉及數據庫核心數據,**恢復核心在於:重建目錄 → 復制骨架 → 還原環境變量**。若數據文件同處其下,則上升為**數據級災難**,必須依賴備份或文件系統級恢復。再次強調:**OFA 合規部署是避免此類災難擴大的根本保障**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved