Linux平台误删home/oracle根目录的解决方法

1 背景说明

正常情况下,我们在安装Oracle数据库的时候,都会创建一个oracle的用户。 其根目录就是/home/oracle.

并且根据Oracle 的OFA的架构,也是建议使用/u01 这样的目录来单独安装oracle的软件,包括存放数据文件。

但实际上,总会存在那么一些不按照官网的建议来创建和管理的数据库,这些年见过太多。Dave 是一直建议严格按照Oracle 的标准来,因为这个是通用的标准,如果每家公司都有自己的标准,那每次换人管理,都会是很麻烦的,也是容易出问题的。

俗话说:铁打的营盘,流水的兵,DBA的岗位总会有波动,规则不一样,就会埋下坑,至于最后是谁踩上,就是人品了。

昨晚一朋友就出现这个问题,单实例的数据库,非归档,无备份。删除了整个/home/oracle 目录,如果是按照OFA来的,这个倒也不是很严重的事情,关键是/home/oracle 下还有几个数据文件,折腾了很久,把数据还原出来了。

马上就过年了,防火,防盗,防宕库,居然还犯下这么低级的错误,这是不想要年终奖的节奏啊,这个就不多说,DBA 就是一个心细的活,需要慢慢历练。

2 linux用户创建说明

 

在安装oracle 数据库的时候,我们都会创建用户和组。

 

Oracle 安装参考:

64位 linux 平台下Oracle 安装文档

?
1
2
3
4
5
6
7
groupadd oinstall
 
groupadd dba
 
groupadd oper
 
useradd -g oinstall -G dba oracle

这里是用linux的命令来创建的。 和数据库创建一样,我们一般都是通过OUI来创建实例,其实也是可以通过静默的方式来创建。

 

所以我们在讲这个故障的处理之前,需要了解linux 手工创建用户和组的方法。

 

 

?
1
2
3
4
5
6
7
8
9
10
11
每个用户的创建,都会涉及到如下几个文件:
 
/etc/passwd (用户)
 
/etc/group (用户组)
 
/etc/shadow (密钥文件)
 
/home/username (家目录)
 
/etc/skel/.* (骨架文件)

在创建用户的时候,会在/etc/passwd,/etc/group,/etc/shadow三个文件中添加用户的信息,创建一个/home 下的用户根目录,然后把所有的骨架文件复制到用户的根目录下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[oracle @dg1 ~]$ cat /etc/passwd|grep oracle
 
oracle:x: 502 : 507 ::/home/oracle:/bin/bash
 
[oracle @dg1 ~]$
 
 
 
[oracle @dg1 ~]$ cat /etc/group |grepoinstall
 
oinstall:x: 507 :
 
[oracle @dg1 ~]$ cat /etc/group |grep dba
 
dba:x: 502 :oracle
 
asmdba:x: 506 :oracle
 
[oracle @dg1 ~]$
 
 
 
[root @dg1 ~]# cat /etc/shadow |grep oracle
 
oracle:$ 6 $7xDE3ZWD$jOnuSzTwfdWoR9JMVr33IIJhDJ/vGnCL5XGpCEMBx3XPiov0NnxRBvDIhflBTWPzXSNZ.HbqEoIt7PAxuF9R70: 15595 : 0 : 99999 : 7 :::
 
[root @dg1 ~]#

当我们删除/home/oracle这个用户的根目录之后,用户的配置信息还存在系统的配置文件中,所以只需要还原骨架文件,在修改一下环境变量的信息,就可以了。

 

 

3 示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--数据库正常运行:
 
[oracle @dg1 ~]$ ps -ef|grep ora
 
root 1388 1347 0 Aug26 ? 00 : 00 : 37 hald-addon-storage: polling/dev/sr0 (every 2 sec)
 
oracle 9946 1 0 00 : 49 ? 00 : 00 : 05 ora_pmon_dave
 
oracle 9948 1 0 00 : 49 ? 00 : 00 : 11 ora_psp0_dave
 
oracle 9950 1 2 00 : 49 ? 00 : 16 : 17 ora_vktm_dave
 
oracle 9954 1 0 00 : 49 ? 00 : 00 : 01 ora_gen0_dave
 
oracle 9956 1 0 00 : 49 ? 00 : 00 : 01 ora_diag_dave
 
oracle 9958 1 0 00 : 49 ? 00 : 00 : 01 ora_dbrm_dave
 
oracle 9960 1 0 00 : 49 ? 00 : 00 : 14 ora_dia0_dave
 
oracle 9962 1 0 00 : 49 ? 00 : 00 : 01 ora_mman_dave
 
oracle 9964 1 0 00 : 49 ? 00 : 00 : 02 ora_dbw0_dave

