转自:http://blog.chinaunix.net/uid-26896647-id-3416724.html

一.控制文件(Control Files)


1.控制文件的作用

控制文件在Oracle数据库中扮演着很重要的角色,没有控制文件(或者控制文件损坏了),运行着的实例立即崩溃,关闭着的死活打不开,你以为你是谁,可以说,控制文件一旦损坏,数据库必然down了。Oracle数据库实例启动过程中,当启动到unmount时,此时只是在内存中为Oracle实例分配了实例空间,然后如果继续要启动到mount状态,这个时候控制文件就闪亮登场了,因为Oracle要依据控制文件找到数据文件跟重做日志文件的路径,确定找到了再进去mount状态,至于打开数据库就是确定这些文件都一致,没有问题的话就能打开了。

2.控制文件包括了哪些重要内容

控制文件包括了很多重要的信息,比如数据库的数据文件、重做日志文件、数据库的名称、数据库创建信息、表空间信息、数据文件的状态、日志文件信息、备份信息、检查点信息等

3.控制文件的性质

控制文件是一个2进制文件,不可以直接通过文本编辑器进行编写,这个文件由Oracle自己进行维护,Oracle建议控制文件至少有两份冗余,并且放在不同的磁盘中,这样能够避免一个磁盘的损坏,造成整个控制文件都丢失的情况,因为他还有一个兄弟健在,尽管一个坏了,数据库还是得down,但是有一个在的话,至少我恢复起来要快不少。

4.查看控制文件

SQL> show parameter control_files;

 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- ------------------------------
 control_files                        string      /opt/oracle/oradata/orcl/control01.ctl, /opt/oracle/oradata/orcl/control02.ctl,                                             
                                                       /opt/oracle/oradata/orcl/control03.ctl

也可以通过 v$controlfile

SQL> desc v$controlfile;
 Name                  Type          Nullable Default Comments
 --------------------- ------------- -------- ------- --------
 STATUS                VARCHAR2(7)   Y                        
 NAME                  VARCHAR2(513) Y                        
 IS_RECOVERY_DEST_FILE VARCHAR2(3)   Y                        
 BLOCK_SIZE            NUMBER        Y                        
 FILE_SIZE_BLKS        NUMBER        Y   

SQL> col name for a30
 SQL> select * from v$controlfile;

 STATUS  NAME                           IS_RECOVERY_DEST_FILE   BLOCK_SIZE   FILE_SIZE_BLKS
 ------- ------------------------------ --------------------- ---------- --------------
         /opt/oracle/oradata/orcl/contr NO                                    16384                492
         ol01.ctl                                                       

         /opt/oracle/oradata/orcl/contr NO                                    16384                492
         ol02.ctl                                                       

         /opt/oracle/oradata/orcl/contr NO                                    16384                492
         ol03.ctl                                                        

默认控制文件的块大小为16K


二.数据文件(Data Files)

1.数据文件的作用

数据文件当然是用来存储实际数据的啦,数据文件是存储数据的物理概念,我们还有一个更大的逻辑概念,叫做表空间,表空间跟数据文件又是一个什么样的关系呢?简单的说就是一个表空间至少包含可一个数据文件,创建数据库对象的时候指定的是使用的表空间,所以就不难理解为什么一个对象(比如一张大表)可以跨越多个数据文件了。

2.数据文件的状态

表空间可以置为offline、online、readonly、readwrite,数据文件也可以置为offline、online,不过这也是有限制的,比如你不可以把system表空间offline,你当然也不能把system表空间的数据文件offline,如果连system表空间的数据文件都不工作了,那大家都可以一边玩去了。

3.查看数据文件的信息

SQL> col name for a30
 SQL> select file#,name,status from v$datafile;

      FILE# NAME                                STATUS
 ---------- ------------------------------ -------
          1 /opt/oracle/oradata/orcl/syste SYSTEM
            m01.dbf                       

          2 /opt/oracle/oradata/orcl/gdyx0 ONLINE
            3.dbf                         

          3 /opt/oracle/oradata/orcl/sysau ONLINE
            x01.dbf                       

          4 /opt/oracle/oradata/orcl/users ONLINE
            01.dbf                        

          5 /opt/oracle/oradata/orcl/gdyx. ONLINE
            dbf                           

  6 /data1/dbf/gdyx05.dbf          ONLINE
          7 /opt/oracle/oradata/orcl/gdyx2 ONLINE
            .dbf                          

          8 /data1/dbf/UNDOTBS2.DBF        ONLINE
          9 /data1/dbf/gdyx04.dbf          ONLINE
         10 /data1/dbf/undotbs01_01.dbf    ONLINE
         11 /data1/dbf/system02.dbf        SYSTEM
         12 /data1/dbf/SYSAUX02.dbf        ONLINE

 12 rows selected

4.修改数据文件的状态

两种方式:
比如我现在要把上面查到的用红色标记了的数据文件offline

SQL>alter database datafile '/data1/dbf/gdyx05.dbf' offline;

这里实际我就没试了,肯定可以,因为我是在备份库上做的测试,尽管是备份库,那也是公司的东西,要是出问题了,屌丝担当不起(O(∩_∩)O~)

也可以直接指定文件号

alter database datafile 6 offline;

三.临时文件(Temp Files)

1.临时文件一些特点
临时文件不是临时存在的文件,而是临时表空间对应的数据文件,这个文件不是一用完就删除,而是指这个文件存储的对象是属于临时存在的对象。临时文件主要用于大量的排序的时候,如果不能在内存中进行排序,那么就会将数据转移到临时文件中作为中转。

2.注意的地方
临时表空间是必须处于nologging状态的,所以临时文件也是处于nologging状态的,临时表空间的数据文件在分配存储空间的时候与普通表空间的数据文件并不相同,这些临时文件不需要格式化,初建的时候只是指定了大小,而没有实际的占用。临时表空间中的数据文件的空间在使用后并不会主动的释放,因此数据库在使用一段时间后,临时表空间总是看起来是满的,但是实际上可能根本就没有使用,可以通过下面的动态性能视图查看临时表空间的实际占用情况

select blocks * 你的block的大小(一般是8k) from v$sort_usage;

3.创建临时表空间

create temporary tablespace temp01 tempfile '......' size 100m;

4.给临时表空间添加数据文件

alter tablespace temp01 add tempfile '' size 100m;