数据文件DataFile ①
学习了TableSpace之后,当然就要学习DataFile啦,初学者可能对这两者的概念有一点模糊,其实很简单,tablespace是逻辑的存储单位,datafile是物理的存储单位,而且一个tablespace可以对应多个datafile,但一个datafile只能对应一个tablespace。Tablespace的知识点比较简单,主要是有两块:一是本地管理、二是对文件的操作。
一、DataFile管理准则
1、初始参数DB_FILES
DB_FILES指出了数据文件信息保留的SGA空间数量,所以也指出了可以为该实例创建的数据文件的最大编号。
注:更改DB_FILES值需要重启实例后才可生效。
DB_FILES太小,则在关闭数据库前无法添加超过限制数量的数据文件,太大则消耗内存。
2、添加DataFile到表空间
添加DataFile到表空间需要遵循一下的条件:
* 操作系统对一个进程能够同时打开的文件数加以限制
* 操作系统对数据文件的数量和大小加以限制
* Oracle对实例打开的数据库文件最大数量有限制(与操作系统有关)
* 不能超过DB_FILES所指定的数据文件数量
* CREATE DATABASE/CONTROLFILE 中 MAXDATAFILES子句的影响
3、考虑性能的影响
4、确定数据文件的大小
SYSTEM表空间的数据文件至少需要150M来包括数据字典和回滚段。
如果安装了Oracle的其他产品,则可能还需要额外的空间。
5、适当放置数据文件
数据文件全部放在一个磁盘驱动器可能会引起竞争,有条件可以分开存放。
6、与重做日志文件分开存储
数据文件与重做日志文件存放在一个磁盘容易造成全部数据丢失,尽量分开存放。或保存多个重做日志文件。
二、创建和添加DataFile
CREATE TABLESPACE --创建表空间及其数据文件
CREATE TEMPORARY TABLESPACE --创建临时表空间及其临时文件
ALTER TABLESPACE ... ADD DATAFILE --添加一个数据文件
ALTER TABLESPACE ... ADD TEMPFILE --添加一个临时文件
CREATE DATABASE --创建数据库和关联的数据文件
ALTER DATABASE ... CREATE DATAFILE --创建一个新的空的数据文件代替原来的
注:推荐指定文件全名,否则按系统默认会比较混乱。
三、改变DataFile大小
1、启用/禁用数据文件的自动盘区
自动盘区指DataFile可以在额定的范围内自动增长,这样可以减少表空间用完时立即干预的必要,也可以确保应用程序不会因为分配盘区而失败或暂停。
查询数据文件是否为自动盘区,可以查询DBA_DATA_FILES视图的AUTOEXTENSIBLE字段。
要将数据文件设置成自动盘区,可以在以下语句中加入 AUTOEXTEND ON 子句:
CREATE DATABASE ...
CREATE TABLESPACE ...
ALTER TABLESPACE ...
添加的举例:
ALTER TABLESPACE users
ADD DATAFILE '/u02/oracle/rbdb1/users03.dbf' SIZE 10M
AUTOEXTEND ON
NEXT 512K
MAXSIZE 250M;
禁用的例子:
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users03.dbf'
AUTOEXTEND OFF;
2、手动调整DataFile
使用以下语句来手动改变DataFile的大小:
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf'
RESIZE 100M;
四、修改数据文件可用性
要使DataFile脱机或联机,有两种方法:
① ALTER DATABASE 语句修改单独的DataFile
② ALTER TABLESPACE 语句修改所有的DataFile
1、在ARCHIVRLOG模式下的更改DataFile状态
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;
注:只有在ARCHIVELOG模式下才可使用ALTER DATABASE来更改DataFile
2、在NOARCHIVELOG模式下使DataFile脱机
由于在NOARCHIVELOG模式下,数据文件脱机后会造成数据的遗失,所以只能使用ALTER DATABASE语句下带有DATAFILE和OFFLINE DROP子句的选项将该DataFile直接取消,例如该DataFile只包含临时段数据,并没有备份时
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users3.dbf' OFFLINE DROP;
3、修改TableSpace中所有DataFile或TempFile的可用性
ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}
注:修改某TableSpace中的所有数据文件,但是TableSpace本身的状态不改变。
总结:
① ALTER TABLESPACE可以在数据库装载状态时发布,无需打开
② 涉及到系统表空间、撤销表空间、默认临时表空间时,必须是未打开的数据库
③ ALTER DATABASE DATAFILE 语句中必须填入文件全名