Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1239457
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-10 13:31:10

涂抹ORACLE试阅章节:第16章-体系结构之结构

===========================================================================

16.1.2 数据文件(Datafiles )

  数据库中的实际数据存储于数据文件中。一个数据库中会有很多个数据文件。其实不要说数据库,一个表空间都有可能存在多个数据文件(表空间是一个逻辑存储结构,一个数据库中包含多个表空间),一个数据文件只能属于一个表空间。

  每个数据文件在物理上都对应一个操作系统文件,或者一个裸设备。Oracle在创建数据文件时,是通过操作系统在指定路径下分配一块指定大小的磁盘空间,并将这块空间内的数据清空,然后按照指定的块大小格式化这块存储区域。如果一次分配的空间比较大,那么视磁盘的I/O速率,本步操作有可能要花费相当长的时间。如果创建数据文件时,指向的是裸设备的话,那么该数据文件指定的容量不能大于裸设备最大空间,并且,一个裸设备上只能创建一个数据文件。

    提示:什么叫裸设备?

    裸设备,英文叫Raw Device,你可以把它理解成没有文件系统的存储设备,如刚买回来一块硬盘,分完区(或者不分区),不执行格式化操作,直接挂到操作系统上使用。如果你脑细胞转得足够快,这会儿是不是已经琢磨过来了,没错,裸设备就是一种底层原始设备,操作系统提供的文件系统不过是于裸设备之上加了一层罢了,因此,某些情况下直接将数据文件、日志文件、控制文件存储于裸设备,能够在一定程度上提高I/O的读写效率(跳过了操作系统层嘛)。不过,号称Oracle的下一个版本12g就不再提供对裸设备的支持。

  一定要清晰地认识到,虽然数据文件是数据的最终存放地,但数据文件是一个物理概念,无法在创建对象或存储对象时,为对象指定存放到哪个数据文件中。对象在存储时只能指定存储的表空间,然后由Oracle自动对存储区域进行分配,如果指定的表空间含有多个数据文件,那么该对象就可能被存储到多个数据文件中。

  数据文件有多种状态,其中联机(Online)、脱机(Offline)和SYSTEM(只有SYSTEM表空间数据文件的状态会显示为SYSTEM)比较常见,只有当数据文件处于联机状态或SYSTEM状态时,用户才能正常访问该数据文件中存储的数据。除非DBA手动指定数据文件(或数据文件所属的表空间)为脱机状态,否则在默认情况下数据文件将一直是联机状态。

  要将数据文件置为脱机状态,可以通过下列语句实现,例如将SCOTT对象的数据文件置为脱机状态:

    SQL>  ALTER DATABASE DATAFILE  ' F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF '   OFFLINE ;

    Database altered.

  注意哟,SYSTEM 表空间对应的数据文件必须是SYSTEM状态。

  将数据文件置于联机状态的语句与上类似,只需要将 OFFLINE 关键字换为 ONLINE 即可,例如:

    SQL>  ALTER DATABASE DATAFILE   ' F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF '   ONLINE ;

    Database altered.

  查询数据库中数据文件,以及文件的状态可以通过查询DBA_DATA_FILES和V$DATAFILE两个视图实现:

    SQL>  SELECT NAME,STATUS FROM V$DATAFILE;

    NAME                                      STATUS

    ----------------------------------------  -------

    F:\ORACLE\ORADATA\JSSBOOK\SYSTEM01.DBF    SYSTEM

    F:\ORACLE\ORADATA\JSSBOOK\UNDOTBS01.DBF   ONLINE

    F:\ORACLE\ORADATA\JSSBOOK\SYSAUX01.DBF    ONLINE

    F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF     ONLINE

    F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF     ONLINE

    提示:V$* 和DBA_*的区别。

    你可能会感到疑惑,实现相同(或类似)功能为什么会有两种视图呢?V$*视图和DBA_*视图有什么区别吗?什么时候使用V$*视图,什么时候应该使用DBA_*视图呢?

    这里三思并不想描述得太复杂,下面简单通过三五十万字描述一下这几个问题!噢,你说时间紧任务急,没空看大段文字,能不能稍简短描述?这个,好吧,那就把万字去了说。

    在Oracle的定义中,V$*视图是指动态性能视图,而DBA_*(含ALL_*和USER_*等)则是数据字典表,V$*视图和DBA_*视图均是由Oracle自行维护的包含数据库中对象信息或当前运行状态的对象,两者并不一个东西,实现的功能也不同,至多只是类似。如说上面提到的两个视图,都可以用来查询数据文件信息,但是就上面的两个视图而言,V$*视图中提供的信息更全。

    从应用的角度来看,V$*视图应用范围更广,只要Oracle数据库启动到MOUNT状态,就可以访问V$*视图;而对于DBA_*类的数据字典表,只有当Oracle数据库处于OPEN状态时才能查询。究竟何时应使用V$*视图,何时使用DBA_*视图,一方面是根据DBA的个人使用习惯而定,另一方面则是Oracle看数据库的实际状态。

16.1.3 临时文件(Tempfiles )

  临时文件并不是指临时存在的文件,而是临时表空间对应的数据文件,从实际表现上来看,该文件也不是说用完就会被删除,而是指该文件中存储的对象属于临时存在对象。

  这是一类特殊的数据文件,该文件也是用来保存数据。通常,Oracle在执行大规模排序操作时,如果PGA内存区中无法存放,就会将数据存储到临时表空间中作为中转,但是这部分空间并不是永久占用,当操作执行完毕后,这部分空间又可以随时再被其他操作临时使用,因此你可以把这类文件理解成需要时临时拿来用用的文件。不过,临时表空间的数据文件确实与普通表空间数据文件有不同之外:

  • 因为临时表空间必须处于N ologging 模式,因此临时表空间数据文件也处于N ologging 模式。
  • 临时表空间数据文件不能被置为只读。
  • 不能通过ALTER DATABASE语句创建临时表空间数据文件。
  • 通过RMAN备份时不会临时表空间数据文件,恢复时自然也不会对其进行恢复。不过环境下,通过RMAN执行数据库恢复后,当打开数据库时,会自动创建临时表空间数据文件。
  • 临时表空间数据文件在分配存储空间时也与普通表空间数据文件不同。普通表空间数据文件分配空间时,需要等待操作系统格式化相应空间。临时表空间数据文件是一种稀疏( S parse )类型的文件,初始创建时只是看起来占用了指定大小的空间,但实际上此时空间并未真正占用,这类文件的空间将会在实际使用时进行分配。

  可以通过DBA_TEMP_FILES或V$TEMPFILE视图查询当前数据库中临时表空间的数据文件信息,例如:

    SQL>  SELECT NAME FROM V$TEMPFILE;

    NAME

    --------------------------------------------------

    F:\ORACLE\ORADATA\JSSBOOK\TEMP01.DBF

=================================================

阅读(1417) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~