上海校区切换校区
图标

学习文章

当前位置:首页 > >学习文章 > >

{甲骨文OracleC} 数据文件和临时文件的管理

发布时间: 2017-09-21 14:31:52

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、删除数据文件必须保证数据块处于打开状态。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 




/* Style Definitions */

table.MsoNormalTable

{mso-style-name:普通表格;

mso-tstyle-rowband-size:0;

mso-tstyle-colband-size:0;

mso-style-noshow:yes;

mso-style-priority:99;

mso-style-parent:"";

mso-padding-alt:0cm 5.4pt 0cm 5.4pt;

mso-para-margin:0cm;

mso-para-margin-bottom:.0001pt;

mso-pagination:widow-orphan;

font-size:10.0pt;

font-family:"Times New Roman",serif;}




上一篇: {甲骨文OracleC} 表碎片整理操作步骤详解

下一篇: {大数据}你应该知道的大数据专业术语

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!