[oracle@bspdev datafile]$ ls -l
total 8121892
-rw-r----- 1 oracle oinstall 10493952 Feb 2 02:14 mvtbltest01.dbf
(篇幅原因,有省略……)
-rw-r--r-- 1 oracle oinstall 10493952 Feb 2 02:14 tts_simple01.dbf
注意:此时数据文件虽然从OS中删除,但是我们依然可以查询到数据!
SQL> select count(*) from rmtest.rm_tab;
COUNT(*)
----------
145462
对于这种现象,笔者认为两种可能性,一是buffer cache中的缓存数据信息,可以支持这种查询动作。另一种可能性,就是由于文件描述符的存在,让数据文件没有被真正删除,还以某种方式存在于系统中,支持dbwr查询。
证明两种猜想,对buffer cache进行清理。
SQL> alter system flush buffer_cache;
System altered
SQL> alter system flush shared_pool;
System altered
--依然可以查询结果
SQL> select count(*) from rmtest.rm_tab;
COUNT(*)
----------
145462
但是,如果数据库以某种方式,发现了文件被删除,比如check point动作,就会引起很多自动化动作出现。