一般情况下,我们在安装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目录的恢复方法的更多相关文章

  1. Windows访问Linux下的共享目录的配置方法

    user安全级别 第一步:安装samba3(如果已经安装就跳过这一步)  [root@rhce2 /]# yum groupinstall "CIFS file server" 第 ...

  2. 【转帖】linux下的各个目录的含义

    linux下的各个目录的含义 http://embeddedlinux.org.cn/emb-linux/entry-level/200809/22-85.html/bin/usr/local/bin ...

  3. 如何在Linux下拷贝一个目录呢

    cp -af newadmin/movie/.   uploadfile/mallvideo/ 如何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了. 比如要把/home/usera拷贝到/m ...

  4. linux下递归列出目录下的所有文件名(不包括目录)

    1.linux下递归列出目录下的所有文件名(不包括目录) ls -lR |grep -v ^d|awk '{print $9}'2.linux下递归列出目录下的所有文件名(不包括目录),并且去掉空行 ...

  5. 怎么查这个文件在linux下的哪个目录

    因为要装pl/sql所以要查找tnsnames.ora文件..看看怎么查这个文件在linux下的哪个目录 find / -name tnsnames.ora 查到: /opt/app/oracle/p ...

  6. Linux下删除的文件如何恢复

    Linux下删除的文件如何恢复 参考自: [1]linux下误操作删除文件如何恢复 [2]Linux实现删除撤回的方法 以/home/test.txt为例 1.df -T 文件夹 找到当前文件所在磁盘 ...

  7. Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式CentOS7-1810下实现

    iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...

  8. Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式 Debian9.5下实现

    iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...

  9. linux下各安装包的安装方法

    <转>linux下各安装包的安装方法   一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root ...

随机推荐

  1. laravel中请求用例$request可用的一些方法小结

    laravel中$request可用的一些方法小结 1,请求方法的获取 $method = $request->method(); 2,检测请求方法 $res = $request->is ...

  2. JAX-WS Web Service小试牛刀

    1.使用Eclipse新建Java工程JavaDemo 2.新建包com.kira.ws 3.在包com.kira.ws新建类Hello,代码如下 package com.kira.ws; impor ...

  3. node(http, url)

    一.http 模块 http.js const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; con ...

  4. 微信小程序-查询快递

    1.新建快速启动项目 2.在设置里面勾选不校验合法域名,以防编译报错 3.在app.json中改一下窗口表现:app.json—"navigationBarTitleText": ...

  5. loj#2049. 「HNOI2016」网络(set 树剖 暴力)

    题意 题目链接 Sol 下面的代码是\(O(nlog^3n)\)的暴力. 因为从一个点向上只会跳\(logn\)次,所以可以暴力的把未经过的处理出来然后每个点开个multiset维护最大值 #incl ...

  6. pycharm最新code码,分享给大家

    最新的pycharm激活码,到明年11月份,一名努力的Python程序员 这俩天,在忙学校布置的小项目,给大家更新少了,我会慢慢补上的,努力学pycharm,有什么问题可以问我哦,我竭尽所能帮大家解答 ...

  7. 熊猫ios手游直播教程 苹果投屏电脑

    如今手游越来越火热,不管是大人小孩都喜欢在闲暇时刻玩一玩游戏,手机屏幕终归还是有点小的,所以有的小伙伴想要将手机投屏到电脑上,岂不是一件很好的事情,iPhone是有镜像投屏功能的,下面给大家分享熊猫i ...

  8. View在测量时的MeasureSpec由什么决定?

    我们都知道系统要确定View的大小,首先得先获得MeasureSpec,再通过MeasureSpec来决定View的大小. MeasureSpec(32为int值)由两部分组成: SpecMode(高 ...

  9. Python高级特性:列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 最常见的例子: 生成list [, , , , , , , , , ]可以用li ...

  10. git 入门教程之github 教程

    github 教程 github 是一个基于 git 的代码托管平台,是平时工作学习的好帮手,学会如何用好 github 网站能够帮助我们更好分享代码或者与其他开发人员合作. 注册 github 账号 ...