Oracle表空间

来源:互联网 发布:未注册域名查询 编辑:程序博客网 时间:2024/06/06 16:28

1.ORACLE逻辑结构

ORACLE将数据逻辑地存放在表空间,物理地存放在数据文件中。

一个表空间任何一个时刻只能属于一个数据库。

 

数据库——表空间——段——区——ORACLE块

每个数据库由一个或多个表空间组成,至少一个。

每个表空间基于一个或多个操作系统的数据文件,至少一个,一个操作系统的数据文件只能属于一个表空间。一个表空间可以存放一个或多个段 segment。

每个段由一个或多个区段extent组成。

每个区段由一个或多个连续的ORACLE数据库块组成。

每个ORACLE数据块由一个或多个连续的操作系统数据块组成。

每个操作系统数据文件由一个或多个区段组成,由一个或多个操作系统数据块组成。

 

2.两类表空间:

系统SYSTEM表空间  非系统表空间 NON-SYSTEM表空间

系统SYSTEM表空间与数据库一起建立,在系统表空间中有数据字典,系统还原段。可以存放用户数据但是不建议。

非系统表空间NON-SYSTEM表空间 由管理员创建。可以方便管理。

 

3.创建数据库表空间语句:

SQL> create tablespace "test"nologging datafile 'd:\disk2\moon\test01.dbf' size10M,'d:\disk4\moon\test02.dbf' size 10M;

创建本地管理的索引表空间

SQL> create tablespace test_indexdatafile 'd:\disk6\moon\test_index.dbf' size 10M extent management local uniform size 1M;

创建UNDO表空间

SQL> create undo tablespace test_undodatafile 'd:\disk7\moon\test_undo.dbf' size 10M;

表空间已创建。

SQL> selectfile_id,file_name,tablespace_name from dba_data_files order by file_id;

  FILE_ID FILE_NAME                                         TABLESPACE

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

        1 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF     SYSTEM

        2 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF     SYSAUX

        3 C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF    UNDOTBS1

        4 C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF      USERS

        5 C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF    EXAMPLE

        6 D:\DISK2\MOON\TEST01.DBF                           test

        7 D:\DISK4\MOON\TEST02.DBF                           test

        8 D:\DISK6\MOON\TEST_INDEX.DBF                       TEST_INDEX

        9 D:\DISK7\MOON\TEST_UNDO.DBF                        TEST_UNDO

已选择9行。

SQL> selectfile#,name,status from v$datafile;

SQL> select file_id,file_name,tablespace_name,bytes/1024/1024MB from dba_data_files;

4.创建临时表空间

临时数据文件状态只能为可读写,不能重命名,不能脱机,总是为NOLOGGING状态,

只读状态运行的数据库也需要临时数据文件,临时数据文件不可恢复。

SQL> select  f.file#,t.ts#,f.name,t.name from v$tempfile f,v$tablespace t where f.ts#=t.ts#;

SQL> create temporary tablespacetest_temp tempfile 'd:\disk8\moon\test_temp.dbf' size 10M extent management local uniform size 2M;

默认临时表空间的改变

SQL> select PROPERTY_NAME,PROPERTY_VALUEfrom database_properties where property_name like 'DEFAULT%';

SQL> alter database default temporarytablespace test_temp;

SQL> select PROPERTY_NAME,PROPERTY_VALUEfrom database_properties where property_name like 'DEFAULT%';

SQL> alter database default temporarytablespace temp;

 

5.设置表空间脱机注意表空间名的大小写

正常状态 为ONLINE 联机状态 。脱机可进行:数据库打开状态下移动数据文件,数据库打开状态下恢复一个表空间。执行对表空间的脱机备份。

脱机时表空间上数据不可访问,状态变化 会记录在数据字典和控制文件中。

系统表空间,上面有活动的还原、回滚表空间,默认临时表空间不可脱机。

SQL> selecttablespace_name,status,contents from dba_tablespaces;

TABLESPACE STATUS    CONTENTS

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

SYSTEM    ONLINE    PERMANENT

SYSAUX    ONLINE    PERMANENT

UNDOTBS1  ONLINE    UNDO

TEMP      ONLINE    TEMPORARY

USERS     ONLINE    PERMANENT

EXAMPLE   ONLINE    PERMANENT

test      ONLINE    PERMANENT

TEST_INDEX ONLINE    PERMANENT

TEST_UNDO ONLINE    UNDO

