oracle用户目录误删除的恢复

本文介绍了一种当误删Oracle用户的家目录后如何通过复制系统骨架文件夹中的内容来快速恢复Oracle用户环境的方法。
当我们在安装Oracle软件前,必须先创建oracle用户组,如oinstall,dba,oper等,并且必须创建oracle用户
在创建完用户账户后,会自动在/home文件夹下,增加一个以用户名命名的文件夹,里面就是存放该用户的一些环境变量等信息
当我们在做文件清理的时候,如果不小心执行了rm -rf /home/oracle,那么该如何恢复这些文件呢?

其实在创建用户的过程中,还会对几个目录进行修改,大致有以下几个:
/etc/passwd --用户密码
/etc/shadow --密钥文件
/etc/group --用户组
/etc/skel/.* --骨架文件

看一下这些文件中和oracle用户相关的内容:
[oracle@ora11g ~]$ cat /etc/passwd |grep oracle
oracle:x:54321:54321::/home/oracle:/bin/bash
[oracle@ora11g ~]$ cat /etc/shadow |grep oracle
cat: /etc/shadow: Permission denied
[oracle@ora11g ~]$ su - root
Password: 
[root@ora11g ~]# cat /etc/shadow |grep oracle
oracle:$1$J8eXSYtR$xHRcqxnw3ReD9o7VyNAWf/:16511:0:99999:7:::
[root@ora11g ~]# cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:
games:x:20:
gopher:x:30:
dip:x:40:
ftp:x:50:
lock:x:54:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
nscd:x:28:
floppy:x:19:
vcsa:x:69:
pcap:x:77:
slocate:x:21:
ntp:x:38:
dbus:x:81:
audio:x:63:gdm
avahi:x:70:
rpc:x:32:
mailnull:x:47:
smmsp:x:51:
sshd:x:74:
oprofile:x:16:
rpcuser:x:29:
nfsnobody:x:65534:
xfs:x:43:
stapdev:x:101:
stapusr:x:102:
stap-server:x:155:
haldaemon:x:68:
avahi-autoipd:x:156:
gdm:x:42:
sabayon:x:86:
oinstall:x:54321:
dba:x:54322:oracle
[root@ora11g ~]# cd /etc/skel
[root@ora11g skel]# ls -la
total 64
drwxr-xr-x  3 root root  4096 Mar 17 16:11 .
drwxr-xr-x 96 root root 12288 May  4 10:00 ..
-rw-r--r--  1 root root    33 Jun  2  2011 .bash_logout
-rw-r--r--  1 root root   176 Jun  2  2011 .bash_profile
-rw-r--r--  1 root root   124 Jun  2  2011 .bashrc
-rw-r--r--  1 root root   515 Jun 21  2011 .emacs
drwxr-xr-x  4 root root  4096 Feb  1  2012 .mozilla
[root@ora11g skel]# cd /home/oracle
[root@ora11g oracle]# ls -la
total 44
drwx------ 4 oracle oinstall 4096 May  4 10:22 .
drwxr-xr-x 3 root   root     4096 Mar 17 16:49 ..
-rw------- 1 oracle oinstall 2381 May  4 10:20 .bash_history
-rw-r--r-- 1 oracle oinstall   33 Mar 17 16:49 .bash_logout
-rw-r--r-- 1 oracle oinstall  328 Mar 18 13:01 .bash_profile
-rw-r--r-- 1 oracle oinstall  124 Mar 17 16:49 .bashrc
-rw-r--r-- 1 oracle oinstall  515 Mar 17 16:49 .emacs
drwxr-xr-x 4 oracle oinstall 4096 Mar 17 16:49 .mozilla
drwxr-xr-x 3 oracle oinstall 4096 Mar 17 17:06 .oracle
-rw------- 1 oracle oinstall 1408 Mar 18 13:01 .viminfo

可以看到/etc/skel目录下的几个文件同/home/oracle目录下的文件时相同的

