一、数据文件概述
在Oracle数据库中,SYSTEM和SYSAUX表空间至少需要包含一个数据文件,此外还将包含多个其他表空间及与其相关的数据文件和临时文件。Oracle的数据文件和临时文件是操作系统文件,属于数据库物理结构范畴,用于存储数据库中的逻辑结构的数据。在创建表空间时,必须明确的为每个表空间指定数据文件。

Oracle通过两种方式为文件分配编号:绝对文件号,用于唯一标识数据库中的数据文件,绝对文件号可以通过v$datafile或v$tempfile视图的FILE#列查询,也可以通过DBA_DATA_FILES或DBA_TEMP_FILES视图的FILE_ID列查询;相对文件号,用于唯一标识表空间内的数据文件。大多数情况下,绝对文件编号和相对文件编号都是相等的,但当数据库中的数据文件数量超出了一个阈值(比如1023),那么他们就不再相等了。大文件表空间数据文件的相对文件号总为1024。

查询数据文件的绝对文件号和相对文件号:
select t.name tablespace_name,d.file#,d.rfile#,d.name file_name from v$tablespace t,v$datafile d where t.ts#=d.ts#;
TABLESPACE_NAME           FILE#     RFILE# FILE_NAME
-------------------- ---------- ---------- --------------------------------------------------
SYSTEM                        1          1 /u01/app/oracle/oradata/stdb/system01.dbf
UNDOTBS1                      2          2 /u01/app/oracle/oradata/stdb/undotbs01.dbf
SYSAUX                        3          3 /u01/app/oracle/oradata/stdb/sysaux01.dbf
USERS                         4          4 /u01/app/oracle/oradata/stdb/users01.dbf
USERS                         8          8 /u01/app/oracle/oradata/stdb/user02.dbf
EXAMPLE                       5          5 /u01/app/oracle/oradata/stdb/example01.dbf
TEST                          7          7 /u01/app/oracle/oradata/stdb/test02.dbf
TEST                          6          6 /u01/app/oracle/oradata/stdb/test01.dbf
BIGTBS                        9       1024 /u01/app/oracle/oradata/stdb/bigfile01.dbf
9 rows selected.

数据库所能够创建的数据文件数量受CREATE DATABASE ... MAXDATAFILES语句和DB_FILES参数的影响。另外,还应注意操作系统在创建文件数量方面的强制限制。在实例启动过程中,Oracle将根据初始化参数DB_FILES分配SGA中用于保存数据文件信息的空间,实例可以根据这个参数值来决定所能创建的最大文件的数量。该参数可以修改,但必须重启数据库方可生效,该参数在实例的整个生命周期中有效。

表空间中包含的数据文件的数据量的多少,最终会影响到数据库的性能。Oracle允许的在线文件数量超过了操作系统的默认限制,DBWn进程能够打开所有的在线数据文件,并有能力缓存所有处理中的文件,当打开文件数据量达到操作系统的默认限制时,Oracle将自动关闭文件。这可能会对性能产生负面的影响,建议调整操作系统的默认限制值,使其大于数据库的在线文件数量。

二、为表空间创建和添加文件
为表空间创建和添加数据文件的方法在之前已经学习过了,这里仅简要回顾一下。
1、在创建表空间的同时创建数据文件
create tablespae ... datafile '/xxx/xxxx/xxxx ...' size xx 
create temporary tablespace  datafile '/xxx/xxxx/xxxx ...' size xx
2、为已存在的表空间添加数据文件
alter tablespace ... add datafile  '/xxx/xxxx/xxxx ... ' size xx
alter tablespace ... add tempfile '/xxx/xxxx/xxxx ... ' size xx

三、修改数据文件大小
使用自动扩展子句为表空间添加数据文件:
SQL> create tablespace test_tbs
  2  datafile '/u01/app/oracle/oradata/stdb/test03.dbf' size 10m
  3  autoextend on
  4  next 1m
  5  maxsize 100m;
Tablespace created.

打开数据文件自动扩展:
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test02.dbf'     
  2  autoextend on
  3  next 1m
  4  maxsize 100m;
Database altered.

关闭数据文件自动扩展:
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test02.dbf'
  2  autoextend off;
Database altered.

手动RESIZE数据文件大小:
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' resize 20m;
Database altered.

四、修改数据文件可用性
可以通过执行数据文件的在线和离线操作修改数据文件的可用性,离线的数据文件不能被数据库所访问,直到它恢复在线状态之前。只读表空间中的数据文件也可以被离线或在线,只读表空间内的数据文件的在线或离线不影响表空间自身的状态,不管怎么样,在表空间未处于读写状态之前,这些文件都是不可写的。