直接把/home/oracle 目录删掉,我这里直接move。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root @dg1 ~]# cd /home
 
[root @dg1 home]# ls
 
oracle
 
[root @dg1 home]# mv oracle oracle.bak
 
[root @dg1 home]# ls
 
oracle.bak
 
[root @dg1 home]#
 
 
 
[root @dg1 home]# su - oracle
 
su: warning: cannot change directory to/home/oracle: No such file or directory
 
-bash- 4.1 $
 
 
 
-bash- 4.1 $ sqlplus / as sysdba
 
-bash: sqlplus: command not found
 
-bash- 4.1 $
 
 
 
-bash- 4.1 $ whoami
 
oracle
 
-bash- 4.1 $ pwd
 
/home
 
-bash- 4.1 $

 

开始恢复:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
--创建目录:
 
[root @dg1 home]# pwd
 
/home
 
[root @dg1 home]# mkdir oracle
 
[root @dg1 home]# chown oracle:oinstalloracle
 
[root @dg1 home]# ll
 
total 8
 
drwxr-xr-x 2 oracle oinstall 4096 Aug 27 14 : 17 oracle
 
drwx------. 25 oracle oinstall 4096 Aug 2623 : 08 oracle.bak
 
[root @dg1 home]#
 
 
 
--复制骨架文件:
 
[root @dg1 ~]# cp /etc/skel/.* /home/oracle/
 
cp: omitting directory `/etc/skel/.'
 
cp: omitting directory `/etc/skel/..'
 
cp: omitting directory `/etc/skel/.gnome2'
 
cp: omitting directory `/etc/skel/.mozilla'
 
[root @dg1 ~]#
 
 
 
[root @dg1 home]# ls -la /home/oracle
 
total 24
 
drwxr-xr-x 2 root root 4096 Aug 27 14 : 47 .
 
drwxr-xr-x. 4 root root 4096 Aug 27 14 : 47 ..
 
-rw-r--r-- 1 root root 18 Aug 27 14 : 47 .bash_logout
 
-rw-r--r-- 1 root root 176 Aug 27 14 : 47 .bash_profile
 
-rw-r--r-- 1 root root 124 Aug 27 14 : 47 .bashrc
 
-rw-r--r-- 1 root root 121 Aug 27 14 : 47 .kshrc
 
[root @dg1 home]#
 
 
 
[root @dg1 home]# chown -R oracle:oinstall/home/oracle
 
[root @dg1 home]# cd /home/oracle
 
[root @dg1 oracle]# ls -la
 
total 24
 
drwxr-xr-x 2 oracle oinstall 4096 Aug 27 14 : 47 .
 
drwxr-xr-x. 4 root root 4096 Aug 27 14 : 47 ..
 
-rw-r--r-- 1 oracle oinstall 18 Aug 2714 : 47 .bash_logout
 
-rw-r--r-- 1 oracle oinstall 176 Aug 2714 : 47 .bash_profile
 
-rw-r--r-- 1 oracle oinstall 124 Aug 2714 : 47 .bashrc
 
-rw-r--r-- 1 oracle oinstall 121 Aug 2714 : 47 .kshrc
 
[root @dg1 oracle]#
 
 
 
 
 
//修改oracle 用户的环境变量:
 
[oracle @dg1 ~]$ cat .bash_profile
 
# .bash_profile
 
 
 
# Get the aliases and functions
 
if [ -f ~/.bashrc ]; then
 
.~/.bashrc
 
fi
 
 
 
# User specific environment and startupprograms
 
 
 
PATH=$PATH:$HOME/bin
 
 
 
export PATH
 
 
 
 
 
# Oracle Settings
 
TMP=/tmp; export TMP
 
TMPDIR=$TMP; export TMPDIR
 
 
 
ORACLE_HOSTNAME=dave; exportORACLE_HOSTNAME
 
ORACLE_UNQNAME=dave; export ORACLE_UNQNAME
 
ORACLE_BASE=/u01/app/oracle; exportORACLE_BASE
 
ORACLE_HOME=$ORACLE_BASE/product/ 11.2 . 0 /db_1;exportORACLE_HOME
 
ORACLE_SID=dave; export ORACLE_SID
 
 
 
PATH=/u01:/usr/sbin:$PATH; export PATH
 
PATH=$ORACLE_HOME/bin:$PATH; export PATH
 
 
 
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;exportLD_LIBRARY_PATH
 
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;exportCLASSPATH
 
[oracle @dg1 ~]$

恢复正常。 但如果有数据文件,那么恢复就比这里更复杂。


文章转载自:http://www.2cto.com/database/201502/377497.html

你可能感兴趣的:(操作系统)