现在的位置: 首页 > 综合 > 正文

oracle学习笔记(2)——物理存储结构——数据文件

2013年03月11日 ⁄ 综合 ⁄ 共 5618字 ⁄ 字号 评论关闭

1、数据文件的内容

用于保存数据库中所有 数据的文件(.DBF)。

临时数据文件是一种特殊的数据文件,其存储内容是临时性的,在一定条件下自动释放。

Oralce数据库中的每个数据文件都具有两个文件号,称为绝对文件号和相对文件号,用于唯一地确定一个数据文件。其中,绝对文件号用于在整个数据库范围内唯一标识一个数据文件;相对文件号用于在表空间范围内唯一标识一个数据文件。

2、数据文件与表空间的关系

一个表空间可以包含几个数据文件

一个数据文件只能从属于一个表空间

3、数据文件的管理策略

由于对数据库的操作最终转换为对数据文件的操作,因此在数据库运行过程中对数据文件进行频繁的读写操作。为了提搞I/O效率,应该合理的分配数据文件的存储位置。

把不同存储内容的数据文件放置在不同的硬盘上,可以并行访问数据,提高系统读写的效率。

初始化参数文件、控制文件、重做日志文件最好不要与数据文件存放在同一个磁盘上,以免数据库发生介质故障时,无法恢复数据库。

4、数据文件的管理

(1)创建数据文件

数据文件依附于表空间而存在,创建数据文件就是向表空间添加文件。在创建数据文件时应该根据文件数据量的大小确定文件的大小以及文件的增长方式。

语法:

create tablespace:  创建表空间同时创建数据文件

create temporary tablespace:  创建临时表空间同时创建临时数据文件

create database    创建数据库时创建数据文件

ALTER TABLESPACE…ADD DATAFILE  向表空间中加数据文件

ALTER TABLESPACE…ADD TEMPFILE  向表空间中加临时数据文件

举例:

向ORCL数据库的USERS表空间中添加一个大小为10 MB的数据文件。

SQL>ALTER TABLESPACE USERS ADDDATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF'SIZE 10M;

向ORCL数据库的TEMP表空间中添加一个大小为5 MB的临时数据文件。

SQL>ALTER TABLESPACE TEMP ADDTEMPFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF'SIZE 5M;

 

(2)修改数据文件的大小

1)  设置数据文件为自动增长方式。

优点:DBA无须干涉,保证不因空间不足而报错。

方法:可以在创建时设置数据文件为自动增长,也可以在创建后修改数据文件为自动增长

格式:AUTOEXTEND ON NEXT …MAXSIZE…|UNLIMITED

举例:

为ORCL数据库的USERS表空间添加一个自动增长的数据文件。

SQL>ALTERTABLESPACE USERS ADD DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS03.DBF'

SIZE 10M AUTOEXTEND ON NEXT 512KMAXSIZE 50M;

修改ORCL数据库USERS表空间的数据文件USERS02.DBF为自动增长方式 。

SQL>ALTERDATABASE DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\

USERS02.DBF' AUTOEXTEND ON NEXT 512K MAXSIZE UNLIMITED;

取消ORCL数据库USERS表空间的数据文件USERS02.DBF的自动增长方式。

SQL>ALTER DATABASE DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF' AUTOEXTEND OFF;

2)手工改变数据文件的大小。

格式:ALTER DATABASE  DATAFILE…RESIZE…

举例:

将ORCL数据库USERS表空间的数据文件USERS02.DBF大小设置为8 MB 。

SQL>ALTER DATABASE  DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF'RESIZE 8M;

 

(3)改变数据文件的可用性

1)概念:

可以通过将数据文件联机或脱机来改变数据文件的可用性。(脱机状态的文件对数据库来说不可用)

2)在下面几种情况下需要改变数据文件的可用性:

要进行数据文件的脱机备份时,需要先将数据文件脱机;

需要重命名数据文件或改变数据文件的位置时,需要先将数据文件脱机;

如果Oracle在写入某个数据文件时发生错误,会自动将该数据文件设置为脱机状态,并且记录在警告文件中。排除故障后,需要以手动方式重新将该数据文件恢复为联机状态;

数据文件丢失或损坏,需要在启动数据库之前将数据文件脱机。

3)归档模式下数据文件可用性的改变

非归档模式只能做冷备份,并且恢复时只能做完全备份. 最近一次完全备份到系统出错期间的数据不能恢复. 归档模式可以做热备份,并且可以做增量备份,可以做部分恢复.

数据文件可用性的改变:

ALTER DATABASE DATAFILE… ONLINE|OFFLINE

临时数据文件可用性的概念改变:

ALTER DATABASE TEMPFILE… ONLINE|OFFLINE

举例:

在数据库处于归档模式下,将ORCL数据库USERS表空间的数据文件USERS02.DBF脱机。

SQL>ALTER DATABASE DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF' OFFLINE;

在数据库处于归档模式下,将ORCL数据库USERS表空间的数据文件USERS02.DBF联机。

SQL>ALTER DATABASE DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF' ONLINE;

4)非归档模式下数据文件可用性的改变

在非归档模式下,通常不能将数据文件脱机。

如果由于数据文件的损坏,需要将数据文件脱机,然后重新启动数据库,需要使用ALTER DATABASE DATAFILE…OFFLINE FOR DROP语句。

举例:

SQL>ALTER DATABASE DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF'OFFLINE FOR DROP;

5)改变表空间中所有数据文件的可用性

即将表空间脱机或联机则表空间中的所有数据文件都相应的脱机或联机。

在归档模式下,将表空间脱机或联机

ALTER TABLESPACE...DATAFILEONLINE|OFFLINE

