Oracle数据文件和临时文件的管理

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一、数据文件概述在Oracle数据库中,SYSTEM和SYSAUX表空间至少需要包含一个数据文件,此外还将包含多个其他表空间及与其相关的数据文件和临时文件。Oracle的数据文件和临时文件是操作系统文件,属于数据库物理结构范畴,用于存储数据库中的逻辑结构的数据。
一、数据文件概述
在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进程能够打开所有的在线数据文件,并有能力 缓存所有 处理中 的文件,当打开文件数据量达到操作系统的默认限制时,O racle将自动关闭文件。这可能会对性能 产生负面的影响,建议调整操作系统的默认限制值, 使其大于数据库的在线文件数量。

二、为表空间创建和添加文件
为表空间创建和添加数据文件的方法在之前已经学习过了,这里仅简要回顾一下。
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 中
指定日志: {<RET>=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、删除数据文件必须保证数据块处于打开状态。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
Oracle 关系型数据库 数据库管理
oracle 移动数据文件
1.先将相应的数据文件 offline ALTER DATABASE DATAFILE'D:/ORACLE/ORADATA/DBA/TEST01.
576 0
|
3月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
217 64
|
23天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
73 11
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
29天前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
57 7

推荐镜像

更多