[root@ora11g oracle]# cd .oracle
[root@ora11g .oracle]# ls -la
total 12
drwxr-xr-x 3 oracle oinstall 4096 Mar 17 17:06 .
drwx------ 4 oracle oinstall 4096 May  4 10:22 ..
drwxr-xr-x 2 oracle oinstall 4096 Mar 17 17:18 logs
[root@ora11g .oracle]# 
[root@ora11g .oracle]# cd logs
[root@ora11g logs]# ll
total 260
-rw-r--r-- 1 oracle oinstall 41693 Mar 17 17:06 installActions2015-03-17_05-03-57PM.log
-rw-r--r-- 1 oracle oinstall 33118 Mar 17 17:09 installActions2015-03-17_05-08-08PM.log
-rw-r--r-- 1 oracle oinstall 33118 Mar 17 17:13 installActions2015-03-17_05-12-54PM.log
-rw-r--r-- 1 oracle oinstall 33118 Mar 17 17:17 installActions2015-03-17_05-15-29PM.log
-rw-r--r-- 1 oracle oinstall 33118 Mar 17 17:17 installActions2015-03-17_05-17-07PM.log
-rw-r--r-- 1 oracle oinstall 33118 Mar 17 17:18 installActions2015-03-17_05-17-49PM.log
-rw-r--r-- 1 oracle oinstall 33147 Mar 17 17:18 installActions2015-03-17_05-18-26PM.log
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:06 oraInstall2015-03-17_05-03-57PM.err
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:06 oraInstall2015-03-17_05-03-57PM.out
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:09 oraInstall2015-03-17_05-08-08PM.err
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:09 oraInstall2015-03-17_05-08-08PM.out
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:13 oraInstall2015-03-17_05-12-54PM.err
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:13 oraInstall2015-03-17_05-12-54PM.out
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:17 oraInstall2015-03-17_05-15-29PM.err
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:17 oraInstall2015-03-17_05-15-29PM.out
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:17 oraInstall2015-03-17_05-17-07PM.err
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:17 oraInstall2015-03-17_05-17-07PM.out
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:18 oraInstall2015-03-17_05-17-49PM.err
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:18 oraInstall2015-03-17_05-17-49PM.out
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:18 oraInstall2015-03-17_05-18-26PM.err
-rw-r--r-- 1 oracle oinstall     0 Mar 17 17:18 oraInstall2015-03-17_05-18-26PM.out

/home/oracle/.oracle/logs目录中存放的是在用OUI安装oracle软件时生成的一些日志信息

好,现在了解了大致的目录结构,那么当我们由于误操作删除了/home/oracle目录后,恢复其实就很容易了
即只需要把/etc/skel目录下的文件全都拷贝到原目录下,应该就可以解决这个问题了,下面我们来看一下测试过程

在数据库正常运行的情况下,把/home/oracle目录删除,为了提高可恢复性,把具有危险操作的rm -rf操作替换成mv更名操作