TEST_TEMP ONLINE    TEMPORARY

SQL> col name for a50

SQL> select file#,name,status fromv$datafile;

    FILE# NAME                                               STATUS

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

        1 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF     SYSTEM

        2 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF     ONLINE

        3 C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF    ONLINE

        4 C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF      ONLINE

        5 C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF    ONLINE

        6 D:\DISK2\MOON\TEST01.DBF                           ONLINE

        7 D:\DISK4\MOON\TEST02.DBF                           ONLINE

        8 D:\DISK6\MOON\TEST_INDEX.DBF                       ONLINE

        9 D:\DISK7\MOON\TEST_UNDO.DBF                        ONLINE

SQL> altertablespace test_index offline;

表空间已更改。

SQL> select file#,name,status fromv$datafile;

    FILE# NAME                                              STATUS

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

        1 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF     SYSTEM

         2 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF     ONLINE

        3 C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF    ONLINE

        4 C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF      ONLINE

        5 C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF    ONLINE

        6 D:\DISK2\MOON\TEST01.DBF                           ONLINE

        7 D:\DISK4\MOON\TEST02.DBF                           ONLINE

        8 D:\DISK6\MOON\TEST_INDEX.DBF                       OFFLINE

        9 D:\DISK7\MOON\TEST_UNDO.DBF                        ONLINE

 

SQL> altertablespace test_index online;

SQL> select file#,name,status fromv$datafile;

 

    FILE# NAME                                              STATUS

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

        1 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF     SYSTEM

        2 C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF     ONLINE

        3 C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF    ONLINE

        4 C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF      ONLINE

        5 C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF    ONLINE

        6 D:\DISK2\MOON\TEST01.DBF                           ONLINE

        7 D:\DISK4\MOON\TEST02.DBF                           ONLINE

         8 D:\DISK6\MOON\TEST_INDEX.DBF                       ONLINE

        9 D:\DISK7\MOON\TEST_UNDO.DBF                        ONLINE

#############

6.表空间的设置为只读模式,注意表名字默认是大写,如果创建表空间时表名小写并加双引号可以成小写。

SQL> selecttablespace_name,status,contents from dba_tablespaces where tablespace_name like 'TEST%';

TABLESPACE STATUS    CONTENTS

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

TEST_INDEX READ ONLY PERMANENT

TEST_TEMP ONLINE    TEMPORARY

TEST_UNDO ONLINE    UNDO


SQL> alter tablespace "test"read only;

表空间已更改。

SQL> alter tablespace "test"read write;

表空间已更改。

########################################################################

7.改变表空间的存储设置

alter tablespace "test" minimumextent 100K


8.CREATE TABLESPACE 命令详解

语法描述:

CREATE [UNDO] TABLESPACEtablespace_name

