据文件(数据文件的详细信息记载在控制文件中)
·每个oracle数据库必须至少有一个数据文件,用于存放数据库数据
·多个数据文件应分放在不同的disk上以提高存取速度
1、主要分类:
system01.dbf:记录系统运行信息,包含所有数据库字典,PL/SQL程序代码及其他系统信息
undotbs01.dbf:存放回退信息,即DML操作后的旧数据信息
sysaux01.dbf:system文件的辅助文件,存放支持oracle系统活动的多种工具如logminer
users01.dbf:新建用户未指定存储空间是,默认数据存放在该文件中
example01.dbf:存放示例数据信息。
2、查看数据库数据文件
·查看数据文件及大小
SQL>select name,bytes from v$datafile;
SQL>select*from dba_data_files;
SQL>hostls –l /u01/app/oracle/oradata/ora10/*.dbf
3、修改数据库的数据文件
【移动/更名一个数据文件】
SQL>shutdown immediate
$mv /u01/app/oracle/oradata/ora10/{example01.dbf,../example.dbf}
SQL>alter database ora10 rename file
2 '/u01/app/oracle/oradata/ora10/example01.dbf' to
3 '/u01/app/oracle/oradata/example.dbf';
Database altered.
SQL>alter database open;
Database altered.
SQL>select * from v$datafile;
【数据文件的扩大和缩小】
SQL>create tablespace test datafile'/u01/app/oracle/oradata/test1.dbf' size5M;                                                 新建表
空间及其所包含的数据文件
SQL>hostls –l /u01/app/oracle/oradata/test1.dbf
-rw-r-----1 oracle oinstall 5251072 Mar 31 16:26
/u01/app/oracle/oradata/test1.dbf
SQL>alter database datafile
'/u01/app/oracle/oradata/test1.dbf' autoextend on;
设置数据文件自动扩充
SQL>select autoextensiblefromdba_data_files         查看自动扩充标志
Where file_name='/u01/app/oracle/oradata/test1.dbf';
AUT
---
YES
SQL>alter database datafile '/u01/app/oracle/oradata/test1.dbf' resize 10M;
手工扩充数据文件大小
SQL>hostls –l /u01/app/oracle/oradata/test1.dbf
-rw-r-----1 oracle oinstall 10493952 Mar 31 16:29
/u01/app/oracle/oradata/test1.dbf                   手工缩减数据文件大小
SQL>alter database datafile '/u01/app/oracle/oradata/test1.dbf' resize 7M;
SQL>hostls –l /u01/app/oracle/oradata/test1.dbf
-rw-r-----1 oracle oinstall 7348224 Mar 31 16:29
/u01/app/oracle/oradata/test1.dbf
4、数据文件的添加和删除
【添加数据文件到表空间】
SQL>alter tablespace test add datafile
'/u01/app/oracle/oradata/test2.dbf' size 5M
【删除表空间中的所有数据文件】
SQL>select file_name,tablespace_name from dba_data_files;
查询欲删的数据文件对应的表空间,是否包含多个数据文件
SQL>drop tablespace test including contents;直接删除表空间
SQL>host rm –rf /u01/app/oracle/oradata/test*.dbf 删除数据文件
【删除表空间中的部分数据文件】
SQL>alter database ora10 datafile
'/u01/app/oracle/oradata/test2.dbf' offline drop;
若表空间中包含多个数据文件,且部分数据文件不能删掉,则欲删掉数据文件先进行脱机处理
<特别警告!!!>此处drop不意味着该数据文件在数据库中已经删除,此时若在OS中直接删
除该数据文件,则数据库将面临崩溃。
SQL>select file_name,tablespace_name,online_status from dba_data_files;
FILE_NAME
----------------------------------------------------------------------------------
TABLESPACE_NAME                     ONLINE_
-------------------------------------
/u01/app/oracle/oradata/example.dbf
EXAMPLE                           ONLINE
/u01/app/oracle/oradata/ora10/users01.dbf
USERS                            ONLINE
/u01/app/oracle/oradata/ora10/undotbs01.dbf
UNDOTBS1                          ONLINE
/u01/app/oracle/oradata/ora10/system01.dbf
SYSTEM                            SYSTEM
/u01/app/oracle/oradata/ora10/sysaux01.dbf
SYSAUX                            ONLINE
/u01/app/oracle/oradata/test1.dbf
TEST                             ONLINE
/u01/app/oracle/oradata/test2.dbf
TEST                             RECOVER
据文件仍然存在(状态recover),故不能直接删除该数据文件,只能通过删除表空间的方法删除表空间中的所有数据文件。
ora10.2可用drop参数删数据文件,但存在限制:1.表空间中自个数据文件不能删除;2.被删除数据文件必须为空;3.无法删除表空间中的最后一个数据
文件,除非表空间本身。
测试:
SQL>select file_name,tablespace_name from dba_data_files;
SQL>alter tablespace test2 add datafile '/u01/test02.dbf' size 5M;
SQL>alter tablespace test2 add datafile '/u01/test03.dbf' size 5M;
创建表空间就并加数据文件
SQL>alter tablespace test2 drop datafile '/u01/test01.dbf';
Alter tablespace test2 dropdatafile '/u01/test01.dbf'
ERROR at line 1:        删除表空间中第一个数据文件报错,不能进行
ORA-03263:cannot drop the first file of tablespace TEST2
SQL>alter database ora10 datafile     '/u01/test01.dbf'offlinedrop;
SQL>createtablemytest(inumber)tablespacetest2;
将第一个数据文件离线,再在表空间中建立测试表,则表将被保存在余下的两个数据文件中
SQL>select
substr(owner,1,3),substr(segment_name,1,13),substr(file_id,1,10)
from dba_extents
where segment_name= 'MYTEST';
SUBSTR SUBSTR(SEGMENT_NAME,1,13)     SUBSTR(FILE_ID,1,10)
----------------------------------------------------------------------
SYS     MYTEST                           7
SQL>select substr(file_name,1,15),file_id from dba_data_files where file_id= '7';
SUBSTR(FILE_NAME,1,15)               FILE_ID
--------------------------------------------------------------
/u01/test02.dbf                         7
查看测试表保存在哪个数据文件中,查到该数据文件号再根据文件号查数据文件名
SQL>alter tablespace test2 drop datafile'/u01/test02.dbf';
Alter tablespace test2 drop datafile'/u01/test02.dbf'
ERROR at line 1:
ORA-03262:the file is non-empty
删除表空间中已分配了空间的数据文件 (非空)报错,不能进行。
SQL>alter tablespace test2 drop datafile '/u01/test03.dbf';
Tablespace altered.
删除表空间中未分配了空间的数据文件 (为空),允许进行。;