Oracle 1Z031第八章管理表空间和数据文件

本文介绍Oracle数据库中表空间的管理方法,包括创建、调整大小、离线及只读操作等。探讨了不同类型的表空间,如系统表空间、临时表空间等,并讲解了Oracle管理文件(OMF)的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
1Z031第八章管理表空间和数据文件
学习目标
1、描述数据库的逻辑结构
2、创建表空间
3、改变表空间的大小
4、为临时段分配空间
5、改变表空间的状态
6、改变表空间的存储状态
7、使用OMF
 
Database Storage Hierarchy
数据库的逻辑结构
数据库——X表空间——X——X扩展——X数据块
逻辑结构     X          |
|                   |            |             |
|                   |            |             |
X                 |            |             |
            数据文件———————       |            |
|                                |             |
|                                |             |
X                              |             |
操作系统块 X———————
X 表示一对多)
数据库、表空间、段、扩展、数据块为逻辑结构
数据文件、操作系统块为物理结构
至于这些结构在第一章已经讲得很详细,每必要重复。重点将一下表空间在数据库中的位置。
 
Tablespaces
表空间
Oracle 数据库中的数据都是存储在表空间中。
Oracle数据库可以从逻辑上有小的空间组成,这些小的空间就是表空间。
一个表空间在同一时刻只能属于一个数据库。
每个表空间可以有多个操作系统文件组成,这些文件就是数据文件。
一个表空间可以有0个或者多个段(segment)。
在数据库运行的时候表空间可以被挂起上线。
system和有活动回退段的表空间外,表空间可以离线,离开数据库的运行。
表空间可以在读写状态和只读状态间切换。
 
Data Files
数据文件
每个Oracle数据库拥有一个或者多个数据文件。这些物理结构是由Oracle服务器的操作系统来保证的。
数据文件只能属于一个表空间。
Oracle服务器通过分配一定数量的磁盘空间加上少量额外空间,为一个表空间创建数据文件。
数据库管理员可以在数据文件创建以后改变其大小或者指定数据文件在表空间中对象增长的时候动态增长。
 
Segments
段是表空间中为特定的逻辑存储结构给定的空间。比如,所以分配给表的存储空间是一个段。
一个表空间包含一个或者多个段。
段不能跨越表空间,但是段可以跨越同一个表空间的数据文件。
每个段有一个或者多个扩展组成。
 
Extents
扩展
空间是通过扩展分配给段
一个或者多个扩展组成段。
一个段创建的时候,起码包含一个扩展。
随着段扩张,扩展加入到段中。
DBA可以手工增加段。
扩展式一系列连续的Orale数据块。
扩展不能跨越数据文件,必须存在于一个数据文件中。
 
Data Blocks
数据块
Oracle服务器管理数据文件中的存储空间是通过Oralce 块也叫做数据块。
1、在最细的粒度上,Oracle数据库中数据存放在数据块中。
2、数据块是Oracle数据库可以分配、读、写的最小存储单位。
3、一个数据块包含一个或者多个分配给相应数据文件的OS块。
4、Oracle标准数据块大小是通过DB_BLOCK_SIZE参数在数据库创建的时候来定义其大小。
5、数据块大小应该是OS块大小的倍数,这样减小不必要的I/O
6、最大数据块大小取决于操作系统。
 
SYSTEM and Non-SYSTEM Tablespaces
系统和非系统表空间
 
系统表空间
       在数据库创建的时候创建。
       包含数据字典
       包含系统回退段