[DATAFILEdatefile_spec1 [,datefile_spec2] ......

[ { MININUM EXTENT integer [k|m]

| BLOCKSIZE integer [k]

|logging clause

|FORCE LOGGING

|DEFAULT {data_segment_compression} storage_clause

|[online|offline]

|[PERMANENT|TEMPORARY]

|extent_manager_clause

|segment_manager_clause}]

1、undo

说明系统将创建一个回滚表空间。

在9i中数据库管理员可以不必管理回滚段,只有建立了undo表空间,系统就会自动管理回滚段的分配,回收的工作。当然,也可以创建一般的表空间,在上面创建回滚段.不过对于用户来说,系统管理比自己管理要好很多.如果需要自己管理,请参见回滚段管理的命令详解.

当没有为系统指定回滚表空间时,系统将使用system系统回滚段来进行事务管理。

2、tablespace

    指出表空间的名称。

3、datafile  datefile_spec1

指出表空间包含什么空间文件。datefile_spec1 是形如  ['filename'] [SIZE integer [K |M ]] [REUSE] [autoextend_clause]

[autoextend_clause]是形如: AUTOEXTEND {OFF |ON [NEXT integer [K |M ] ] [maxsize_clause] }

其中filename是数据文件的全路径名,size是文件的大小,REUSE表示文件是否被重用.

AUTOEXTEND表明是否自动扩展.OFF |ON  表示自动扩展是否被关闭.NEXT 表示数据文件满了以后,扩展的大小.

maxsize_clause表示数据文件的最大大小.形如MAXSIZE {UNLIMITED | integer [K |M ] }.UNLIMITED 表示无限的表空间.integer是数据文件的最大大小.

 DATAFILE 'D:\oracle\oradata\MAGEDATA01.dbf'  SIZE 2000M

4、MININUM EXTENT integer [k|m]

指出在表空间中范围的最小值。这个参数可以减小空间碎片,保证在表空间的范围是这个数值的整数倍。

5、BLOCKSIZE integer [k]

这个参数可以设定一个不标准的块的大小。如果要设置这个参数,必须设置db_block_size,至少一个db_nk_block_size,并且声明的integer的值必须等于db_nk_block_size.

注意:在临时表空间不能设置这个参数。

6、logging clause

这个子句声明这个表空间上所有的用户对象的日志属性(缺省是logging),包括表,索引,分区,物化视图,物化视图上的索引,分区。

7、FORCE LOGGING

使用这个子句指出表空间进入强制日志模式。此时,系统将记录表空间上对象的所有改变,除了临时段的改变。这个参数高于对象的nologging选项。

注意:设置这个参数数据库不行open并且出于读写模式。而且,在临时表空间和回滚表空间中不能使用这个选项。

8、DEFAULT storage_clause

声明缺省的存储子句。

9、online|offline

改变表空间的状态。online使表空间创建后立即有效.这是缺省值.offline使表空间创建后无效.这个值,可以从dba_tablespace中得到。

10、PERMANENT|TEMPORARY

指出表空间的属性,是永久表空间还是临时表空间。永久表空间存放的是永久对象,临时表空间存放的是session生命期中存在的临时对象。这个参数 生成的临时表空间创建后一直都是字典管理,不能使用extent management local选项。如果要创建本地管理表空间,必须使用create temporary tablespace

注意,声明了这个参数后,不能声明block size

11、extent_management_clause

这是最重要的子句,说明了表空间如何管理范围。一旦你声明了这个子句,只能通过移植的方式改变这些参数。

如果希望表空间本地管理的话,声明local选项。本地管理表空间是通过位图管理的。autoallocate说明表空间自动分配范围,用户不能指定范围的大小。只有9.0以上的版本具有这个功能。uniform说明表空间的范围的固定大小,缺省是1m。 不能将本地管理的数据库的system表空间设置成字典管理。

oracle公司推荐使用本地管理表空间。

如果没有设置extent_management_clause,oracle会给他设置一个默认值。如果初始化参数compatible小于9.0.0,那么系统创建字典管理表空间。如果大于9.0.0,那么按照如下设置:

如果没有指定default storage_clause,oracle创建一个自动分配的本地管理表空间。

否则,如果指定了mininum extent,那么oracle判断mininum extent 、initial、next是否相等,以及pctincrease是否=0.如果满足以上的条件,oracle创建一个本地管理表空间,extent size是initial.如果不满足以上条件,那么oracle将创建一个自动分配的本地管理表空间。

如果没有指定mininum extent。initial、那么oracle判断next是否相等,以及pctincrease是否=0。如果满足oracle创建一个本地管理表空间并指定uniform。否则oracle将创建一个自动分配的本地管理表空间。

注意:本地管理表空间只能存储永久对象。如果你声明了local,将不能声明default storage_clause,mininum extent、temporary.

EXTENT MANAGEMENT LOCAL

12、segment_management_clause

 SEGMENT SPACE MANAGEMENT AUTO    自动段管理

segment space management manual    手动段管理

 

下面是实际应用中的一个例子:

使用例子1:

CREATE TABLESPACE "IMAGEDATA"
    NOLOGGING
    DATAFILE 'D:"oracle"oradata"DATA01.dbf' SIZE 2000M,
    'D:"oracle"oradata"DATA02.dbf' SIZE 2000M,
    'D:"oracle"oradata"DATA03.dbf' SIZE 2000M,
    'D:"oracle"oradata"DATA04.dbf' SIZE 2000M,
    'D:"oracle"oradata"DATA05.dbf' SIZE 2000M EXTENT
    MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO

使用例子2:

CREATE TABLESPACE "IMAGEDATA"
LOGGING
DATAFILE 'E:"ORACLE"ORADATA"DATA_01.DBF' SIZE
2000M REUSE AUTOEXTEND
ON NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_02.DBF' SIZE 2000M REUSE
AUTOEXTEND
ON NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_03.DBF' SIZE 2000M REUSE
AUTOEXTEND
ON NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_04.DBF' SIZE 2000M REUSE
AUTOEXTEND
ON NEXT 51200K MAXSIZE 3900M

EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO