LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 数据库 >

oracle数据库物理结构(3)

时间:2012-07-01 05:41来源:未知 编辑:admin 点击:
三.data file(数据文件):存放数据库全部数据 1.数据文件概述 每个oracle数据库必须至少有一个数据文件,用于存放数据库数据 多个数据文件应分放在不同


三.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

------分隔线----------------------------
标签:物理结构oracles
栏目列表
推荐内容