/*测试使数据文件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