在归档模式下,将临时表空间联机或脱机

ALTER TABLESPACE...TEMPFILE ONLINE| OFFLINE

举例:

在归档模式下,将USERS表空间中所有的数据文件脱机,但USERS表空间不脱机。然后再将USERS表空间中的所有数据文件联机。

SQL>ALTER TABLESPACE USERS DATAFILEOFFLINE;

SQL>RECOVER TABLESPACE USERS;

SQL>ALTER TABLESPACE USERS DATAFILEONLINE;

(关于归档模式和非归档模式的详细介绍,查看这里

 

(4)改变数据文件的名称或位置

1)改变同一个表空间中的数据文件的名称或位置

格式:

ALTER TABLESPACLE…RENAME DATAFILE…TO

举例:

更改ORCL数据库USERS表空间的USERS02.DBF和USERS03.DBF文件名为USERS002.DBF和USERS003.DBF 。

步骤:

a.       将包含数据文件的表空间置为脱机状态。

SQL>ALTER TABLESPACE USERSOFFLINE;

b.      在操作系统中重命名数据文件或移动数据文件到新的位置。分别将USERS02.DBF和USERS03.DBF文件重命名为USERS002.DBF和USERS003.DBF。

使用ALTER TABLESPACE…RENAMEDATAFILE…TO语句进行操作:

SQL>ALTERTABLESPACE USERS RENAME DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF',

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS03.DBF'TO

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS002.DBF',

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS003.DBF';

c.       将表空间联机。

SQL>ALTER TABLESPACE USERSONLINE;

 

2)  改变多个表空间中的数据文件的名称或位置

ALTER DATABASE RENAME FILE…TO

举例:

更改ORCL数据库USERS表空间中的USERS002.DBF文件位置和修改TOOLS表空间中的TOOLS01.DBF文件名

步骤:

a.      关闭数据库。

SQL>SHUTDOWN

b.      在操作系统中,将USERS表空间中的USERS002.DBF文件复制到一个新的位置,如D:\ORACLE\PRODUCT\10.2.0\ORADATA,修改TOOLS表空间的数据文件TOOLS01.DBF的名为TOOLS001.DBF。

c.      启动数据库到MOUNT状态。

SQL>STARTUPMOUNT

d.      执行ALTER DATABASE RENAME FILE…TO语句更新数据文件名称或位置。

SQL>ALTERDATABASE RENAME FILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS002.DBF',

 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TOOLS01.DBF'TO

 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\USERS002.DBF',

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TOOLS001.DBF';

e.      打开数据库。

SQL>ALTERDATABASE OPEN;

注意:

改变数据文件的名称或位置时,Oracle只是改变记录在控制文件和数据字典中的数据文件信息,并没有改变操作系统中数据文件的名称和位置,因此需要DBA手动更改操作系统中数据文件的名称和位置。

 

(5)删除数据文件

1)删除某个表空间中的某个空数据文件

ALTER TABLESPACE…DROP DATAFILE …

举例:

删除USERS表空间中的数据文件USERS03.DBF。

SQL>ALTER TABLESPACE USERS DROP DATAFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS03.DBF';

2)删除某个临时表空间中的某个空的临时数据文件

ALTER TABLESPACE… DROP TEMPFILE…

ALTER DATABASE TEMPFILE…DROP

举例:

删除TEMP临时表空间中的临时数据文件TEMP03.DBF。

SQL> ALTER TABLESPACE TEMP DROP TEMPFILE

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP03.DBF';

说明:

1)所谓的空数据文件或空临时数据文件是指为该文件分配的所有区都被回收。

2)删除数据文件或临时数据文件的同时,将删除控制文件和数据字典中与该数据文件或临时数据文件的相关信息,同时也将删除操作系统中对应的物理文件。

3)删除数据文件或临时数据文件时受到以下约束:

数据库运行在打开状态;

数据文件或临时数据文件必须是空的;

不能删除表空间的第一个或唯一的一个数据文件或临时数据文件;

不能删除只读表空间中的数据文件;

不能删除SYSTEM表空间的数据文件;

不能删除采用本地管理的处于脱机状态的数据文件。

(6)查询数据文件信息

DBA_DATA_FILES:包含数据库中所有数据文件的信息,包括数据文件所属的表空间、数据文件编号等。

DBA_TEMP_FILES:包含数据库中所有临时数据文件的信息。

DBA_EXTENTS:包含所有表空间中已分配的区的描述信息。

USER_EXTENTS:包含当前用户所拥有的对象在所有表空间中已分配的区的描述信息。

DBA_FREE_SPACE:包含表空间中空闲区的描述信息。

USER_FREE_SPACE:包含当前用户可访问的表空间中空闲区的描述信息。

V$DATAFILE:包含从控制文件中获取的数据文件动态信息。

V$DATAFILE_HEADER:包含从数据文件头部获取的信息。

V$TEMPFILE:包含所有临时文件的基本信息。

举例:

1)查询数据文件动态信息

SQL>SELECT NAME,FILE#,STATUS,CHECKPOINT_CHANGE# FROM V$DATAFILE;

2)查询数据文件的详细信息

SQL>SELECT TABLESPACE_NAME, AUTOEXTENSIBLE,FILE_NAME FROM DBA_DATA_FILES;

3)查询数据文件的增长方式

SQL>SELECT TABLESPACE_NAME, BYTES, AUTOEXTENSIBLE,FILE_NAME FROM

               DBA_DATA_FILES

4)查询临时数据文件信息

SQL>SELECT TABLESPACE_NAME, FILE_NAME, AUTOEXTENSIBLE FROM DBA_TEMP_FILES;

 

 

抱歉!评论已关闭.