正常情况下,我们在安装Oracle数据库的时候,都会创建一个oracle的用户。 其根目录就是/home/oracle.
并且根据Oracle 的OFA的架构,也是建议使用/u01 这样的目录来单独安装oracle的软件,包括存放数据文件。
但实际上,总会存在那么一些不按照官网的建议来创建和管理的数据库,这些年见过太多。Dave 是一直建议严格按照Oracle 的标准来,因为这个是通用的标准,如果每家公司都有自己的标准,那每次换人管理,都会是很麻烦的,也是容易出问题的。
俗话说:铁打的营盘,流水的兵,DBA的岗位总会有波动,规则不一样,就会埋下坑,至于最后是谁踩上,就是人品了。
昨晚一朋友就出现这个问题,单实例的数据库,非归档,无备份。删除了整个/home/oracle 目录,如果是按照OFA来的,这个倒也不是很严重的事情,关键是/home/oracle 下还有几个数据文件,折腾了很久,把数据还原出来了。
马上就过年了,防火,防盗,防宕库,居然还犯下这么低级的错误,这是不想要年终奖的节奏啊,这个就不多说,DBA 就是一个心细的活,需要慢慢历练。
在安装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这个用户的根目录之后,用户的配置信息还存在系统的配置文件中,所以只需要还原骨架文件,在修改一下环境变量的信息,就可以了。
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