/*测试使数据文件offline的情景*/ --首先,有测试表空间的两个测试数据文件 select d.tablespace_name,d.file_name,d.online_status from dba_data_files d where d.tablespace_name = 'TEST'; TABLES FILE_NAME ONLINE_STA ------ -------------------------------------------------- ---------- TEST +DATA/orcl/datafile/test.270.899110799 ONLINE TEST +DATA/orcl/datafile/test.275.899722189 ONLINE --测试1,offline表空进 alter tablespace test offline; TABLES FILE_NAME ONLINE_STA ------ -------------------------------------------------- ---------- TEST +DATA/orcl/datafile/test.270.899110799 OFFLINE TEST +DATA/orcl/datafile/test.275.899722189 OFFLINE 变回去: alter tablespace test online; TABLES FILE_NAME ONLINE_STA ------ -------------------------------------------------- ---------- TEST +DATA/orcl/datafile/test.270.899110799 ONLINE TEST +DATA/orcl/datafile/test.275.899722189 ONLINE --测试2,offline数据文件 alter database datafile '+DATA/orcl/datafile/test.270.899110799' offline; --offline数据文件,要用数据文件的全路径 TABLES FILE_NAME ONLINE_STA ------ -------------------------------------------------- ---------- TEST +DATA/orcl/datafile/test.270.899110799 RECOVER TEST +DATA/orcl/datafile/test.275.899722189 ONLINE 直接offline数据文件,数据文件竟然不是变offline,而是recover!! 那就给他recover吧 recover datafile 6; TABLES FILE_NAME ONLINE_STA ------ -------------------------------------------------- ---------- TEST +DATA/orcl/datafile/test.270.899110799 OFFLINE TEST +DATA/orcl/datafile/test.275.899722189 ONLINE 这才变成了offline。 变回去: alter database datafile '+DATA/orcl/datafile/test.270.899110799' online; TABLES FILE_NAME ONLINE_STA ------ -------------------------------------------------- ---------- TEST +DATA/orcl/datafile/test.270.899110799 ONLINE TEST +DATA/orcl/datafile/test.275.899722189 ONLINE 那么,问题来了,offline数据文件,为什么数据文件要先recover之后才会offline呢,为什么要recover呢? 自己的思考: 1.recover做了什么:就是把旧的数据给搞到最新。 2.数据文件是最新的么:知道online redo log吗? 3.那么,需要recover的操作,只是从临时存储数据文件中检查有没有写入的数据,并写入。并不一定有。 所以,recover状态,是可以理解的。 --测试3 数据文件所在磁盘不可读写 修改共享磁盘权限为root:root GROUP_NUMBER NAME STATE TYPE TOTAL_MB FREE_MB USABLE_FILE_MB ------------ -------------------- ----------- ------ ---------- ---------- -------------- 0 DATA CONNECTED EXTERN 0 0 0 0 FRA CONNECTED EXTERN 3072 2730 2730 还是可以建表!! SQL> create table dxmy1(id number) tablespace test; Table created. SQL> insert into dxmy1 values(1); 1 row created. SQL> commit; Commit complete. 包括修改数据文件权限,也没有使数据文件offline。 --测试4 数据文件路径fs满 建了个表空间,把数据文件放到boot路径下了(只是因为boot下空间小,容易撑爆) [root@single1 boot]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 38G 15G 21G 43% / tmpfs 495M 227M 268M 46% /dev/shm /dev/sda1 388M 384M 0 100% /boot DXMYT /boot/dxmy1.dbf ONLINE DXMYT /boot/dxmy2.dbf ONLINE 此时表空间使用率为53.13% 原来数据文件所在盘若爆满了,只要数据文件还有空间,数据文件就不会offline。(比如创建数据文件的时候是1G,数据才300M,如果这时候该路径满了,数据库还是可以的。)
原文:http://blog.csdn.net/ghostliming/article/details/50431344