非系统表空间
       独立的段(segment
       方便的空间管理
       可以控制分配给用户的空间
 
Creating Tablespaces
创建表空间
 
create tablespace userdata
    datafile ‘/u01/oradata/userdata01.dbf’ size 100M
    autoextend on next 5M maxsize 200M;
创建表空间的语法
    CREATE TABLESPACE tablespace
[DATAFILE clause]
[MINIMUM EXTENT integer[K|M]]
[BLOCKSIZE integer [K]]
[LOGGING|NOLOGGING]
[DEFAULT storage_clause ]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
对这个语法要详细解释一下,tablespace是oracle 数据库逻辑结构和物理结构的结合点,非常重要。
DATAFILE 给出组成表空间的数据文件。
MINIMUM EXTENT
        保证每一个在表空间中使用的扩展的大小是一个整数的倍数。单位为K 或者 M。
LOGGING/NOLOGGING
        标明默认情况下所有的在表空间中的表、索引、分区将所有的更改写到重做日志,LOGGING是默认的参数。NOLOGGING 只是用在一些DML和DDL语句比如直接装载。
DEFAULT   
        标明所有对象的默认的存储参数。
PERMANENT
        标明表空间可以用于存储永久对象。
TEMPORARY
        标明表空间仅用于存放临时对象,比如用于ORDER BY子句产生的隐式排序,EXTENT_MANAGEMENT_CLAUSE 标明表空间如何管理 EXTENT。
 
datafile_clause :== filename
[SIZE integer[K|M] [REUSE] | REUSE ] [ autoextend_clause ]
where: filename is the name of a data file in the tablespace
SIZE specifies the size of the file. Use K or M to
specify the size in kilobytes or megabytes.
REUSE allows the Oracle server to reuse an existing file
autoextend_clause enables or disables the automatic extension of
the data file. This clause is discussed in a
subsequent section of this lesson.
See Also: Oracle9i SQL Reference and Oracle9i Concepts for additional information.
 
Space Management in Tablespaces
表空间的空间管理
 
本地管理的表空间
    空闲的扩展记录在位图中(bitmap)
    每一个bit的对应一个或者一组数据块
    bit的值标明是空闲还是使用了的数据块
   
字典管理的表空间
    默认的方式
    空闲的扩展记录在数据字典表中
 
Locally Managed Tablespaces
本地管理的表空间
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;
 
可以减少数据字典表的争夺
在空间分配和释放的时候没有回退产生
不需要回收空间
语法
    extent_management_clause :==
[ EXTENT MANAGEMENT
[ DICTIONARY | LOCAL
[ AUTOALLOCATE | UNIFORM [SIZE integer[K|M]] ] ] ]
 
extent management子句可以用在不同的create命令中
SYSTEM表空间外的永久表空间,临时表空间create temporary tablespace可以用extent management local
Advantages of Locally Managed Tablespaces
本地管理的表空间的优势
   本地管理表空间避免了下述情况,字典管理表空间中在一个扩展中分配或者释放空间导致数据字典表在回退段中分配或者释放空间,从而减少了空间管理的操作。
因为本地管理的表空间不需要在数据字典表中记录空闲空间,从而减少了这些表的争用。
本地管理的扩展自动追踪临近的空闲空间,消除了合并空闲空间的需要。
本地管理的表空间中的扩展的大小可以自动由系统决定。或者,所有的本地管理的扩展都可以使用相同的大小。
扩展中位图的改变不会产生回退信息,因为他们不更新数据字典表(除非一些特殊的情况必然表空间限额信息)。
 
Dictionary Managed Tablespaces
字典管理的表空间
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE ( initial 1M NEXT 1M );
 
扩展在数据字典中管理
每个表空间中的段可以有不同的存储参数。
需要空间回收。
 
Changing the Storage Settings
改变存储设置
ALTER TABLESPACE userdata
MINIMUM EXTENT 2M;
 
ALTER TABLESPACE userdata
DEFAULT STORAGE (
INITIAL 2M
NEXT 2M
MAXEXTENTS 999 );
注意:本地管理的表空间的存储参数不能修改。
 
Undo Tablespace
重做表空间
用于存储回退段
不能包含其它的对象
扩展都是本地管理的
只能在create tablespace语句中使用datafile extent management 子句。
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo101.dbf' SIZE 40M;
 
Temporary Tablespace
临时表空间
 
用于排序操作
不能包含任何永久对象
建议使用本地管理扩展
 
CREATE TEMPORARY TABLESPACE temp
TEMPFILE '/u01/oradata/temp01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;
 
通过显式地为排序段指派临时表空间,你可以更有效的管理排序时需要的空间。临时表空间中不会有永久对象。
排序,或者临时对象均使用这些被共享于操作多个排序操作的段。临时表空间用于提高多重,大到不适合放置到内存中的排序。在特定临时表空间上创建的排序段在实例的第一个排序操作时创建。排序段通过分配扩展增大直到段的大小等于或者大于所有实例中的活动排序需要存储空间的大小。
CREATE TEMPORARY TABLESPACE Command
创建临时表空间命令
 
尽管alter / create tablespace … … temporary 命令可以用来创建临时表空间。但是建议使用create temporary tablespace 命令来做。
本地管理的临时表空间有临时数据文件,这些临时数据文件和普通的数据文件类似只是在以下几个方面有所区别:
1、           临时数据文件总是设置为nologging状态
2、           你不能将临时数据文件设置为只读
3、           你不可以重命名临时数据文件
4、           你不可以通过alter database命令来创建临时数据文件。
5、           临时数据文件对只读的数据库同样需要。
6、           介质恢复不恢复临时文件。
7、           backup controlfile命令不产生任何临时数据文件的信息。
8、           create controlfile命令不需要给出任何临时文件的信息。
为了优化临时表空间中排序的性能,设置uniform size sort_area_size参数的倍数。
 
Default Temporary Tablespace
默认临时表空间
 
你可以标明一个全数据库范围内默认的临时表空间,避免使用system表空间来用于存放临时数据。可以通过create database 或者 alter database命令来创建。当使用create database命令创建,默认的临时表空间是本地管理的。
 
当创建数据库时没有指明默认临时表空间,任何用户创建时没有使用 temporary tablespace子句,那么system 表空间被用为临时表空间。同时在system表空间被用为临时表空间时在alert_sid.log文件中产生一个警告。在数据库创建的同时创建临时表空间可以阻止这样的事情发生。
在数据库创建以后,临时表空间可以通过例如:
   alter database default temporary tablespace temp;来设置,一旦设置用户没有明确的标明使用临时表空间的都使用默认的临时表空间。
默认的临时表空间可以通过使用alter database default temporary tablespace命令来改变。当临时表空间改变的时候任何指派给默认表空间的用户将指派到新的默认表空间。
 
Restrictions on Default Temporary Tablespace
默认表空间上的限制
 
它不能删除直到有新的默认表空间可用。不能被offline。你不能将默认临时表空间改变为永久表空间。
 
Offline Status
离线状态
 
离线表空间不能再进行数据操作。一些表空间必须在线:
system
有活动的回退段的表空间
默认临时表空间
使表空间离线:
   alter tablespace userdata offline;
使表空间上线:
   alter tablespace userdata online;
使数据库离线的作用
使一个数据库的分区不可用,然而使数据库的其他部分可以正常的访问
作一个离线表空间备份(虽然一个表空间可以在上线使用的时候备份)
在数据库打开的情况下作一个表空间的恢复
在数据库打开的情况下移动数据文件。
在一个表空间离线的状态下,Oracle不在容许任何SQL语句的子句引用这个表空间中的对象。用户试图访问这个表空间的对象将会收到错误。
一个表空间离线、上线这些活动会被记录在数据字典和控制文件中。如果一个表空间离线的时候关闭数据库,这个表空间在数据库mount open的时候仍然离线。
 
ALTER TABLESPACE tablespace
{ONLINE
|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR RECOVER]}
where: NORMAL flushes all blocks in all data files in the tablespace out of the SGA. This is the default. You need not perform media recovery on this tablespace before bringing it back online.Use the NORMAL clause whenever possible.
TEMPORARY performs a checkpoint for all online data files in the tablespace only. Any offline files may require media recovery.
IMMEDIATE does not ensure that tablespace files are available and does not perform a checkpoint. You must perform media recovery on the tablespace before bringing it back online.
FOR RECOVER takes tablespaces offline for tablespace point-in-time recovery.
 
