三.data file(数据文件):存放数据库全部数据 1. 数据文件概述
·每个oracle数据库必须至少有一个数据文件,用于存放数据库数据
·多个数据文件应分放在不同的disk上以提高存取速度
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> host ls -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
'/u01/app/oracle/oradata/ora10/example01.dbf' to
'/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' size 5M;
新建表空间及其所包含的数据文件
SQL> host ls -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 autoextensible from dba_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> host ls -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> host ls -l /u01/app/oracle/oradata/test1.dbf
-rw-r----- 1 oracle oinstall 7348224 Mar 31 16:29 /u01/app/oracle/oradata/test1.dbf
·数据文件的添加和删除
a 添加数据文件到表空间
SQL> alter tablespace test add datafile '/u01/app/oracle/oradata/test2.dbf' size 5M;
新增数据文件
b 删除表空间中的所有数据文件
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 删除数据文件
c 删除表空间中的部分数据文件
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 drop datafile '/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' offline drop;
SQL> create table mytest(i number) tablespace test2;
将第一个数据文件离线,再在表空间中建立测试表,则表将被保存在余下的两个数据文件中
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.
删除表空间中未分配了空间的数据文件(为空),允许进行。
转载请保留固定链接: https://linuxeye.com/database/663.html |