1、归档模式下的数据文件离线
SQL>  alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' offline;
Database altered.

SQL>  alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' online;
 alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' online
*
ERROR at line 1:
ORA-01113: file 10 needs media recovery             //test03.dbf文件离线时不触发检查点操作,所以该文件恢复在线时提示需要介质恢复
ORA-01110: data file 10: '/u01/app/oracle/oradata/stdb/test03.dbf'

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u02/arch_1
Oldest online log sequence     5
Next log sequence to archive   7
Current log sequence           7

SQL> recover datafile 10;
Media recovery complete.

SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' online;
Database altered.

2、非归档模式下的数据文件离线
在非归档模式下使用alter database ... offline for drop语句离线数据文件。offline关键字标记该数据文件离线,不论其是否损坏,所以可以打开数据库;for drop关键字标记该数据文件随后被删除,该数据文件不能再次恢复到在线状态。(实际上,在在线日志组还未发生切换之前,还是可以恢复到在线状态的)

SQL> alter database datafile 'D:\app\Manganese\oradata\orcl\test01.dbf' offline for drop;
数据库已更改。

SQL> alter system switch logfile;
系统已更改。

SQL> alter system switch logfile;
系统已更改。

SQL> alter system switch logfile;
系统已更改。

SQL> alter database datafile 'D:\app\Manganese\oradata\orcl\test01.dbf' online;
alter database datafile 'D:\app\Manganese\oradata\orcl\test01.dbf' online
*
第 1 行出现错误:
ORA-01113: 文件 7 需要介质恢复
ORA-01110: 数据文件 7: 'D:\APP\MANGANESE\ORADATA\ORCL\TEST01.DBF'

SQL> recover datafile 7;
ORA-00279: 更改 1108304 (在 03/19/2014 15:44:41 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC
ORA-00280: 更改 1108304 (用于线程 1) 在序列 #9 中
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-00308: 无法打开归档日志
'D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

3、修改表空间内所有数据文件和临时文件的可用性
alter tablespace ... datafile  { online | offline }
alter tablespace ... tempfile { online | offline }

五、重命名(修改存储位置)数据文件
1、将包含数据文件的表空间离线。
2、使用操作系统命令修改数据文件名。
3、使用alter database ... rename datafile ...语句改变数据库中的数据文件名。
4、备份数据库。

示例一:重命名同一表空间内的数据文件
SQL> alter tablespace test_tbs offline normal;
Tablespace altered.

[oracle@stdb stdb]$ mv test03.dbf test04.dbf

SQL> alter tablespace test_tbs                
  2  rename datafile '/u01/app/oracle/oradata/stdb/test03.dbf'
  3  to '/u01/app/oracle/oradata/stdb/test04.dbf';
Tablespace altered.

SQL> alter tablespace test_tbs online;
Tablespace altered.

 

示例二:重命名不同表空间中的数据文件
SQL> select status from v$instance;
STATUS
------------
MOUNTED        //该操作必须在mount下进行

SQL> alter database
  2  rename file '/u01/app/oracle/oradata/stdb/test01.dbf', 
  3              '/u01/app/oracle/oradata/stdb/test02.dbf',
  4              '/u01/app/oracle/oradata/stdb/test04.dbf'
  5           to
  6              '/u01/app/oracle/oradata/stdb/test1.dbf',
  7              '/u01/app/oracle/oradata/stdb/test2.dbf',
  8              '/u01/app/oracle/oradata/stdb/test3.dbf';

Database altered.

SQL> alter database open;
Database altered.

六、删除数据文件

从表空间内删除数据文件:
alter tablespace ... drop datafile ... ;
alter tablespace ... drop tempfile ... ;

从数据库中删除数据文件:
alter database tempfile '/xxx/xxxx/....' drop including datafiles;

SQL> alter database tempfile '/u01/app/oracle/oradata/stdb/temp03.dbf' drop including datafiles;
Database altered.

SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test1.dbf' drop including datafiles;    //注意:数据文件不能以这样的方式删除
alter database datafile '/u01/app/oracle/oradata/stdb/test1.dbf' drop including datafiles
                                                                 *
ERROR at line 1:
ORA-01916: keyword ONLINE, OFFLINE, RESIZE, AUTOEXTEND or END/DROP expected

注意:
1、从字典管理迁移到本地管理的只读表空间内的数据文件时不能被删除的。除此之外,其他的只读表空间内的数据文件可以删除。
2、系统表空间内的数据文件无法被删除。
3、如果一个本地管理的表空间被离线,则其内的数据文件无法被删除。
SQL> alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test4.dbf';
alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test4.dbf'
*
ERROR at line 1:
ORA-03264: cannot drop offline datafile of locally managed tablespace
4、如果表空间内仅包含一个数据文件,该数据文件无法被删除。
SQL> alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test3.dbf';
alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test3.dbf'
*
ERROR at line 1:
ORA-03261: the tablespace TEST_TBS has only one file
5、如果数据文件不为空,该数据文件无法被删除。
6、删除数据文件必须保证数据块处于打开状态。

zhuan :http://blog.itpub.net/29515435/viewspace-1125105/

Oracle数据文件和临时文件的管理的更多相关文章

  1. Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据

    Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...

  2. 收缩Oracle数据文件

    最近有网友提到收缩Oracle数据文件的问题,这是DBA经常碰到的一个常见问题.通常我们需要收缩相应的数据文件以减少来自磁盘空间的压力以及提高数据库的整体性能.但这并非对于所有情形都是适用的,尤其是生 ...

  3. 数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例

    通过ROWID计算数据块的相关信息:  --详见: 数据文件头块保留大小.ROWID.数据文件最大大小等数据库限制的说明 根据small file tablespace的ROWID,计算出表空间.数据 ...

  4. oracle数据文件不小心被删除,导致对应的表空间删不掉的处理方法

    问题现象:数据文件被无意删除,导致数据库表空间无法删除,并且重新刷表空间提示表空间已经存在:解决方法:1.oracle用户登录服务器,使用sysdba连接数据库 >sqlplus / as sy ...

  5. Oracle数据文件在open状态被删除的恢复记录

    1.查看当前状态: SQL> select status from v$instance; STATUS------------OPEN SQL> show parameter name; ...

  6. 批量迁移Oracle数据文件,日志文件及控制文件

    有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求.对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移.当 ...

  7. Oracle 数据文件 reuse 属性 说明(转载)

    Oracle 表空间 创建参数 说明 http://blog.csdn.net/tianlesoftware/archive/2011/01/27/6166928.aspx 当我们对表空间添加数据文件 ...

  8. Oracle 数据文件迁移

    背景 这两天做一个oracle数据库迁移,以前都是用exp.imp来走,这次用到了expdp.impdp,的确有些优势,但同时又想起了只是拷贝数据文件迁移的方式,其实这个方式不常用做迁移,更多用在磁盘 ...

  9. oracle数据文件迁移

    这篇文章是从网络上获取的,然后根据内容一步步操作, 1.目前的疑问:移动日志文件的时候,为何要先进行切换? 2.move操作后,再进行rename操作的原理 --------------------- ...

随机推荐

  1. 配置iptables实现本地端口转发的方法详解

    场景假如你在用 resin 调试一个 Web 程序,需要频繁地重启 resin.这个 Web 程序需要开在 80 端口上,而 Linux 限制 1024 以下的端口必须有 root 权限才能开启.但是 ...

  2. SQL中去掉换行符 与空格符

    SELECT B.TradeOrderID AS '二段交易号',B.ZipCode AS '邮编', B.Province AS '省',B.City AS '市',B.District AS '区 ...

  3. scala学习手记2 - scala中的循环

    先来看一段Java中的循环: for (int i = 1; i < 4; i++) { System.out.print(i + ","); } 毫无疑问,scala可以让 ...

  4. Treflection04_面试题

    1. package reflectionZ; import java.lang.reflect.Field; import java.lang.reflect.Method; public clas ...

  5. InfiniBand技术和协议架构分析

    Infiniband开放标准技术简化并加速了服务器之间的连接,同时支持服务器与远程存储和网络设备的连接. IB技术的发展 1999年开始起草规格及标准规范,2000年正式发表,但发展速度不及Rapid ...

  6. JsonTools 工具类

    import net.sf.json.JSONObject; public class JsonTools { public static JSONObject getJSONObject(Strin ...

  7. 【spark】示例:连接操作

    我们有这样两个文件 任务:找出用户评分平均值大于4的电影. 我们看两个文件结果,第一个文件有电影的ID和名字,第二个文件有电影的ID和所有用户的评分 对于任务结果所需要的数据为电影ID,电影名字,平均 ...

  8. opencv:摄像头和视频的读取

    示例代码: #include <opencv.hpp> using namespace cv; int main() { VideoCapture Capture(); //打开默认摄像头 ...

  9. 在一个Activity中启动另一个Activity

    一.新建一个空的工程 二.添加一个Activity并命名为BAty 三.在activity_main.xml中添加一个按钮,设置id号为btnStartB <Button android:lay ...

  10. cannot be read or is not a valid ZIP file

    在eclipse下创建 maven 项目,运行 flowable 6.1.2 配置maven之后,下载相应的依赖库. 发现报错: Archive for required library: '/Use ...