【Oracle】数据库开启状态下删除数据文件
来源:互联网 发布:apache ant 1.9.3 bin 编辑:程序博客网 时间:2024/06/05 02:03
数据库在open的时候数据文件被从操作系统直接删除
因为在linux系统中,之前打开过该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,
文件描述符可以从/proc目录中得到
如果关闭数据库,则该句柄会消失
实际实验中发现dbw0进程开启后就会持有所有数据文件的句柄,但只有数据库对文件进行过写入操作之后才算是真正的持有句柄文件,未执行过写入操作的的文件在被从操作系统删除后数据库并不能继续对该文件进行读写操作
在虚拟机中实验过程如下:
以exmple表空间为例进行示范
(一)
1.重启数据库,查看dbw0进程
[root@oracle
oracle
2.查看锁定example01.dbf文件的进程
[root@oracle
oracle
oracle
oracle
oracle
oracle
可以看到其中是有dbw0进程的
3.在example表空间中建立表并插入数据,并手动运行检查点进程,确保dbw0对文件进行了写入操作。
SYS@ORCL>create
Table
SYS@ORCL>insert
10000
SYS@ORCL>commit;
Commit
SYS@ORCL>alter
System
4.此时从操作系统删除example01.dbf
[oracle@oracle
aaa01.dbf
control01.ctl
control02.ctl
[oracle@oracle
现在我们来查看一下锁定example01.dbf的进程
[root@oracle
oracle
oracle
oracle
oracle
oracle
oracle
依然有19362说明此时dbw0依然对文件保持锁定
5.此时清空buffer_cache中内容,然后对example表中数据进行查询、插入数据
SYS@ORCL>alter
System
SYS@ORCL>select
----------
读取成功
插入数据
SYS@ORCL>insert
1
SYS@ORCL>commit;
Commit
插入完成后手动运行检查点进程
SYS@ORCL>alter
System
SYS@ORCL>select
NAME
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/ORCL/system01.dbf
SYSTEM
/u01/app/oracle/oradata/ORCL/undotbs01.dbf
ONLINE
/u01/app/oracle/oradata/ORCL/sysaux01.dbf
ONLINE
NAME
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/ORCL/users01.dbf
ONLINE
/u01/app/oracle/oradata/ORCL/example01.dbf
ONLINE
/u01/app/oracle/oradata/ORCL/ts_catalog01.dbf
ONLINE
NAME
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/ORCL/users02.dbf
ONLINE
/u01/app/oracle/oradata/ORCL/aaa01.dbf
ONLINE
8
此时我们发现运行完检查点进程example01.dbf依然处于online状态
6.通过dbw0进程持有的文件句柄对文件进行恢复
首先查看dbw0进程
[root@oracle
oracle
则我们进入到/proc/19362/fd中可以看到dbw0持有的文件句柄,红色会代表已经被删除的
[oracle@oracle
[oracle@oracle
total
lr-x------
lr-x------
lrwx------
lr-x------
lr-x------
lr-x------
lrwx------
lrwx------
lrwx------
lrwx------
lrwx------
lrwx------
l-wx------
lrwx------
lrwx------
lrwx------
lrwx------
lrwx------
lrwx------
lrwx------
lrwx------
lr-x------
lr-x------
lr-x------
l-wx------
l-wx------
lrwx------
l-wx------
lrwx------
把23拷贝回去就能恢复已经删除的文件
[oracle@oracle
将example数据文件置为offline,recover之后再置为online
SYS@ORCL>alter
Database
SYS@ORCL>recover
Media
SYS@ORCL>alter
Database
(二)
虚拟机利用快照恢复到一开始相同状态
1.重启数据库,查看dbw0进程
[root@oracle
oracle
2查看锁定example01.dbf文件的进程
[root@oracle
oracle
oracle
oracle
oracle
oracle
可以看到其中是有dbw0进程的
3.在example表空间中建立表,插入数据,然后删除数据文件后再手动运行检查点进程
SYS@ORCL>create
Table
SYS@ORCL>insert
10000
SYS@ORCL>commit;
Commit
删除数据文件
[oracle@oracle
aaa01.dbf
control01.ctl
control02.ctl
[oracle@oracle
手动运行检查点进程,查看数据文件状态
SYS@ORCL>alter
System
SYS@ORCL>select
NAME
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/ORCL/system01.dbf
SYSTEM
/u01/app/oracle/oradata/ORCL/undotbs01.dbf
ONLINE
/u01/app/oracle/oradata/ORCL/sysaux01.dbf
ONLINE
NAME
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/ORCL/users01.dbf
ONLINE
/u01/app/oracle/oradata/ORCL/example01.dbf
RECOVER
/u01/app/oracle/oradata/ORCL/ts_catalog01.dbf
ONLINE
NAME
--------------------------------------------------------------------------------
STATUS
-------
/u01/app/oracle/oradata/ORCL/users02.dbf
ONLINE
/u01/app/oracle/oradata/ORCL/aaa01.dbf
ONLINE
发现此事example01.dbf已经处于recover状态,此时已经不能对文件进行读写
查看进程对文件的锁定
[root@oracle
[root@oracle
发现dbw0进程已经解除了对文件的锁定,不能进行读写操作
- 【Oracle】数据库开启状态下删除数据文件
- 在ORACLE数据库中彻底删除数据文件
- ORACLE归档模式下的热备以及数据库打开状态状态下普通数据文件损坏后的还原
- oracle删除数据文件
- Oracle删除数据文件
- Oracle删除数据文件
- oracle删除数据文件
- oracle删除数据文件
- oracle删除数据文件
- Oracle删除数据文件
- oracle删除数据文件
- oracle删除数据文件 解决办法
- oracle 删除数据文件
- Oracle删除数据文件
- 删除oracle物理数据文件
- Oracle删除数据文件
- oracle删除数据文件
- oracle 删除数据文件
- 图解四次分手协议
- oracle中获取周几的SQL
- matlab gui 项目实战
- scanf的使用说明
- vs2010 错误
- 【Oracle】数据库开启状态下删除数据文件
- CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF;
- 【Oracle】将hr用户下所有对象导入…
- 【Oracle】删除用户下的所有对象
- 【Oracle】session audsid的含义和产生
- 【Linux】linux中增加swap空间
- 【Linux】虚拟机增加硬盘
- 【Linux】/etc/fatab文件解释
- 【Oracle】监听动态注册与静态注册