Read-Only Tablespaces
只读表空间
ALTER TABLESPACE userdata READ ONLY;
表空间只能读操作,对象可以从表空间中删除,在可移动的介质上的表空间创建只读表空间
使表空间只读阻止相应表空间中数据文件的写操作。同样,数据文件可以放置在只读的介质上,如CD-ROM或者一次可写的设备(WORM)。只读表空间消除了须要备份大的,静态的数据库分区的需要。
在一个只写一次的设备上创建只读表空间。
1、ALTER TABLESPACE...READ ONLY.
2、 使用操作系统的命令把这个表空间的数据文件移到只读的设备上
3、 alter tablespace . . . rename datafile
 
alter tablespace   read only 命令把表空间置为过渡只读阶段。在这个过渡阶段,没有写操作可以在这个表空间发生,除了现存的进程在以前修改了数据库的回退。在现存的进程提交或者回退以后,alter tablespace   read only命令完成,表空间置于只读状态。你可以在只读表空间中drop对象,比如表,索引,因为这些命令只影响数据字典。这是可能的是因为DROP命令之时更新数据字典,并不更新表空间中的物理文件。对于本地管理的表空间,删除的段变为临时段,阻止位图的更改。
把只读的表空间改为可写,所有在这个表空间中的数据文件必须是在线的。把表空间置为只读,导致这个表空间中的数据文件产生checkpoint
 
Dropping Tablespaces
删除表空间
 
表空间从数据字典中删除
可选的,表空间内容从数据字典中删除
操作系统文件可以通过选项
and datafiles 子句来删除:
   drop tablespace userdata
      including contents and datafiles;
 
 
DROP TABLESPACE tablespace
[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]
 
CASCADE CONSTRAINTS
从表空间外的表中删除指向被删除的表空间中表的主键和唯一键,参照完整性的约束。
 