[oracle@ora11g ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Mon May 4 11:17:21 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  835104768 bytes
Fixed Size     2257840 bytes
Variable Size   507513936 bytes
Database Buffers   322961408 bytes
Redo Buffers     2371584 bytes
Database mounted.
Database opened.
SQL> host
[oracle@ora11g ~]$ ps -ef | grep oracle
root      3402  3289  0 10:22 pts/2    00:00:00 su - oracle
oracle    3403  3402  0 10:22 pts/2    00:00:00 -bash
root      3587  3433  0 10:56 pts/2    00:00:00 su - oracle
oracle    3588  3587  0 10:56 pts/2    00:00:00 -bash
root     24415  3618  0 11:14 pts/2    00:00:00 su - oracle
oracle   24416 24415  0 11:14 pts/2    00:00:00 -bash
oracle   24453 24416  0 11:17 pts/2    00:00:00 sqlplus   as sysdba
oracle   24463     1  0 11:17 ?        00:00:00 ora_pmon_ora11g
oracle   24467     1  0 11:17 ?        00:00:00 ora_psp0_ora11g
oracle   24471     1  2 11:17 ?        00:00:02 ora_vktm_ora11g
oracle   24477     1  0 11:17 ?        00:00:00 ora_gen0_ora11g
oracle   24481     1  0 11:17 ?        00:00:00 ora_diag_ora11g
oracle   24485     1  0 11:17 ?        00:00:00 ora_dbrm_ora11g
oracle   24489     1  0 11:17 ?        00:00:00 ora_dia0_ora11g
oracle   24493     1  0 11:17 ?        00:00:00 ora_mman_ora11g
oracle   24497     1  0 11:17 ?        00:00:00 ora_dbw0_ora11g
oracle   24501     1  0 11:17 ?        00:00:00 ora_lgwr_ora11g
oracle   24505     1  0 11:17 ?        00:00:00 ora_ckpt_ora11g
oracle   24509     1  0 11:17 ?        00:00:00 ora_smon_ora11g
oracle   24513     1  0 11:17 ?        00:00:00 ora_reco_ora11g
oracle   24517     1  0 11:17 ?        00:00:00 ora_mmon_ora11g
oracle   24521     1  0 11:17 ?        00:00:00 ora_mmnl_ora11g
oracle   24525     1  0 11:17 ?        00:00:00 ora_d000_ora11g
oracle   24529     1  0 11:17 ?        00:00:00 ora_s000_ora11g
oracle   24543 24453  0 11:17 ?        00:00:01 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   24547     1  0 11:17 ?        00:00:00 ora_arc0_ora11g
oracle   24551     1  0 11:17 ?        00:00:00 ora_arc1_ora11g
oracle   24555     1  0 11:17 ?        00:00:00 ora_arc2_ora11g
oracle   24559     1  0 11:17 ?        00:00:00 ora_arc3_ora11g
oracle   24563     1  0 11:17 ?        00:00:00 ora_qmnc_ora11g
oracle   24591     1  0 11:18 ?        00:00:00 ora_q000_ora11g
oracle   24595     1  0 11:18 ?        00:00:00 ora_q001_ora11g
oracle   24599     1  0 11:18 ?        00:00:00 ora_cjq0_ora11g
oracle   24665 24453  0 11:19 pts/2    00:00:00 /bin/bash
oracle   24684 24665  0 11:19 pts/2    00:00:00 ps -ef
oracle   24685 24665  0 11:19 pts/2    00:00:00 grep oracle
[oracle@ora11g ~]$ exit
[root@ora11g ~]# cd /home
[root@ora11g home]# mv /home/oracle /home/oracle_bak
[root@ora11g home]# ls -la
total 20
drwxr-xr-x  3 root   root     4096 May  4 11:33 .
drwxr-xr-x 26 root   root     4096 May  4 10:00 ..
drwx------  4 oracle oinstall 4096 May  4 11:30 oracle_bak
[root@ora11g home]# mkdir oracle
[root@ora11g home]# chown oracle:oinstall oracle
[root@ora11g home]# ls -la
total 24
drwxr-xr-x  4 root   root     4096 May  4 11:33 .
drwxr-xr-x 26 root   root     4096 May  4 10:00 ..
drwxr-xr-x  2 oracle oinstall 4096 May  4 11:33 oracle
drwx------  4 oracle oinstall 4096 May  4 11:30 oracle_bak
[root@ora11g home]# cd /etc/skel
[root@ora11g skel]# ls -la
total 64
drwxr-xr-x  3 root root  4096 Mar 17 16:11 .
drwxr-xr-x 96 root root 12288 May  4 11:07 ..
-rw-r--r--  1 root root    33 Jun  2  2011 .bash_logout
-rw-r--r--  1 root root   176 Jun  2  2011 .bash_profile
-rw-r--r--  1 root root   124 Jun  2  2011 .bashrc
-rw-r--r--  1 root root   515 Jun 21  2011 .emacs
drwxr-xr-x  4 root root  4096 Feb  1  2012 .mozilla
[root@ora11g skel]# cp .* /home/oracle/
cp: omitting directory `.'
cp: omitting directory `..'
cp: omitting directory `.mozilla'
[root@ora11g skel]# cd /home/oracle
[root@ora11g oracle]# ls -la
total 28
drwxr-xr-x 2 oracle oinstall 4096 May  4 11:33 .
drwxr-xr-x 4 root   root     4096 May  4 11:33 ..
-rw-r--r-- 1 root   root       33 May  4 11:33 .bash_logout
-rw-r--r-- 1 root   root      176 May  4 11:33 .bash_profile
-rw-r--r-- 1 root   root      124 May  4 11:33 .bashrc
-rw-r--r-- 1 root   root      515 May  4 11:33 .emacs

注意权限,必须是oracle用户,oinstall组的

[root@ora11g oracle]# chown oracle:oinstall /home/oracle -R
[root@ora11g oracle]# ls -la
total 28
drwxr-xr-x 2 oracle oinstall 4096 May  4 11:33 .
drwxr-xr-x 4 root   root     4096 May  4 11:33 ..
-rw-r--r-- 1 oracle oinstall   33 May  4 11:33 .bash_logout
-rw-r--r-- 1 oracle oinstall  176 May  4 11:33 .bash_profile
-rw-r--r-- 1 oracle oinstall  124 May  4 11:33 .bashrc
-rw-r--r-- 1 oracle oinstall  515 May  4 11:33 .emacs
[root@ora11g oracle]# su - oracle
[oracle@ora11g ~]$ sqlplus / as sysdba
-bash: sqlplus: command not found
[oracle@ora11g ~]$ vi .bash_profile

添加以下环境变量的内容:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=ora11g
export PATH=$PATH:$ORACLE_HOME/bin

[oracle@ora11g ~]$ . .bash_profile
[oracle@ora11g ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Mon May 4 11:36:31 2015

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

SQL> 

oracle用户又可以继续登录了











Oracle 数据库中,误删除数据或文件后的恢复操作可以通过多种机制实现。以下是一些常见场景及对应的恢复方法: ### 1. 使用 `FLASHBACK` 技术恢复误删除的数据 Oracle 提供了 `FLASHBACK` 功能,可以快速恢复误删除的表数据或表结构。该功能依赖于撤销段(Undo Segment)和回收站(Recycle Bin)中的信息。 #### 恢复被 `DROP` 掉的表 如果用户执行了 `DROP TABLE` 命令,但尚未清空回收站,可以使用如下命令恢复表: ```sql FLASHBACK TABLE table_name TO BEFORE DROP; ``` 此操作会将表从回收站中恢复,并保留其原有数据和索引结构[^1]。 #### 恢复被 `DELETE` 或 `UPDATE` 的数据 对于通过 `DELETE` 删除的数据,可以使用 `FLASHBACK QUERY` 来查询历史数据并恢复: ```sql SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('2023-10-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'); ``` 如果确认时间点正确,可以通过插入语句将数据恢复回当前表中: ```sql INSERT INTO table_name SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('2023-10-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'); ``` 此外,若需要恢复整个表到某个时间点,需启用行移动功能: ```sql ALTER TABLE table_name ENABLE ROW MOVEMENT; FLASHBACK TABLE table_name TO TIMESTAMP TO_TIMESTAMP('2023-10-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'); ALTER TABLE table_name DISABLE ROW MOVEMENT; ``` ### 2. 利用 RMAN 进行物理备份与恢复 如果数据库启用了 **RMAN**(Recovery Manager),并且有完整的物理备份策略,则可以通过以下步骤进行恢复: #### 完整数据库恢复 1. **关闭数据库实例**: ```bash SHUTDOWN IMMEDIATE; ``` 2. **启动到 MOUNT 状态**: ```bash STARTUP MOUNT; ``` 3. **执行恢复操作**: ```bash RUN { RESTORE DATABASE; RECOVER DATABASE; } ``` 4. **打开数据库**: ```bash ALTER DATABASE OPEN; ``` #### 表空间或数据文件恢复 如果仅丢失了部分数据文件,可针对特定表空间进行恢复: ```bash RUN { ALLOCATE CHANNEL c1 TYPE DISK; RESTORE TABLESPACE users; RECOVER TABLESPACE users; RELEASE CHANNEL c1; } ``` ### 3. 使用逻辑备份(如 Data Pump) 如果系统中有使用 `Data Pump`(`expdp`/`impdp`)进行逻辑导出,则可以通过导入工具恢复数据。 #### 导入单个表 ```bash impdp username/password DIRECTORY=dir_name DUMPFILE=backup.dmp TABLES=table_name; ``` #### 导入整个模式 ```bash impdp username/password DIRECTORY=dir_name DUMPFILE=backup.dmp SCHEMAS=schema_name; ``` ### 4. 避免未来误删问题的建议 - **启用回收站机制**:确保 `RECYCLEBIN=ON`,以便在误删后能够快速恢复表。 - **定期备份策略**:结合 RMAN 和逻辑备份工具,制定合理的全量 + 增量备份计划。 - **审计与监控**:通过 `AUDIT` 功能记录关键操作日志,便于追踪误操作行为。 - **设置 Flashback Retention**:根据业务需求调整 `UNDO_RETENTION` 参数,延长可回溯的时间窗口。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值