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进程能够打开所有的在线数据文件,并有能力缓存所有处理中的文件,当打开文件数据量达到操作系统的默认限制时,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数据文件和临时文件的管理的更多相关文章
- Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据
Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...
- 收缩Oracle数据文件
最近有网友提到收缩Oracle数据文件的问题,这是DBA经常碰到的一个常见问题.通常我们需要收缩相应的数据文件以减少来自磁盘空间的压力以及提高数据库的整体性能.但这并非对于所有情形都是适用的,尤其是生 ...
- 数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例
通过ROWID计算数据块的相关信息: --详见: 数据文件头块保留大小.ROWID.数据文件最大大小等数据库限制的说明 根据small file tablespace的ROWID,计算出表空间.数据 ...
- oracle数据文件不小心被删除,导致对应的表空间删不掉的处理方法
问题现象:数据文件被无意删除,导致数据库表空间无法删除,并且重新刷表空间提示表空间已经存在:解决方法:1.oracle用户登录服务器,使用sysdba连接数据库 >sqlplus / as sy ...
- Oracle数据文件在open状态被删除的恢复记录
1.查看当前状态: SQL> select status from v$instance; STATUS------------OPEN SQL> show parameter name; ...
- 批量迁移Oracle数据文件,日志文件及控制文件
有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求.对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移.当 ...
- Oracle 数据文件 reuse 属性 说明(转载)
Oracle 表空间 创建参数 说明 http://blog.csdn.net/tianlesoftware/archive/2011/01/27/6166928.aspx 当我们对表空间添加数据文件 ...
- Oracle 数据文件迁移
背景 这两天做一个oracle数据库迁移,以前都是用exp.imp来走,这次用到了expdp.impdp,的确有些优势,但同时又想起了只是拷贝数据文件迁移的方式,其实这个方式不常用做迁移,更多用在磁盘 ...
- oracle数据文件迁移
这篇文章是从网络上获取的,然后根据内容一步步操作, 1.目前的疑问:移动日志文件的时候,为何要先进行切换? 2.move操作后,再进行rename操作的原理 --------------------- ...
随机推荐
- idea技巧
写在前面 以前一直用的elipce,如今入坑IntelliJ IDEA,没想到啊.深深的爱上了它,强大到无所不能: "工欲善其事必先利其器",IntelliJ IDEA作为一个非常 ...
- java 与大数据学习较好的网站
C# C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!https://www.cnblogs.com/doforfuture/p/6293926.html ...
- Kubernetes学习整理
修改镜像仓库 官方提供的时google源,显然是无法使用的.这里需要改成国内的源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kube ...
- ASCII_01
1.来自“http://baike.baidu.com/link?url=WgFPtGe-rT6x6X0r_OiHGVZAV87Fu4_P5fvr7FsGyrm8QqTGuvVUfg4Jx7Rn-Le ...
- Kubernetes 在知乎上的应用
从 Mesos 到 Kubernetes 之前的调度框架是基于 Mesos 自研的.采用的语言是 Python.运行了大概两年多的时间了,也一直比较稳定.但随着业务的增长,现有的框架的问题逐渐暴露. ...
- selenium学习笔记(加入unittest)
利用firefox浏览器的selenium IDE可以直接生成webdriver+unittest的python脚本 当然博主是要为了自己编写脚本.对用例内容进行了修改,把元素校验功能也放入了用例中 ...
- oracle,查看锁表
(1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;select * from v$locked_object;(2)查看哪个表被锁select ...
- web自动化中的page object模式
一. 原理 将页面的元素定位和元素行为封装成一个page类,实现页面对象和测试用例分离 类的属性:元素定位 类的行为:元素的操作 测试用例:调用所需页面对象中的行为,组成测试用例 二. 好处 1. 当 ...
- 四十六 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中
前面我们讲到的elasticsearch(搜索引擎)操作,如:增.删.改.查等操作都是用的elasticsearch的语言命令,就像sql命令一样,当然elasticsearch官方也提供了一个pyt ...
- MySQL 5.7.3.0 安装 全程截图
前言: 下一个班快讲MySQL数据库了,正好把服务器里面的MySQL卸了重装了一下. 截个图,作为笔记.也正好留给需要的朋友们. 目录: 下载软件 运行安装程序 安装程序欢迎界面 许可协议 查找更新 ...