注意点:
   不能够删除包含数据的表空间,在没有使用including contents选项的情况下。这个选项在表空间包含大量的对象的时候将产生大量的回退。
   在表空间删除后,它的数据不再在数据库中存在。
   表空间删除后,只是在相应数据库中的控制文件上数据文件的指针被删除掉。操作系统文件仍然存在并且要删除掉必须显式地使用相应的操作系统命令,除非 and datafiles子句被使用。
   甚至表空间切换到只读,它仍然能被删除,包括其中的段。
   建议在删除表空间前使表空间离线,以保证没有进程进入这个表空间中的任何段。
  
Resizing a Tablespace
调整表空间大小
  
   增加数据文件
   改变数据文件的大小
      自动
      手动
 
Enabling Automatic Extension of Data Files
设置数据文件自动增长
  
   ALTER DATABASE DATAFILE
'/u01/oradata/userdata02.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
 
数据文件创建后,下述的SQL语句可以用来设置自动增长数据文件:
   create database
   create tablespace    datafile
   alter database    add datafile
使用alter database 命令更改数据文件来实现自动增长
   alter database datafile        [autoextend_clause]
 
autoextend_clause:== [ AUTOEXTEND { OFF|ON[NEXT integer[K|M]]
[MAXSIZE UNLIMITED | integer[K|M]] } ]
 
 
next 
    当更多的扩展分配给数据文件时标明磁盘空间大小
 
给已有的数据文件设置自动增长:
    alter database [database]
        datafile ‘filename’[,’filename’] … … autoextend_clause
 
Changing the Size of Data Files Manually
手动设置数据文件大小
 
    ALTER DATABASE
DATAFILE '/u03/oradata/userdata02.dbf'
RESIZE 200M;
 
如果数据库对象的存储空间大于标明的大小,那么数据文件大小仅仅收缩至最后一个对象的最后一个数据块。
 
Adding Data Files to a Tablespace
给表空间增加数据文件
  
   ALTER TABLESPACE app_data
ADD DATAFILE '/u01/oradata/userdata03.dbf'
SIZE 200M;
 
Moving Data Files: ALTER TABLESPACE
移动数据文件:alter tablespace
表空间必须离线
目标数据文件必须存在
 
   ALTER TABLESPACE userdata
RENAME
DATAFILE '/u01/oradata/userdata01.dbf'
TO '/u01/oradata/userdata02.dbf';
 
Alter tablespace命令只能用于非system表空间并且不含有活动的回退或者临时段的表空间。
   重命名数据文件的步骤是
1、           将表空间离线
2、           OS命令移动或者复制数据文件
3、           运行alter tablespace rename datafile命令
4、           tablespace上线
5、           如果必要用操作系统命令将旧的文件删除
源文件的名字必须与存放在控制文件中的名字一致。
 
 
Moving Data Files:ALTER DATABASE
通过alter database 移动数据文件
数据库必须已经挂载
目标文件必须存在
ALTER DATABASE RENAME
FILE '/u01/oradata/system01.dbf'
TO '/u03/oradata/system01.dbf';
 
Alter database 命令适用于移动所有类型的数据文件
 
ALTER DATABASE [database]
RENAME FILE 'filename'[, 'filename']...
TO 'filename'[, 'filename']...
移动步骤
1、关闭数据库
2、用操作系统命令移动数据文件
3、挂载数据库
4、运行alter database rename file命令
5、打开数据库
 
Configuring Oracle Managed Files for Tablespace Creation
为数据库创建配置Oracle管理文件
 
用OMF创建表空间需要配置一个初始化参数
DB_CREATE_FILE_DEST:设置给出默认的数据文件位置
这个初始化参数可以用初始化文件或者动态的用alter system 命令设置:
ALTER SYSTEM SET
db_create_file_dest = '/u01/oradata/db01';
 
 
 
Creating Tablespaces with OMF
用OMF创建表空间
OMF配置后,create tablespace 语句中 datafile子句可以不需要
    CREATE TABLESPACE apps2_data DATAFILE SIZE 20M;
数据文件创建到db_create_file_dest参数指定的文件系统的位置。
默认情况下文件大小为100M并且设置为自动扩展,没有大小限制。
当表空间删除的时候,所有的文件在OS级别删除。
OMF可以增加到现存的表空间。
 
    DB_CREATE_ONLINE_LOG_DEST_n 需要设置以防止日志文件和控制文件和数据文件放置在一起。
 
Obtaining Tablespace Information
获取表空间信息
表空间的信息
        dba_talbespaces
        v$tablespace
数据文件信息
        dba_data_files
        v$datafile
临时文件信息
        dba_temp_files
        v$tempfile
 
本章中你应该掌握如何:
    使用表空间来分隔数据
    调整表空间的大小通过:
       增加数据文件
       扩张数据文件
    使用本地管理的表空间
    使用临时表空间
    使用ORALCE 管理文件
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值