转://Linux下误删除/home目录的恢复方法
一般情况下,我们在安装Oracle数据库的时候,都会创建一个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
这里是用Linux的命令来创建的。 和数据库创建一样,我们一般都是通过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的数据文件,那么恢复就比这里要复杂多。
转://Linux下误删除/home目录的恢复方法的更多相关文章
- Windows访问Linux下的共享目录的配置方法
user安全级别 第一步:安装samba3(如果已经安装就跳过这一步) [root@rhce2 /]# yum groupinstall "CIFS file server" 第 ...
- 【转帖】linux下的各个目录的含义
linux下的各个目录的含义 http://embeddedlinux.org.cn/emb-linux/entry-level/200809/22-85.html/bin/usr/local/bin ...
- 如何在Linux下拷贝一个目录呢
cp -af newadmin/movie/. uploadfile/mallvideo/ 如何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了. 比如要把/home/usera拷贝到/m ...
- linux下递归列出目录下的所有文件名(不包括目录)
1.linux下递归列出目录下的所有文件名(不包括目录) ls -lR |grep -v ^d|awk '{print $9}'2.linux下递归列出目录下的所有文件名(不包括目录),并且去掉空行 ...
- 怎么查这个文件在linux下的哪个目录
因为要装pl/sql所以要查找tnsnames.ora文件..看看怎么查这个文件在linux下的哪个目录 find / -name tnsnames.ora 查到: /opt/app/oracle/p ...
- Linux下删除的文件如何恢复
Linux下删除的文件如何恢复 参考自: [1]linux下误操作删除文件如何恢复 [2]Linux实现删除撤回的方法 以/home/test.txt为例 1.df -T 文件夹 找到当前文件所在磁盘 ...
- Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式CentOS7-1810下实现
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...
- Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式 Debian9.5下实现
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...
- linux下各安装包的安装方法
<转>linux下各安装包的安装方法 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root ...
随机推荐
- Maven(八)Eclipse创建Web项目(复杂方式)
1. 生成标准的Web工程结构 2. 勾选结尾为webapp的包 3. 生成的文件结构如下 3.1 生成的目录结构若存在错误,缺少servlet.api 3.1.1 添加步骤如下 4.生成后存在的缺点 ...
- C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】
一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简 ...
- Flask 系列之 Bootstrap-Flask
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 Bootstrap-Flask 来进行页面美化 ...
- CommandLineRunner和ApplicationRunner的区别
CommandLineRunner和ApplicationRunner的区别 二者的功能和官方文档一模一样,都是在Spring容器初始化完毕之后执行起run方法 不同点在于,前者的run方法参数是St ...
- angular select 默认值
<select ng-model="selected" ng-options="x.id as x.name for x in users">< ...
- jQ效果:jQuery之插件开发短信发送倒计时功能
实现的主要功能如下: 1.点击按钮的时候,可以进行倒计时,倒计时自定义. 2.当接收短信失败后,倒计时停止,可点击重新发送短信. 3.点击的元素支持一般标签和input标签. html代码: < ...
- Sysbench Sysbench在centos系统下的安装
Sysbench在centos系统下的安装 by:授客 QQ:1033553122 测试环境: CentOS-7-x86_64-DVD-1503-01.iso 下载地址: http:/ ...
- Mysql 自定义函数示例
创建定义函数的的基本语法如下 # DELIMITER是用来设置边界符的 DELIMITER // CREATE FUNCTION 函数名(形参列表) RETURNS 返回类型 begin # 函数体 ...
- [随时更新][Android]小问题记录
此文随时更新,旨在记录平时遇到的不值得单独写博客记录的细节问题,当然如果问题有拓展将会另外写博客. 原文地址请保留http://www.cnblogs.com/rossoneri/p/4040314. ...
- Kotlin入门(21)活动页面的跳转处理
Activity的活动页面跳转是App最常用的功能之一,在前几章的demo源码中便多次见到了,常常是点击界面上的某个按钮,然后跳转到与之对应的下一个页面.对于App开发者来说,该功能的实现非常普通,使 ...