当前位置:文档之家› Oracle表空间和数据文件的管理

Oracle表空间和数据文件的管理

Oracle表空间和数据文件的管理
Oracle表空间和数据文件的管理

第六章表空间和数据文件的管理

6.1 Oracle引入逻辑结构的目的

Oracle数据库管理系统并没有像不少其它数据库管理系统那样直接地操作数据文件,而是引入一组逻辑结构。如图6-1所示。

图6-1

图6-1的虚线左边为逻辑结构,右边为物理结构。与计算机原理或计算机操作系统中所讲的有些不同,在Oracle数据库中,逻辑结构为Oracle引入的结构,而物理结构为操作系统所拥有的结构。

曾有不少学生问过我同样的一个问题,那就是Oracle为什么要引入逻辑结构呢?

首先可能是为了增加Oracle的可移植性。Oracle公司声称它的Oracle数据库是与IT 平台无关的,即在某一厂家的某个操作系统上开发的Oracle数据库(包括应用程序等)可以几乎不加修改地移植到另一厂家的另外的操作系统上。要做到这一点就不能直接操作数据文件,因为数据文件是跟操作系统相关的。

其次可能是为了减少Oracle从业人员学习的难度。因为有了逻辑结构Oracle的从业人员就可以只对逻辑结构进行操作,而在所有的IT平台上逻辑结构的操作都几乎完全相同,至于从逻辑结构到物理结构的映射(转换)是由Oracle数据库管理系统来完成的。

6.2 Oracle数据库中存储结构之间的关系

其实图6-1类似于一个Oracle数据库的存储结构之间关系的实体-关系图。如果读者学过实体-关系模型(E-R模型)的话,从图6-1中可以很容易地得到Oracle数据库中存储结构之间的关系。为了帮助那些没有学过E-R模型的读者理解图6-1,也是为了帮助那些

学过但已经忘的差不多了的读者恢复一下记忆,在下面对E-R模型和图6-1给出一些简单的解释。

在图6-1中,园角型方框为实体,实线表示关系,单线表示一的关系,三条线(鹰爪)表示多的关系。于是可以得到:

每个数据库是由一个或多个表空间所组成(至少一个)。

每个表空间基于一个或多个操作系统的数据文件(至少一个)。

每个表空间中可以存放有零个或多个段(Segment)。

每个段是由一个或多个区段(Extent)所组成。

每个区段是由一个或多个连续的Oracle数据块所组成。

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

每个操作系统数据文件是由一个或多个区段(Extent)所组成。

每个操作系统数据文件是由一个或多个操作系统数据块所组成。

有关段,区段,和Oracle数据块等我们在接下来的章节中要详细地介绍。

6.3 表空间和数据文件之间的关系及表空间的分类

通过前面的讨论可知:Oracle将数据逻辑地存放在表空间里,而物理地存放在数据文件里。表空间(Tablespaces)在任何一个时刻只能属于一个数据库,但是反过来并不成立,因为一个数据库一般都有多个表空间。每个表空间都是由一个或多个操作系统的数据文件所组成,但是一个操作系统的数据文件只能属于一个表空间。

表空间可以被进一步划分成一些更小的逻辑存储单位。在一个Oracle数据库中,每个数据文件(Data files)可以而且只能属于一个表空间和一个数据库。数据文件实际上是存储模式对象数据的一个容器/仓库。

在一个Oracle数据库中一般有两类表空间,他们是系统(SYSTEM)表空间和非系统(Non-SYSTEM)表空间。

系统(SYSTEM)表空间是与数据库一起建立的,在系统表空间中存有数据字典,在系统表空间中还包含了系统还原(回滚)段。虽然在系统表空间中可以存放用户数据,但考虑到Oracle系统的效率和管理上的方便,在系统表空间上不应该存放任何用户数据。非系统(Non-SYSTEM)表空间可以由数据库管理员创建,在非系统表空间中存储一些单独的段,这些段可以是用户的数据段,索引段,还原段,和临时段等。引入非系统表空间可以方便磁盘空间的管理,也可以更好地控制分配给用户磁盘空间的数量。引入非系统表空间还可以将静态数据和动态数据有效地分开,也可以按照备份的要求将数据分开存放。使用如下的命令创建一个非系统表空间:CREATE TABLESPACE表空间名

[DATAFILE子句]

[MINIMUM EXTENT 正整数[K|M]]

[BLOCKSIZE正整数[K]]

[LOGGING|NOLOGGING]

[DEFAULT 存储子句]

[ONLINE|OFFLINE]

[PERMANENT|TEMPORARY]

[区段管理子句]

[段管理子句]

在这里对以上命令中的一些子句和选项给出进一步的解释:

表空间名:所要创建的表空间名。

DATAFILE子句:组成所要创建的表空间的文件说明。

MINIMUM EXTENT:表空间中所使用的每个EXTENT都必须是该参数所指定数的整数倍。

BLOCKSIZE:为该表空间说明非标准块的大小。在使用这一子句之前,您必须先设置DB_CACHE_SIZE参数和DB_nK_CACHE_SIZE参数,而且该子句中所说明的

正整数一定与DB_nK_CACHE_SIZE参数的设定相对应。

LOGGING:说明在该表空间中所有数据的变化都将写入重做日志文件中,这也是默认方式。

NOLOGGING:说明在该表空间中所有数据的变化不都写入重做日志文件中,NOLOGGING 只影响一些DML和DDL命令。

DEFAULT存储子句:说明所有在该表空间中所创建的对象的默认存储参数。

OFFLINE:说明该表空间在创建后立即被置为脱机,即不能使用。

还有一些其它的子句和选项我们将在后续的章节中陆续地介绍。

6.4 表空间中的磁盘空间管理

在Oracle8.0和更早的版本中所有表空间中的磁盘空间管理都是由数据字典来管理的。在这种表空间的管理方法中所有的空闲区由数据字典来统一管理。每当区段被分配或收回时,Oracle服务器将修改数据字典中相应的(系统)表。

在数据字典(系统)管理的表空间中所有的EXTENTS的管理都是在数据字典中进行的,而且每一个存储在同一个表空间中的段可以具有不同的存储子句。在这种表空间的管理方法中您可以按您的需要修改存储参数,所以存储管理比较灵活但系统的效率较低。还有如果使用这种表空间的管理方法,有时需要合并碎片。由于Oracle8.0对互联网的成功支持和它在其它方面的卓越表现使得Oracle的市场占有率急速地增加,同时Oracle数据库的规模也开始变的越来越大。这样在一个大型和超大型数据库中就可能有成百乃至上千个表空间。由于每个表空间的管理信息都存在数据字典中,也就是存在系统表空间中。这样系统表空间就有可能成为一个瓶颈从而使数据库系统的效率大大地下降。

正是为了克服以上弊端,Oracle公司从它的Oracle8i开始引入了另一种表空间的管理方法,叫做本地管理的表空间。

本地管理的表空间其空闲EXTENTS是在表空间中管理的,它是使用位图(Bitmap)来记录空闲EXTENTS,位图中的每一位对应于一块或一组块,而每位的值指示空闲或分配。当一个EXTENT被分配或释放时,Oracle服务器就会修改位图中相应位的值以反映该EXTENT的新的状态。位图存放在表空间所对应的数据文件的文件头中。

使用本地管理的表空间减少了数据字典表的竞争,而且当磁盘空间分配或收回时也不会产生回滚(还原),它也不需要合并碎片。在本地管理的表空间中您无法按您的需要来随意地修改存储参数,所以存储管理不像数据字典(系统)管理的表空间那样灵活但系统的效率较高。

因为在本地管理的表空间中,表空间的管理,如磁盘空间的分配与释放等已经不在需要操作数据字典了,所以系统表空间的瓶颈问题得到了很好的解决。因此Oracle公司建议用户创建的表空间应该尽可能地使用本地管理的表空间。在Oracle9i中本地管理的表空间为默认方式,但是在Oracle8i中数据字典(系统)管理的表空间为默认方式。

6.5 创建数据字典管理的表空间

曾有位著名的学者在一份非常出名的报纸上发表了一篇震撼了整个神州大地的文章,文章的题目是:“中国妇女解放运动的先驱-潘金莲”。这篇文章一发表就在社会上引发了激烈的争论,真是“一石击起千层浪”。一位考古学的博士想利用统计学的方法科学地证明潘金莲到底是不是中国妇女解放的先驱。首先他必须将大量的数据分门别类地存入数据库中。他找到了您让您在Oracle数据库方面帮他的忙。

您决定首先要为这个项目创建一个名为jinlian(金莲)的表空间。为了平衡I/O,您决定该表空间将基于两个数据文件,它们分别是J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF,其大小都为50M(在实际中可能几百M)。为了更有效地控制磁盘的存储分配,您决定使用数据字典管理的表空间。为了防止用户在创建对象时使用的EXTENT过小而产生过多的碎片,您决定最小的EXTENT为50K(MINIMUM EXTENT 50K)。当需要磁盘空间的自动分配时第一次分配为50K(INITIAL 50K),第二次也为50K(NEXT 50K),所分配的最大磁盘空间为100个EXTENTS(MAXEXTENTS 100)。从第三次分配开始按如下的公式进行分配:NEXT * (1+PCTINCREASE/100)(n-2)。其中n为分配的次数。于是你发出了如例6-1的SQL语句来创建名为jinlian(金莲)的表空间。

例6-1SQL> CREATE TABLESPACE jinlian

2 DATAFILE 'J:\DISK2\MOON\JINLIAN01.DBF' SIZE 50 M,

3 'J:\DISK4\MOON\JINLIAN02.DBF' SIZE 50 M

4 MINIMUM EXTENT 50K EXTENT MANAGEMENT DICTIONARY

5 DEFAULT STORAGE (INITIAL 50K NEXT 50K MAXEXTENTS 100 PCTINCREASE 0);

表空间已创建。

紧接着为了验证所创建的表空间是不是数据字典管理的,您使用了如例6-4的SQL查询语句。但为了使该语句的显示结果更清晰,您又使用了例6-2和例6-3的SQL*Plus命令对输出进行了格式化。

例6-2

SQL>SET LINE 120

例6-3

SQL> COL TABLESPACE_NAME FOR A15

例6-4

SQL> SELECT tablespace_name, block_size, extent_management, segment_space_management

2 FROM dba_tablespaces;

TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN

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

SYSTEM 4096 DICTIONARY MANUAL

UNDOTBS 4096 LOCAL MANUAL

CWMLITE 4096 LOCAL MANUAL

DRSYS 4096 LOCAL MANUAL

EXAMPLE 4096 LOCAL MANUAL

INDX 4096 LOCAL MANUAL

TEMP 4096 LOCAL MANUAL

TOOLS 4096 LOCAL MANUAL

USERS 4096 LOCAL MANUAL

JINLIAN 4096 DICTIONARY MANUAL

已选择10行。

例6-4查询语句的结果表明表空间jinlian(金莲)确实是一个数据字典管理的表空间,因为extent_management列的显示结果为DICTIONARY。现在您可以使用如例6-5的SQL查询语句来验证其它的磁盘存储参数。

例6-5

SQL> select tablespace_name, initial_extent, next_extent,

2 max_extents, pct_increase, min_extlen

3 from dba_tablespaces;

TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MAX_EXTENTS PCT_INCREASE MIN_EXTLEN

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

SYSTEM 12288 12288 249 50 0

UNDOTBS 65536 2147483645 65536

CWMLITE 65536 2147483645 65536

DRSYS 65536 2147483645 65536

EXAMPLE 65536 2147483645 65536

INDX 65536 2147483645 65536

TEMP 1048576 1048576 0 1048576

TOOLS 65536 2147483645 65536

USERS 65536 2147483645 65536

JINLIAN 53248 53248 100 0 53248

已选择10行。

从例6-5查询语句的结果显示可以清楚地看出:所有的存储参数都是按您的要求设置的,因为INITIAL_EXTENT为50K(53248字节),NEXT_EXTENT也为50K(53248字节),MIN__EXTENT(MINIMUM EXTENT)也同样为50K(53248字节),最后MAX__EXTENTS(MAXEXTENTS)为100。此时您还应使用如例6-6的SQL查询语句来验证一下与文件有关的信息。

例6-6

SQL> select file_id, file_name, tablespace_name

2 from dba_data_files

3 order by file_id;

FILE_ID FILE_NAME TABLESPACE_NAME

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

1 D:\ORACLE\ORADATA\ORACLE9I\SYSTEM01.DBF SYSTEM

2 D:\ORACLE\ORADATA\ORACLE9I\UNDOTBS01.DBF UNDOTBS

3 D:\ORACLE\ORADATA\ORACLE9I\CWMLITE01.DBF CWMLITE

4 D:\ORACLE\ORADATA\ORACLE9I\DRSYS01.DBF DRSYS

5 D:\ORACLE\ORADATA\ORACLE9I\EXAMPLE01.DBF EXAMPLE

6 D:\ORACLE\ORADATA\ORACLE9I\INDX01.DBF INDX

7 D:\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBF TOOLS

8 D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF USERS

9 J:\DISK2\MOON\JINLIAN01.DBF JINLIAN

10 J:\DISK4\MOON\JINLIAN02.DBF JINLIAN

已选择10行。

从例6-6查询语句的结果显示可以清楚地看出:表空间JINLIAN共有两个操作系统文件它们分别是J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF。最后您还应该利用操作系统工具,如NT资源管理器来验证一下真正的物理文件是否真的生成了。如例6-7所示。

例6-7

从例6-7的结果显示可以清楚地看出物理文件J:\DISK2\MOON\JINLIAN.DBF确实已经生成,其大小也为50M。您还应该使用相同的方法验证表空间JINLIAN的另一个操作系统文件。

6.6 创建本地管理的表空间

接下来您决定还要为这个项目创建一个名为jinlian_index的索引表空间。该表空间只基于一个数据文件,其文件名是J:\DISK6\MOON\JINLIAN_INDEX.DBF,其大小为50M(在实际中可能为几百M)。为了方便磁盘存储的管理,您决定使用本地管理的表空间(EXTENT MANAGEMENT LOCAL)。根据您的调查,您决定每个EXTENT的大小为1M(UNIFORM SIZE 1M)。于是您发出了如例6-8的DDL语句来创建名为jinlian_index的索引表空间。

例6-8

SQL> CREATE TABLESPACE jinlian_index

2 DATAFILE 'J:\DISK6\MOON\jinlian_index.dbf'

3 SIZE 50 M

4 EXTENT MANAGEMENT LOCAL

5 UNIFORM SIZE 1M;

表空间已创建。

紧接着为了验证所创建的表空间是不是本地管理的,您使用了如例6-9的查询语句。但为了使该语句的显示结果更清晰,您可能需要使用SQL*Plus命令对输出进行格式化。

例6-9

SQL> SELECT tablespace_name, block_size, extent_management, segment_space_management

2 FROM dba_tablespaces

3 WHERE tablespace_name LIKE 'JIN%';

TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN

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

JINLIAN 4096 DICTIONARY MANUAL

JINLIAN_INDEX 4096 LOCAL MANUAL

例6-9查询语句的结果表明表空间JINLIAN_INDEX确实是一个本地管理的表空间,因为extent_management列的显示结果为LOCAL。现在您可以使用如例6-10查询语句来验证其它的磁盘存储参数。

例6-10

SQL> select tablespace_name, initial_extent, next_extent,

2 max_extents, pct_increase, min_extlen

3 from dba_tablespaces

4 WHERE tablespace_name LIKE 'JIN%';

TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MAX_EXTENTS PCT_INCREASE MIN_EXTLEN

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

JINLIAN 53248 53248 100 0 53248

JINLIAN_INDEX 1048576 1048576 2147483645 0 1048576

从例6-10查询语句的结果显示可以清楚地看出:所有的存储参数都是按您的要求设置的,因为INITIAL_EXTENT为1M(1048576字节),NEXT_EXTENT也为1M(1048576字节),MIN__EXTENT也同样为1M(1048576字节)。此时您还应使用如例6-11的查询语句来验证一下与文件有关的信息。

例6-11

SQL> SELECT file_id, file_name, tablespace_name, autoextensible

2 FROM dba_data_files

3 WHERE file_id > 5

4 order by file_id;

FILE_ID FILE_NAME TABLESPACE_NAME AUT

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

6 D:\ORACLE\ORADATA\ORACLE9I\INDX01.DBF INDX YES

7 D:\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBF TOOLS YES

8 D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF USERS YES

9 J:\DISK2\MOON\JINLIAN01.DBF JINLIAN NO

10 J:\DISK4\MOON\JINLIAN02.DBF JINLIAN NO

11 J:\DISK6\MOON\JINLIAN_INDEX.DBF JINLIAN_INDEX NO

从例6-11查询语句的结果显示可以清楚地看出:表空间JINLIAN_INDEX只有一个操作系统文件,它是J:\DISK6\MOON\JINLIAN_INDEX.DBF。最后您还应该利用操作系统工具,如NT资源管理器来验证一下真正的物理文件是否真的生成了。如例6-12所示。

例6-12

从例6-12的结果显示可以清楚地看出:物理文件J:\DISK6\MOON\JINLIAN_INDEX.DBF 确实已经生成,其大小也为50 M。

6.7 还原表空间

还原表空间是Oracle9i刚刚引入的,它是用来自动地管理还原(回滚)数据的。在这一节只对还原表空间给一个简单的介绍,后面有专门的一章来详细地介绍这方面的内容。还原表空间是用来存储还原段的,在还原表空间中不能包含任何其它的对象。还原表空间中的区段(Extents)是由本地管理的,而且在创建还原表空间的SQL语句中只能使用DATAFILE 和EXTENT MANAGEMENT子句。

接下来您想为潘金莲项目的数据单独创建一个还原表空间,它的名为jinlian_undo,它所基于的操作系统文件名为J:\DISK7\MOON\jinlian_undo.DBF,其大小为20M。于是就可以使用如例6-13的SQL语句来创建所需的还原表空间了。

例6-13

SQL> CREATE UNDO TABLESPACE jinlian_undo

2 DATAFILE 'J:\DISK7\MOON\jinlian_undo.DBF'

3 SIZE 20 M;

表空间已创建。

现在您可能想查看一下您所创建的还原表空间jinlian_undo到底是数据字典管理还是本地管理的。可以使用如例6-14的SQL查询语句来获取相关的信息。

例6-14

SQL> SELECT tablespace_name, block_size, extent_management, segment_space_management

2 FROM dba_tablespaces

3 WHERE tablespace_name LIKE 'JIN%';

TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN

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

JINLIAN 4096 DICTIONARY MANUAL

JINLIAN_INDEX 4096 LOCAL MANUAL

JINLIAN_UNDO 4096 LOCAL MANUAL

例6-14的查询结果表明:还原表空间jinlian_undo是本地管理的,因为

extent_management列的显示结果为LOCAL。之后您当然也想确认一下表空间jinlian_undo 到底是不是还原表空间。因此您可以使用如例6-15的SQL查询语句。

例6-15

SQL> SELECT tablespace_name, status, contents

2 FROM dba_tablespaces

3 WHERE tablespace_name LIKE 'JIN%';

TABLESPACE_NAME STATUS CONTENTS

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

JINLIAN ONLINE PERMANENT

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_UNDO ONLINE UNDO

例6-15的查询结果表明:表空间jinlian_undo确实为还原表空间,因为contents列的显示结果为UNDO。

6.8 临时表空间

临时表空间是作为排序操作使用的。当在用户的SQL语句中使用了诸如ORDER BY,GROUP BY子句时Oracle服务器就需要对所选取的数据进行排序,这时如果排序的数据量很大内存的排序区(在PGA中)就可能装不下,因此Oracle服务器就要把一些中间的排序结果写到磁盘上,即临时表空间中。当用户的SQL语句中经常有大规模的多重排序而内存的排序区不够时,使用临时表空间就可以改进数据库的效率。

临时表空间可以由多个用户共享,在其中不能包含任何永久对象。临时表空间中的排序段是在实例启动后当有第一个排序操作时创建的,排序段在需要时可以通过分配EXTENTS 来扩展并一直可以扩展到大于或等于在该实例上所运行的所有排序活动的总和。

当创建临时表空间时,必须使用标准数据块。另外Oracle还推荐使用本地管理的表空间。

接下来您想为潘金莲项目的数据单独创建一个临时表空间,它的名为jinlian_temp,它所基于的操作系统文件名为J:\DISK8\MOON\jinlian_temp.DBF,其大小为10M。您在创建该临时表空间之前,想看一看在数据库中究竟有多少个表空间以及它们的状态,于是您首先使用如例6-16的SQL*Plus格式化命令,之后发出了如例6-17的SQL查询语句。

例6-16

SQL> col tablespace_name for a15

例6-17

SQL> select tablespace_name, status, contents

2 from dba_tablespaces;

TABLESPACE_NAME STATUS CONTENTS

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

SYSTEM ONLINE PERMANENT

UNDOTBS ONLINE UNDO

CWMLITE ONLINE PERMANENT

DRSYS ONLINE PERMANENT

EXAMPLE ONLINE PERMANENT

TEMP ONLINE TEMPORARY

TOOLS ONLINE PERMANENT

USERS ONLINE PERMANENT

JINLIAN ONLINE PERMANENT

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_UNDO ONLINE UNDO

已选择12行。

例6-17查询语句的显示结果表明:在该数据库中只有一个临时表空间,该表空间的名为TEMP,因为只有该表空间的CONTENTS列的值为TEMPORARY。

为了得到临时表空间和对应的数据文件,您可以使用数据字典v$tablespace和v$tempfile。于是您使用了如例6-19带有两个表连接的SQL查询语句,但为了使显示的结果更加清晰您首先使用了如例6-18的SQL*Plus格式化命令

例6-18

SQL> col file for a50

例6-19

SQL> SELECT f.file#, t.ts#, https://www.doczj.com/doc/2012330394.html, "File", https://www.doczj.com/doc/2012330394.html, "Tablespace"

2 FROM v$tempfile f, v$tablespace t

3 WHERE f.ts# = t.ts#;

FILE# TS# File Tablespace ---------- ---------- -------------------------------------------------- -----------

1 6 D:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF TEMP

例6-19查询语句的显示结果表明:6号(TS#为6)表空间TEMP所对应的数据文件为D:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF,文件号为1(FILE#为1)。现在您就可以使用如例6-20的SQL语句来创建所需的临时表空间了。

例6-20

SQL> CREATE TEMPORARY TABLESPACE jinlian_temp

2 TEMPFILE 'J:\DISK8\MOON\jinlian_temp.dbf'

3 SIZE 10 M

4 EXTENT MANAGEMENT LOCAL

5 UNIFORM SIZE 2 M;

表空间已创建。

接下来您应该使用如例6-21,例6-22,和例6-23的SQL查询语句来验证一下该表空间是否已经建立,它是否为临时表空间,以及它所对应的数据文件是否也被创建等。

例6-21

SQL> select tablespace_name, status, contents

2 from dba_tablespaces

3 where tablespace_name LIKE 'JIN%';

TABLESPACE_NAME STATUS CONTENTS

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

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_TEMP ONLINE TEMPORARY

JINLIAN_UNDO ONLINE UNDO

例6-22

SQL> SELECT f.file#, t.ts#, https://www.doczj.com/doc/2012330394.html, "File", https://www.doczj.com/doc/2012330394.html, "Tablespace"

2 FROM v$tempfile f, v$tablespace t

3 WHERE f.ts# = t.ts#;

FILE# TS# File Tablespace ---------- ---------- -------------------------------------------------- ------------

1 6 D:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF TEMP

2 12 J:\DISK8\MOON\JINLIAN_TEMP.DBF JINLIAN_TEMP

例6-23

SQL> SELECT tablespace_name, block_size, extent_management,

2 segment_space_management, min_extlen

3 FROM dba_tablespaces

4 WHERE tablespace_name LIKE 'JIN%';

TABLESPACE_NAME BLOCK_SIZE EXTENT_MAN SEGMEN MIN_EXTLEN

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

JINLIAN 4096 DICTIONARY MANUAL 53248

JINLIAN_INDEX 4096 LOCAL MANUAL 1048576

JINLIAN_TEMP 4096 LOCAL MANUAL 2097152

JINLIAN_UNDO 4096 LOCAL MANUAL 65536

例6-21,例6-22,和例6-23的查询语句显示结果表明:您已经成功地创建了临时表空间jinlian_temp。最后您还应该利用操作系统工具,如NT资源管理器来验证一下临时表空间所对应的物理文件是否真的生成了。

本地管理的临时表空间是基于临时数据文件(temp files),这些文件与普通的数据文件非常相似,但它们还具有如下的特性:

临时数据文件的状态不能置为只读。

不能将临时数据文件重新命名。

临时数据文件总是置为NOLOGGING状态。

不能使用ALTER DATABASE命令创建临时数据文件。

以只读方式运行的数据库需要临时数据文件。

介质恢复是不能恢复临时数据文件的。

另外,为了优化某一临时表空间中排序的效率,应该将UNIFORM SIZE设为SORT_AREA_SIZE(PGA中排序区的大小)参数的整数倍。

6.9 默认临时表空间

默认临时表空间是在Oracle9i开始引入的。如果在创建一个数据库时没有设定默认临时表空间,那么任何一个用户如果在创建他时没有使用TEMPORARY TABLESPACE子句,他就将使用SYSTEM表空间作为排序区。这将使SYSTEM表空间碎片化,从而使数据库系统的效率下降。如果在创建一个数据库时没有设定默认临时表空间,Oracle服务器将把SYSTEM表空间是默认临时表空间的报警信息写入报警文件。因此说明一个数据库范围的默认临时表空间可以消除使用系统(SYSTEM)表空间对临时数据进行排序的现象,从而提高数据库系统的效率。默认临时表空间即可以在创建数据库时一起创建,也可以在数据库创建之后建立。

在创建数据库的同时创建默认临时表空间要使用CREATE DATABASE命令,在数据库创建之后改变默认临时表空间要使用ALTER DATABASE命令。在数据库创建期间建立默认临时表空间的方法在以后的章节中介绍。

首先可以利用数据字典DATABASE_PROPERTIES使用如例6-27的查询语句来得到当前的默认临时表空间。为了使显示清晰,您应该首先使用如例6-24,例6-25,和例6-26的SQL*Plus格式化命令。

例6-24

SQL> COL PROPERTY_NAME FOR A25

例6-25

SQL> COL PROPERTY_VALUE FOR A16

例6-26

SQL> COL DESCRIPTION FOR A38

例6-27

SQL> SELECT *

2 FROM DATABASE_PROPERTIES

3 WHERE PROPERTY_NAME LIKE 'DEFAULT%';

PROPERTY_NAME PROPERTY_VALUE DESCRIPTION

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

DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace

例6-27的查询语句显示结果表明:表空间TEMP为当前的默认临时表空间。随着潘金莲项目的不断进展,有关该项目的数据处理也变得越来越频繁,为了提高该项目的数据处理的速度,您决定将jinlian_temp临时表空间设为默认临时表空间。于是您发出了如例6-28命令。

例6-28

SQL> ALTER DATABASE

2 DEFAULT TEMPORARY TABLESPACE jinlian_temp;

数据库已更改。

接下来您可以使用如例6-29的SQL查询语句来验证现在的默认临时表空间是否为jinlian_temp。

例6-29

SQL> SELECT *

2 FROM DATABASE_PROPERTIES

3 WHERE PROPERTY_NAME LIKE 'DEFAULT%';

PROPERTY_NAME PROPERTY_VALUE DESCRIPTION

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

DEFAULT_TEMP_TABLESPACE JINLIAN_TEMP Name of default temporary tablespace

当不再处理金莲项目数据时,请别忘了将默认临时表空间再改回为TEMP表空间。此时您应该使用如例6-30的命令。

例6-30

SQL> ALTER DATABASE

2 DEFAULT TEMPORARY TABLESPACE temp;

数据库已更改。

最后您还是应该使用如例6-31的SQL查询语句来验证一下现在的默认临时表空间是否为temp。

例6-31

SQL> SELECT *

2 FROM DATABASE_PROPERTIES

3 WHERE PROPERTY_NAME LIKE 'DEFAULT%';

PROPERTY_NAME PROPERTY_VALUE DESCRIPTION

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

DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace

在结束这一节之前,最后介绍一下在默认临时表空间上的一些限制。首先默认临时表空间不能被删除,除非有一个新的可以使用的默认临时表空间。也就是必须先使用ALTER DATABASE将一新的临时表空间设置为默认临时表空间,之后才能删除旧的(默认)临时表空间。使用旧的(默认)临时表空间的用户被自动地赋予新的默认临时表空间。

因为默认临时表空间必须是临时(TEMPORARY)表空间或者是系统(SYSTEM)表空间,所以不能将默认临时表空间改为一个永久表空间。也不能将默认临时表空间设置为脱机。(在接下来的几节中我们将介绍这些操作。)

6.10 设置表空间为脱机

一个表空间的正常状态是联机(Online)状态,此时数据库用户可以访问该表空间中的数据。然而,有时数据库管理员需要将某一表空间设置为脱机状态,以进行数据库的维护。其维护工作包括:

在数据库处在打开状态下移动数据文件

在数据库处在打开状态下恢复一个表空间或一个数据文件

执行对表空间的脱机备份(虽然对表空间可以进行联机备份)

使数据库的一部分不可以被访问,而其它的部分可以被正常地访问

当一个表空间被设置为脱机状态时,该表空间上的数据是不可以访问。如果用户试图访问该表空间上的数据就会收到出错信息。

当一个表空间被设置为脱机状态时或重新被设置为联机状态时,Oracle会把这一事件记录在数据字典和控制文件中,也会记录在报警文件中。如果当数据库被关闭时,某一表空间为脱机状态,那么当数据库被加载(MOUNT)和重新打开时该表空间仍保持为脱机状态。

并不是所有的表空间都可以被设置为脱机状态,以下的表空间不能被设置为脱机状态:

系统(SYSTEM)表空间

上面有活动的还原/回滚段的表空间

默认临时表空间

假设JINLIAN数据表空间出了些问题,需要对它进行维护。于是要将它的状态设为脱机。但为了慎重起见您先使用了如例6-32和例6-34的SQL查询语句以获取该表空间和它对应的数据文件现在的状态。

例6-32

SQL> select tablespace_name, status, contents

2 from dba_tablespaces

3 where tablespace_name LIKE 'JIN%';

TABLESPACE_NAME STATUS CONTENTS

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

JINLIAN ONLINE PERMANENT

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_TEMP ONLINE TEMPORARY

JINLIAN_UNDO ONLINE UNDO

例6-33

SQL> col name for a55

例6-34

SQL> SELECT file#, name, status

2 FROM v$datafile

3 WHERE file# >= 8;

FILE# NAME STATUS

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

8 D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF ONLINE

9 J:\DISK2\MOON\JINLIAN01.DBF ONLINE

10 J:\DISK4\MOON\JINLIAN02.DBF ONLINE

11 J:\DISK6\MOON\JINLIAN_INDEX.DBF ONLINE

12 J:\DISK7\MOON\JINLIAN_UNDO.DBF ONLINE

从例6-32和例6-34的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF都处在联机状态。此时您就可以使用如例6-25的命令将表空间JINLIAN置为脱机状态。

例6-25

SQL> ALTER TABLESPACE jinlian OFFLINE;

表空间已更改。

接下来您应该验证一下以上命令是否成功。可以使用了如例6-36和例6-37的查询语句以获取该表空间和它对的数据文件现在的状态。

例6-36

SQL> select tablespace_name, status, contents

2 from dba_tablespaces

3 where tablespace_name LIKE 'JIN%';

TABLESPACE_NAME STATUS CONTENTS

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

JINLIAN OFFLINE PERMANENT

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_TEMP ONLINE TEMPORARY

JINLIAN_UNDO ONLINE UNDO

例6-37

SQL> SELECT file#, name, status

2 FROM v$datafile

3 WHERE file# >= 8;

FILE# NAME STATUS

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

8 D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF ONLINE

9 J:\DISK2\MOON\JINLIAN01.DBF OFFLINE

10 J:\DISK4\MOON\JINLIAN02.DBF OFFLINE

11 J:\DISK6\MOON\JINLIAN_INDEX.DBF ONLINE

12 J:\DISK7\MOON\JINLIAN_UNDO.DBF ONLINE

从例6-36和例6-37的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF都已经处在脱机状态。这说明例6-25的命令已经成功地执行。

当维护工作结束后,您就应该尽快地使用如例6-38的命令将表空间JINLIAN置回为联机状态。

例6-38

SQL> ALTER TABLESPACE jinlian ONLINE;

表空间已更改。

接下来您应该验证一下以上命令是否成功。您可以使用如例6-39和例6-40的查询语句以获取该表空间和它对的数据文件现在的状态。

例6-39

SQL> select tablespace_name, status, contents

2 from dba_tablespaces

3 where tablespace_name LIKE 'JIN%';

TABLESPACE_NAME STATUS CONTENTS

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

JINLIAN ONLINE PERMANENT

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_TEMP ONLINE TEMPORARY

JINLIAN_UNDO ONLINE UNDO

例6-40

SQL> SELECT file#, name, status

2 FROM v$datafile

3 WHERE file# >= 8;

FILE# NAME STATUS

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

8 D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF ONLINE

9 J:\DISK2\MOON\JINLIAN01.DBF ONLINE

10 J:\DISK4\MOON\JINLIAN02.DBF ONLINE

11 J:\DISK6\MOON\JINLIAN_INDEX.DBF ONLINE

12 J:\DISK7\MOON\JINLIAN_UNDO.DBF ONLINE

从例6-39和例6-40的查询结果显示可以看出:表空间JINLIAN以及与它相对应的两个数据文件J:\DISK2\MOON\JINLIAN01.DBF和J:\DISK4\MOON\JINLIAN02.DBF都已经处在联机状态。这说明例6-38的命令已经成功地执行。现在您就可以通知使用JINLIAN表空间上数据的用户可以正常地操作该表空间上的数据了。

6.11 只读(Read-Only)表空间

当一个表空间处在只读状态时,在该表空间中的数据只能进行读操作,也就是说在上面的数据是不会变化的,因此也就不需要重做日志的保护,所以操作只读状态表空间上的数据时不会产生重做操作。这也就提高了系统的效率。由于只读表空间上的数据是不变的,所以对该表空间只要做一次备份就够了。这不但减少了数据库系统的维护工作量还使系统的负荷减轻。因此如果将一个数据库精心设计把许多不变的数据归类放在一个或几个表空间中,然后将它们的状态改为只读,将会使该数据库的维护更加容易而且效率更高。

当使用命令将一个表空间的状态改为只读时,一开始该表空间处于一种中间的状态。在这种状态下,除了那些没有完成的事务之外在该表空间中不能进行任何的写操作,一旦那些没有完成的事务结束(即可以是提交也可以是回滚),该表空间就被置为只读状态。

将一个表空间的状态改为只读时Oracle会产生检查点。可以删除只读表空间中的对象,如表和索引,这是因为删除对象的命令是DDL语句,它们只修改数据字典而不是数据文件。

将一个表空间的状态改为只读时或反过来将一个表空间的状态改为可读可写(正常)时,该表空间必须处在联机状态。

随着潘金莲项目不断进展,有关该项目的数据处理也变得越来越频繁,系统的效率已经成为了一个大问题。经过仔细分析,您发现潘金莲项目的数据是以批处理的方式定期输入的,一旦输入后上面的数据是不能修改的。于是为了提高该项目的数据处理的速度,您决定在每次输入数据之后将jinlian表空间的状态改为只读。于是您发出了如例6-41命令。

例6-41

SQL> ALTER TABLESPACE jinlian READ ONLY;

表空间已更改。

接下来您应该验证一下以上命令是否成功。可以使用如例6-42的查询语句以获取表空间的状态信息。

例6-42

SQL> select tablespace_name, status, contents

2 from dba_tablespaces

3 where tablespace_name LIKE 'JIN%';

TABLESPACE_NAME STATUS CONTENTS

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

JINLIAN READ ONLY PERMANENT

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_TEMP ONLINE TEMPORARY

JINLIAN_UNDO ONLINE UNDO

从例6-42的查询结果显示可以看出表空间JINLIAN已经处在只读状态(READ ONLY)。这说明例6-41的命令已经成功地执行。

当需要重新向JINLIAN表空间中输入数据时,您就可以使用如例6-43的命令将表空间的状态又改回为可读可写(正常)。

例6-43

SQL> ALTER TABLESPACE jinlian READ WRITE;

表空间已更改。

接下来您也应该验证一下以上命令是否成功地将表空间JINLIAN改回为可读可写(正常)状态。您可以使用如例6-44的查询语句以获取表空间的状态信息。

例6-44

SQL> select tablespace_name, status, contents

2 from dba_tablespaces

3 where tablespace_name LIKE 'JIN%';

TABLESPACE_NAME STATUS CONTENTS

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

JINLIAN ONLINE PERMANENT

JINLIAN_INDEX ONLINE PERMANENT

JINLIAN_TEMP ONLINE TEMPORARY

JINLIAN_UNDO ONLINE UNDO

从例6-44的查询结果显示可以看出:表空间JINLIAN已经处在正常状态(ONLINE)。这说明例6-43的命令已经成功地执行。

最后您还可以利用操作系统工具,如NT的记事本来查看一下报警文件中的内容。如例6-45。

例6-45

从例6-45报警文件的显示可以看出:表空间JINLIAN所有状态的变化以及相应的时间都已经被详细地记录在报警文件中。Oracle够聪明的吧?

6.12 改变表空间的存储设置

如果在创建表空间时所设置的存储参数不合适,可以使用如下的命令进行修改;

ALTER TABLESPACE 表空间名

[MINIMUM EXTENT 正整数[K|M]

|DEFAULT 存储子句 ]随着潘金莲项目的不断进展,有关该项目的数据量变得越来越大,以前为jinlian表空间所设置的存储参数不合适了,为了提高该项目的数据处理的速度,您决定将jinlian表空间的存储参数做如下的修改:MINIMUM EXTENT为100K;INITIAL 和NEXT也都为100K,而MAXEXTENTS为200。于是您发出了如例6-46和例6-47的命令。

例6-46

SQL> ALTER TABLESPACE jinlian MINIMUM EXTENT 100 K;

表空间已更改。

例6-47

SQL> ALTER TABLESPACE jinlian

2 DEFAULT STORAGE ( INITIAL 100 K NEXT 100 K MAXEXTENTS 200 );

表空间已更改。

现在您可以使用如例6-50的SQL查询语句来验证您所修改的表空间JINLIAN的磁盘存储参数是否成功。不过您最好先使用如例6-48和例6-49的SQL*Plus格式化命令以便SQL 语句的输出更加清晰。

例6-48

SQL> SET LINE 120

例6-49

SQL> COL tablespace_name FOR a15

例6-50

SQL> select tablespace_name, initial_extent, next_extent,

2 max_extents, pct_increase, min_extlen

3 from dba_tablespaces

4 WHERE tablespace_name LIKE 'JIN%'

TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT MAX_EXTENTS PCT_INCREASE MIN_EXTLEN

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

JINLIAN 102400 102400 200 0 102400

JINLIAN_INDEX 1048576 1048576 2147483645 0 1048576

JINLIAN_TEMP 2097152 2097152 0 2097152

JINLIAN_UNDO 65536 2147483645 65536

从例6-50查询语句的结果显示可以清楚的看出在表空间JINLIAN中所有的存储参数都是按您的要求设置的,因为INITIAL_EXTENT为100K(102400字节),NEXT_EXTENT也为100K (102400字节),MIN__EXTENT(MINIMUM EXTENT)也同样为100K(102400字节),最后MAX__EXTENTS(MAXEXTENTS)为200。作为一名名副其实的数据库管理员,现在您终于可以随

心所欲地控制表空间的存储了。很开心吧?

6.13重置表空间的大小

您不但可以像以上所介绍的那样修改表空间的存储参数,您还可以重新设置表空间的大小。可以通过如下的方法来增加表空间的大小:

(1)改变数据文件的大小:

在创建表空间时使用AUTOEXTEND ON自动地改变(扩展)数据文件的大小

在创建表空间之后使用带有AUTOEXTEND ON选项的ALTER DATABASE命令手动地改变数据文件的大小

(2)使用ALTER TABLESPACE语句来增加数据文件可以利用数据字典DBA_DATA_FILES 使用类似于例6-54的查询语句来确定哪些表空间或数据文件可以自动扩展。不过最好先使用如例6-51,例6-52,和例6-53的SQL*Plus格式化命令以使SQL语句的输出更加清晰。

例6-51

SQL> col file_name for a40

例6-52

SQL> set line 100

例6-53

col tablespace_name for a15

例6-54

SQL> SELECT file_id, tablespace_name, file_name, autoextensible

2 FROM dba_data_files

3 WHERE file_id >= 8

4 ORDER BY file_id;

FILE_ID TABLESPACE_NAME FILE_NAME AUT

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

8 USERS D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF YES

9 JINLIAN J:\DISK2\MOON\JINLIAN01.DBF NO

10 JINLIAN J:\DISK4\MOON\JINLIAN02.DBF NO

11 JINLIAN_INDEX J:\DISK6\MOON\JINLIAN_INDEX.DBF NO

12 JINLIAN_UNDO J:\DISK7\MOON\JINLIAN_UNDO.DBF NO

从例6-54查询语句的结果显示可以清楚地看出:以JINLIAN开头的表空间都不能自动扩展,因为autoextensible列的显示结果都为NO。而USER表空间是可以自动扩展的,因为autoextensible列的显示结果为YES。

随着潘金莲项目不断地向前推进,不断有新的索引加入,而且原有的索引也因为所基于的表的不断增大而变得越来越大,原来的JINLIAN_INDEX表空间已经接近饱和。您决定让JINLIAN_INDEX表空间的大小在达到最大值时可以自动扩展。于是发出了如例6-55的DDL 命令。

例6-55

SQL> ALTER DATABASE DATAFILE

2 'J:\DISK6\MOON\JINLIAN_INDEX.DBF' AUTOEXTEND ON

3 NEXT 1 M;

数据库已更改。

您现在可以利用数据字典DBA_DATA_FILES使用类似于例6-56的SQL查询语句来确定JINLIAN_INDEX表空间和所对应的数据文件是否已经可以自动扩展。

例6-56

SQL> SELECT file_id, tablespace_name, file_name, autoextensible

2 FROM dba_data_files

3 WHERE file_id >= 8

4 ORDER BY file_id;

FILE_ID TABLESPACE_NAME FILE_NAME AUT

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

8 USERS D:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF YES

9 JINLIAN J:\DISK2\MOON\JINLIAN01.DBF NO

10 JINLIAN J:\DISK4\MOON\JINLIAN02.DBF NO

11 JINLIAN_INDEX J:\DISK6\MOON\JINLIAN_INDEX.DBF YES

12 JINLIAN_UNDO J:\DISK7\MOON\JINLIAN_UNDO.DBF NO

从例6-56查询语句的结果显示可以清楚地看出:JINLIAN_INDEX表空间和所对应的数据文件已经变为可以自动扩展,因为autoextensible列的显示结果已经为YES。

6.13 手工重置数据文件的大小

如果表空间的容量不够了,作为数据库管理员您可以使用ALTER DATABASE来手工地增加或减少数据文件的大小。通过改变某个数据文件的大小来增加空间就不用增加更多的数据文件。您也可以通过手工地重置某个数据文件的大小来重新收回数据文件中没用的空间。如果所说明的数据文件的大小已经小于数据文件中所存的全部对象的大小总合,那么数据文件的大小将只被减少到数据文件中最后一个对象的最后一个数据块。

假设金莲表空间中的磁盘空间已经接近用完,于是您想手工地将该表空间所对应的一个数据文件增加到100M。首先您应该利用数据字典DBA_DATA_FILES使用类似于例6-57的查询语句来确定JINLIAN表空间所对应的数据文件的尺寸。例6-57

SQL> SELECT file_id, file_name, tablespace_name,

2 bytes/(1024*1024) MB

3 FROM dba_data_files

4 WHERE tablespace_name LIKE 'JIN%'

5 ORDER BY tablespace_name;

FILE_ID FILE_NAME TABLESPACE_NAME MB ---------- --------------------------------------------- --------------- ----------

9 J:\DISK2\MOON\JINLIAN01.DBF JINLIAN 50

10 J:\DISK4\MOON\JINLIAN02.DBF JINLIAN 50

11 J:\DISK6\MOON\JINLIAN_INDEX.DBF JINLIAN_INDEX 50

12 J:\DISK7\MOON\JINLIAN_UNDO.DBF JINLIAN_UNDO 20

从例6-57查询语句的结果显示可以清楚地看出:JINLIAN表空间所对应的两个数据文件都为50 M。现在您可以使用如例6-58的命令将数据文件J:\DISK2\MOON\JINLIAN01.DBF 的尺寸加大到100M。

Oracle临时表空间管理及清理策略

正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。但有些有侯我们则会遇 到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。这个问题在论坛中也常被网友问到,下面我总结 一下,给出几种处理方法。 法一、重启库 库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的 应用机会,不过这种方法还是很好用的。 法二、Metalink给出的一个方法 修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。 SQL>alter tablespace temp increase 1; SQL>alter tablespace temp increase 0; 法三、我常用的一个方法,具体内容如下: 1、使用如下语句a查看一下认谁在用临时段 SELECT username, sid, serial#, sql_address, machine, program, tablespace, segtype, contents

FROM v$session se, v$sort_usage su WHERE se.saddr=su.session_addr 2、那些正在使用临时段的进程 SQL>Alter system kill session 'sid,serial#'; 3、把TEMP表空间回缩一下 SQL>Alter tablespace TEMP coalesce; 法四、使用诊断事件的一种方法,也是被我认为是“杀手锏”的一种方法 1、确定TEMP表空间的ts# SQL>select ts#, name from sys.ts$ ; TS# NAME ----------------------- 0 SYSYEM 1 RBS 2 USERS 3* TEMP 4 TOOLS 5 INDX 6 DRSYS 2、执行清理操作

基础概念:Oracle数据库、实例、用户、表空间、表之间的关系

基础概念:Oracle数据库、实例、用户、表空间、表之间的关系 数据库: Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大数据库。 实例: 一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。一个数据库可以有n个实例。 用户: 用户是在实例下建立的。不同实例可以建相同名字的用户。 表空间: 表空间是一个用来管理数据存储逻辑概念,表空间只是和数据文件(ORA或者DBF文件)发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。 数据文件(dbf、ora): 数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。 注: 表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。由于oracle的数据库不是普通的概念,oracle是有用户和表空间对数据进行管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了! 关系示意图:

Oracle表空间操作详解

Oracle表空间操作详解 1.创建表空间: createtablespacedatafile '' size autoextend on next maxsize eg: createtablespace sales datafile 'c:\1.txt' size 10m autoextend on next 1m maxsize 100m 2.为表空间增加数据文件: altertablespace add datafile 'filepath' size autoextend on next maxsizefilemaxsize[unlimited]; eg: altertablespace sales datafile 'c:\2.txt' size 10m autoextend on next 1m maxsize unlimited 3.调整表空间: alter database datafile 'filepath' resize ;--重置表空间的大小 eg: alter database datafile 'c:\2.txt' resize 10m 在实际使用中我们经常会遇到oracle某个表空间占用了大量的空间而其中的数据量却只占用了少量空间,此时我们可以用ALTER DATABASE DATAFILE '***.dbf' RESIZE nnM的命令来收缩表空间,但在收缩的过程中会遇到ora-03297错误,表示在所定义的空间之后有数据存在,不能收缩,此时的解决办法有: (1). 先估算该表空间内各个数据文件的空间使用情况: SQL>select file#,name from v$datafile;

3-实验三-表空间及数据文件管理

实验三表空间及数据库文件管理 实验报告 姓名:班级:学号: 一、实验目的 1)理解Oracle数据库的体系结构 2)掌握表空间的概念及其管理方法 3)掌握数据文件的作用及其管理 4)掌握控制文件的作用及其管理 5)掌握重做日志文件的工作方式及其管理 6)掌握数据库归档模式设置及归档管理 二、预习内容(参考教材第5章、第6章的内容) 1)什么是Oracle数据库的物理结构,具体包括哪几类文件? 2)什么是Oracle数据库的逻辑结构,如何表现? 3)数据库、表空间、数据文件、数据库对象之间的关系如何? 三、实验环境 32位Windows XP/Windows Server2000/Windows Server2003 +Oracle10g环境 四、实验内容 1)在SQL*PLUS环境下,使用SQL命令创建一个本地管理方式下自动分区管理的表空间USERTBS1,其对应的数据文件为usertbs1_1.DBF,大小为20MB。 2)使用SQL命令创建一个本地管理方式下自动分区管理的表空间USERTBS2,要求每个分区大小为512KB。 3)修改USERTBS1表空间的大小为30MB,将其数据文件改为自动扩展方式,每次扩展5MB,最大值为100MB。 4)使用SQL命令创建一个本地管理方式下的临时表空间TEMPTBS,并将该表空间作为当前数据库实例的默认临时表空间。 5)使用SQL命令对USERTBS1表空间进行联机和脱机状态转换。 6)创建一个回滚表空间UNDOTBS,并作为数据库的撤销表空间。 7)删除表空间USERTBS2,同时删除该表空间的内容以及对应的操作系统文件。 8)为USERS表空间添加一个数据文件users03.DBF,大小为50MB。 9)为EXAMPLE表空间添加一个数据文件,文件名为example02.dbf,大小为20M。 10)将表空间USERS中的数据文件users03.DBF更名为userdata03.dbf,将表空间EXAMPLE中的数据文件example02.dbf更名为example03.dbf。 11)修改USER表空间的userdata03为自动扩展方式,每次扩展5MB,最大为100MB。 12)查询当前数据库中所有表空间及其对应的数据文件信息。 13)将数据库的控制文件以二进制文件的形式备份。 14)为数据库ORCL添加一个重做日志文件组,组内包含两个成员文件,分别为redo4a.log和redo4b.log,大小分别为5MB。 15)为新建的重做日志文件组添加一个成员完文件,名称为redo4c.log。 16)将数据库设置为归档模式,并采用自动归档方式。 17)设置数据库归档路径为D:\ORACLE\BACKUP。

Oracle存储空间管理及应用方案

Oracle存储空间管理及应用 摘要:本文详细介绍了Oracle存储架构及其存储体系的管理和应用,包括表空间、回滚段、临时表等,还对其在管理和应用时常见的错误进行了分析探讨 主题词:Oracle技术表空间数据文件回滚段临时表错误 一、引言 数据库空间的有效使用和维护不仅是数据库管理的重要工作,也是大多数开发人员所关心的内容,它直接关系到数据库性能的发挥。 Oracle提供了不少方法用于数据空间的使用、监控和维护,同时也在各版本中陆续对这方面的功能进行了增强,目的在于简化这方面工作的复杂度,提高应用的运行效率。 本文希望通过系统地介绍这方面的有关概念,让大家能更好地规划使用数据空间,正确使用Oracle提供的有关功能特性,提高应用的执行效率。 二、O racle数据库的存储体系及有关概念 2.1 Oracle数据库的逻辑结构 从应用者的角度来考察数据库的组成。自下向上,数据库的逻辑结构共有6层:

2.2 Oracle数据库的存储结构 数据库的存储结构指逻辑结构在物理上的实现,共有3层 其中: 数据文件:用于存放所有的数据,以DBF为扩展名。 日志文件:记录了对数据库进行的所有操作,以LOG为扩展名。 控制文件:记录了数据库所有文件的控制信息,以CTL为扩展名。 综上,Oracle数据库的数据存储空间在逻辑上分为多个表空间,每个表空间由系统中的一个或多个物理数据文件构成;Oracle存储数据的基本单位是块,其大小在建库时由DB_BLOCK_SIZE参数确定,一个或多个连续的块构成一个区间(EXTENT),它作为数据对象存储的基本单位来使用。在Oracle中,每个基本数据对象使用的空间称为段(SEGMENT),段存放在唯一的表空间上,每个段实际上是一系列区片(更为准确地是数据块)的集合。每个简单数据对象对应一个段;对于分区对象如分区表、索引,则每个(子)

oracle表空间管理

实验一数据文件和表空间的管理 【开发语言及实现平台或实验环境】 Oracle10g 【实验目的】 (1)熟悉ORACLE的环境,学习使用SQL*Plus与ORACLE进行交互;(2)掌握连接数据库以及断开连接的方法; (3)掌握数据文件和控制文件的管理基本命令 (4)掌握表空间管理的基本命令 【实验原理】 1.SQL*Plus命令

2.数据文件的管理 (1)创建数据文件 数据文件依附于表空间而存在,创建数据文件就是向表空间添加文件 在创建数据文件时应该根据文件数据量的大小确定文件的大小以及文件的增长方式。 语法: ALTER TABLESPACE…ADD DA TAFILE ALTER TABLESPACE…ADD TEMPFILE 例:向ORCL数据库的USERS表空间中添加一个大小为10 MB的数据文件。 ALTER TABLESPACE USERS ADD DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF' SIZE 10M; (2)修改数据文件大小 创建后修改数据文件为自动增长: AUTOEXTEND ON NEXT …MAXSIZE…|UNLIMITED 手工改变数据文件的大小 ALTER DA TABASE DA TAFILE…RESIZE… 例:为ORCL数据库的USERS表空间添加一个自动增长的数据文件。 ALTER TABLESPACE USERS ADD DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS03.DBF' SIZE 10M AUTOEXTEND ON NEXT 512K MAXSIZE 50M; 例:修改ORCL数据库USERS表空间的数据文件USERS02.DBF为自动增长方式。ALTER DA TABASE DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF ' AUTOEXTEND ON NEXT 512K MAXSIZE UNLIMITED; 例:取消ORCL数据库USERS表空间的数据文件USERS02.DBF的自动增长方式。ALTER DA TABASE DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF ' AUTOEXTEND OFF; 例:将ORCL数据库USERS表空间的数据文件USERS02.DBF大小设置为8 MB 。ALTER DA TABASE DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS02.DBF' RESIZE 8M; (3)删除数据文件 删除某个表空间中的某个空数据文件 ALTER TABLESPACE…DROP DA TAFILE 例:删除USERS表空间中的数据文件USERS003.DBF。 ALTER TABLESPACE USERS DROP DA TAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADA TA\ORCL\USERS003.DBF'; 3.表空间的管理

NC数据源配置和数据库表空间的配置

NC数据源配置和数据库表空间的配置 NC61数据源配置和数据 发现童鞋们在安装NC61的时候遇到的问题非常多,尤其是建立多个帐套的时候更是问题多多。 我总结了一下,问题的症结就在于对数据库的表空间、用户、UAP配置等关系没有理清楚。 如果这篇文章帮助你解决了问题,希望你能把你出现问题的截图发上来,并告诉大家用这个方法可以解决。 写了一个下午,看完好歹给个回复。 -------------------------------------------------------------------------------- 问题症状往往表现为: 1.数据源配置的时候测试通不过; 2.数据源配置的时候测试能通过,但在建库的时候通不过,比如到10%的时候

弹出错误“物理布局错误”,到30%的时候弹出错误“表或视图不存在”等等。 3.按照下面的方法,UAP配置测试通不过,出现ORA-12519错误的时候,可以尝试先关闭中间件,再测试。 小伙伴们,如果你遇到类似的问题,建议你继续往下看,一定要看到最后哟。 -------------------------------------------------------------------------------- 授人以鱼不如授人以渔 首先告诉大家一个小秘密,相信很多童鞋都还不知道呢。 在NC61安装盘的根目录下,有三个文档,你们都看过么? 还有其他的那些文件,你们都知道是干什么用的么?

既然是放到安装盘里的内容,肯定是有用的吧。 在NC61安装盘的DOC目录下,有很多的帮助文档,你们都看过了么? 还记得配置数据库的时候我们用了几段代码么? 其实就是《NC6.1数据库参考脚本及临时表要求.pdf》这篇文档里的,自己去找找看。 看完上面这些东东,小伙伴们都惊呆了!有木有! 哦。。。原来解决方案远在天边,近在眼前呢! 下次再遇到问题你还会直接就去问别人么? 也希望大家有什么好的方法都共享出来哦! 其实我还有别的小秘密,下次告诉大家吧。 下面进入正题了,本着知其然并知其所以然的精神,我重点讲讲我的理解和方法。 --------------------------------------------------------------------------------

oracle 数据文件、表空间、日志文件、控制文件数据库管理

实验四 oracle 数据库管理 一、试验目的 掌握对数据文件、表空间、日志文件、控制文件的常用命令,作为DBA的必要准备。 二、实验内容 2.1 数据文件的管理 (1)在安装完毕之后,在INITsid.ORA参数文件有一个DB_FILES 参数,用于设置当前实例的数据外文件的个数。如: db_files = 80 如果在INITsid.ORA文件没有该参数,则可以用下面查询语句从视图中查到。如: SQL> col name for a20 SQL> col value for a50 SQL> set lin 100 SQL> select name,value from v$parameter where name = 'db_files'; NAME V ALUE -------------------- -------------------------------------------------- db_files 1024 (2)行命令建立表空间: 例1 CREATE TABLESPACE user_stu DA TAFILE 'h:/oracle/oradata/orcl/user_stu.dat' SIZE 20M DEFAULT STORAGE ( INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10 ) ONLINE ; 例2:建立一个新的表空间,具有两个数据文件: CREATE TABLESPACE CRM_TAB DA TAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB; (3)对一个已存在的表空间追加新数据文件: 例1 ALTER TABLESPACE user_stu Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M; 例2 为表空间增加数据文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M ; (4)数据文件更名 ALTER TABLESPACE users

Oracle表空间和数据文件的管理

第六章表空间和数据文件的管理 6.1 Oracle引入逻辑结构的目的 Oracle数据库管理系统并没有像不少其它数据库管理系统那样直接地操作数据文件,而是引入一组逻辑结构。如图6-1所示。 图6-1 图6-1的虚线左边为逻辑结构,右边为物理结构。与计算机原理或计算机操作系统中所讲的有些不同,在Oracle数据库中,逻辑结构为Oracle引入的结构,而物理结构为操作系统所拥有的结构。 曾有不少学生问过我同样的一个问题,那就是Oracle为什么要引入逻辑结构呢? 首先可能是为了增加Oracle的可移植性。Oracle公司声称它的Oracle数据库是与IT 平台无关的,即在某一厂家的某个操作系统上开发的Oracle数据库(包括应用程序等)可以几乎不加修改地移植到另一厂家的另外的操作系统上。要做到这一点就不能直接操作数据文件,因为数据文件是跟操作系统相关的。 其次可能是为了减少Oracle从业人员学习的难度。因为有了逻辑结构Oracle的从业人员就可以只对逻辑结构进行操作,而在所有的IT平台上逻辑结构的操作都几乎完全相同,至于从逻辑结构到物理结构的映射(转换)是由Oracle数据库管理系统来完成的。 6.2 Oracle数据库中存储结构之间的关系 其实图6-1类似于一个Oracle数据库的存储结构之间关系的实体-关系图。如果读者学过实体-关系模型(E-R模型)的话,从图6-1中可以很容易地得到Oracle数据库中存储结构之间的关系。为了帮助那些没有学过E-R模型的读者理解图6-1,也是为了帮助那些

学过但已经忘的差不多了的读者恢复一下记忆,在下面对E-R模型和图6-1给出一些简单的解释。 在图6-1中,园角型方框为实体,实线表示关系,单线表示一的关系,三条线(鹰爪)表示多的关系。于是可以得到: 每个数据库是由一个或多个表空间所组成(至少一个)。 每个表空间基于一个或多个操作系统的数据文件(至少一个)。 每个表空间中可以存放有零个或多个段(Segment)。 每个段是由一个或多个区段(Extent)所组成。 每个区段是由一个或多个连续的Oracle数据块所组成。 每个Oracle数据块是由一个或多个连续的操作系统数据块所组成。 每个操作系统数据文件是由一个或多个区段(Extent)所组成。 每个操作系统数据文件是由一个或多个操作系统数据块所组成。 有关段,区段,和Oracle数据块等我们在接下来的章节中要详细地介绍。 6.3 表空间和数据文件之间的关系及表空间的分类 通过前面的讨论可知:Oracle将数据逻辑地存放在表空间里,而物理地存放在数据文件里。表空间(Tablespaces)在任何一个时刻只能属于一个数据库,但是反过来并不成立,因为一个数据库一般都有多个表空间。每个表空间都是由一个或多个操作系统的数据文件所组成,但是一个操作系统的数据文件只能属于一个表空间。 表空间可以被进一步划分成一些更小的逻辑存储单位。在一个Oracle数据库中,每个数据文件(Data files)可以而且只能属于一个表空间和一个数据库。数据文件实际上是存储模式对象数据的一个容器/仓库。 在一个Oracle数据库中一般有两类表空间,他们是系统(SYSTEM)表空间和非系统(Non-SYSTEM)表空间。 系统(SYSTEM)表空间是与数据库一起建立的,在系统表空间中存有数据字典,在系统表空间中还包含了系统还原(回滚)段。虽然在系统表空间中可以存放用户数据,但考虑到Oracle系统的效率和管理上的方便,在系统表空间上不应该存放任何用户数据。非系统(Non-SYSTEM)表空间可以由数据库管理员创建,在非系统表空间中存储一些单独的段,这些段可以是用户的数据段,索引段,还原段,和临时段等。引入非系统表空间可以方便磁盘空间的管理,也可以更好地控制分配给用户磁盘空间的数量。引入非系统表空间还可以将静态数据和动态数据有效地分开,也可以按照备份的要求将数据分开存放。使用如下的命令创建一个非系统表空间:CREATE TABLESPACE表空间名 [DATAFILE子句] [MINIMUM EXTENT 正整数[K|M]] [BLOCKSIZE正整数[K]] [LOGGING|NOLOGGING] [DEFAULT 存储子句] [ONLINE|OFFLINE] [PERMANENT|TEMPORARY] [区段管理子句] [段管理子句] 在这里对以上命令中的一些子句和选项给出进一步的解释: 表空间名:所要创建的表空间名。

1如何判断数据库表空间使用情况

如何判断数据库表空间使用情况 经常会有一些同事反映数据库表空间不足,使用率达到90%以上,我远程后发现,其实表空间还有很大的可扩展空间,之所有查出使用率95%以上,是与数据文件的扩展属性与查询语句有关,本文档介绍如何查看表空间最大可扩展空间。 1,数据文件与表空间介绍 表空间是一个逻辑概念,数据文件是物理概念,数据文件是实实在在存在于磁盘上的文件。一个表空间可以1022个数据文件,公司项目中的一个数据文件如果开启了自动扩展属性,那最大可以扩展到32G。 2,查看数据文件信息 公司的绝大部分RAC环境是使用ASM方式管理数据文件的,可以通过数据文件名称直观的辨别数据文件是的存储方式,一般ASM磁盘名都是以加号"+"开头,例如"+DATA"、"+FRA"之类。如果是单机环境,那数据文件会存放在本地文件系统上,例如D盘或E盘的某个目录下,使用select * from dba_data_files;命令查看当前数据库的数据文件信息,如下图: 建议按tablespace_name排序,图中DLMIS表空间有12个数据文件,而且12个数据文件都开启的自动扩展属性(AUTOEXTENSIBLE=YES),都存储在+DATA 磁盘组上,最大可扩展到12*32G=384G。目前DLMIS表空间有4个文件扩展到了32G(图中红框标示)。另外8个数据文件还有很大的可扩展空间,目测估计还有约130G左右的可扩展空间,所以DLMIS表空间当前是足够的。其他表空间也是这样查看。 3,增加数据文件 如果某个表空间的所有数据文件都快扩展到了32G,那就需要手动增加数据文件,以DLMIS表空间为例,向DLMIS表空间增加一个数据文件:

Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等

Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等 oracle 数据库表空间的作用 1.决定数据库实体的空间分配; 2.设置数据库用户的空间份额; 3.控制数据库部分数据的可用性; 4.分布数据于不同的设备之间以改善性能; 5.备份和恢复数据。 --oracle 可以创建的表空间有三种类型: 1.temporary: 临时表空间,用于临时数据的存放; create temporary tablespace "sample"...... 2.undo : 还原表空间. 用于存入重做日志文件. create undo tablespace "sample"...... 3.用户表空间: 最重要,也是用于存放用户数据表空间 create tablespace "sample"...... --注:temporary 和undo 表空间是oracle 管理的特殊的表空间.只用于存放系统相关数据. --oracle 创建表空间应该授予的权限 1.被授予关于一个或多个表空间中的resource特权; 2.被指定缺省表空间; 3.被分配指定表空间的存储空间使用份额; 4.被指定缺省临时段表空间。 select tablespace_name "表空间名称",status "状态",extent_management "区管理方式",allocation_type "磁盘扩展管理方式",segment_space_management "段管理方式" from dba_tablespaces; --查询各个表空间的区、段管理方式 --1、建立表空间 --语法格式: create tablespace 表空间名

实验四 表空间及数据文件管理

实验四表空间及数据库文件管理 1)在SQL*PLUS环境下,使用SQL命令创建一个本地管理方式下自动分区管理的表空间USERTBS1,其对应的数据文件为usertbs1_1.DBF,大小为20MB。 2)使用SQL命令创建一个本地管理方式下自动分区管理的表空间USERTBS2,要求每个分区大小为512KB。 3)修改USERTBS1表空间的大小为30MB,将其数据文件改为自动扩展方式,每次扩展5MB,最大值为100MB。 4)为USERS表空间添加一个数据文件usere03.DBF,大小为50MB。 5)使用SQL命令创建一个本地管理方式下的临时表空间TEMPTBS,并将该表空间

作为当前数据库实例的默认临时表空间。 6)使用SQL命令对USERTBS1表空间进行联机和脱机状态转换。 7)创建一个回滚表空间UNDOTBS,并作为数据库的撤销表空间。 8)删除表空间USERTBS2,同时删除该表空间的内容以及对应的操作系统文件。

9)将表空间USERS中的数据文件usere03.DBF更名为userdata03.dbf,将表空间EXAMPLE中的数据文件example02.dbf更名为example03.dbf。 10)查询当前数据库中所有表空间及其对应的数据文件信息。

11)将数据库的控制文件以二进制文件的形式备份。

12)为数据库ORCL添加一个重做日志文件组,组内包含两个成员文件,分别为redo4a.log和redo4b.log,大小分别为5MB。 13)为新建的重做日志文件组添加一个成员完文件,名称为redo4c.log。 14)将数据库设置为归档模式,并采用自动归档方式。 15)设置数据库归档路径为D:\ORACLE\BACKUP。 一、实验步骤 参考PPT内容。 二、思考题 1)Oracle 归档模式与非归档模式有什么区别? 七、实验总结 写出本次实验的收获、不足和改进。

oracle10g数据库的表空间查看和修改

oracle数据库表空间大小的查看、修改 1、通过oracle客户端连接到oracle数据库 a)安装好oracle客户端后,通过net manager工具配置本地net服务名, 依次点击开始,程序,Oracle - OraClient10g_home1,配置和移植工具,Net Manager。 b)进入Net Manager配置窗口。

c)依次点击本地,服务命名。 d)可以看到左侧的号变成绿色,此时可以点击该,弹出net服务名的 配置窗口

e)这里的网络服务名是指的oracle客户端所在机器的本地服务名,随便设 置个名字,例如sbzw,点击下一步。 f)默认设置,点击下一步。 g)在主机名后的输入框中输入oracle数据库所在的服务器的ip地址,例 如:192.168.1.236.,点击下一步。

h)在服务名后的输入框中输入oracle数据库的全局服务名,例如tjsb, 点击下一步。 i)此处不要点击完成,先点击测试查看连接是否正常。

j)在连接测试窗口中显示的应该是测试没有成功,此时请点击更改登录。 k)修改了用户名和密码后,点击确定,然后再次点击“测试”,提示连接成功后,关闭连接测试窗口,点击完成,至此本地net服务名配置完成。 2、通过oracle客户端的企业管理器修改数据库的表空间大小

a)依次点击开始,程序,Oracle - OraClient10g_home1,Enterprise Manager Console(企业管理器)。 b)进入了oracle的企业管理器 c)依次点击数据库,sbzw,弹出登录窗口,

查看表空间数据文件

查看那些表空间满 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比", F.TOTAL_BYTES "空闲空间(M)", F.MAX_BYTES "最大块(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME; 2.查出该表空间中的数据文件位置 select FILE_NAME,TABLESPACE_NAME from dba_data_files WHERE TABLESPACE_NAME L IKE '**' order by TABLESPACE_NAME; 3.添加数据文件: alter tablespace ****** add datafile '' size 20480m;

Oracle用户管理、表空间、临时表空间、索引学习

一、用户的创建和管理 创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识。掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率。Oracle数据库的权限系统分为系统权限与对象权限。系统权限( Database System Privilege )可以让用户执行特定的命令集。例如,CREATE TABLE权限允许用户创建表,GRANT ANY PRIVILEGE 权限允许用户授予任何系统权限。对象权限( Database Object Privilege )可以让用户能够对各个对象进行某些操作。例如DELETE权限允许用户删除表或视图的行,SELECT权限允许用户通过select从表、视图、序列(sequences)或快照(snapshots)中查询信息。 每个Oracle用户都有一个名字和口令,并拥有一些由其创建的表、视图和其他资源。Oracle 角色(role)就是一组权限(privilege)(或者是每个用户根据其状态和条件所需的访问类型)。用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。一个用户也可以直接给其他用户授权。 1、创建用户 Oracle内部有两个建好的用户:SYSTEM和SYS。用户可直接登录到SYSTEM用户以创建其他用户,因为SYSTEM具有创建别的用户的权限。在安装Oracle时,用户或系统管理员首先可以为自己建立一个用户。例如: create user user01 identified by u01; 该命令还可以用来设置其他权限,详细情况参见自学资料。要改变一个口令,可以使用alter user命令: alter user user01 identified by usr01; 现在user01的口令已由“u01”改为“usr01”。 2、删除用户 删除用户,可以使用drop user命令,如下所示: drop user user01; 如果用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字CASCADE,可删除用户所有的对象,然后再删除用户。下面的例子用来删除用户与其对象: drop user user01 CASCADE; 3、三种标准角色

oracle 数据文件、表空间、日志文件、控制文件数据库管理

实验四oracle 数据库管理 一、试验目的 掌握对数据文件、表空间、日志文件、控制文件的常用命令,作为DBA的必要准备。 二、实验容 2.1 数据文件的管理 (1)在安装完毕之后,在INITsid.ORA参数文件有一个DB_FILES 参数,用于设置当前实例的数据外文件的个数。如: db_files = 80 如果在INITsid.ORA文件没有该参数,则可以用下面查询语句从视图中查到。如: SQL> col name for a20 SQL> col value for a50 SQL> set lin 100 SQL> select name,value from v$parameter where name = 'db_files'; NAME VALUE -------------------- -------------------------------------------------- db_files 1024 (2)行命令建立表空间: 例1 CREATE TABLESPACE user_stu DATAFILE 'h:/oracle/oradata/orcl/user_stu.dat' SIZE 20M DEFAULT STORAGE ( INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10 ) ONLINE ; 例2:建立一个新的表空间,具有两个数据文件: CREATE TABLESPACE CRM_TAB DATAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB; (3)对一个已存在的表空间追加新数据文件: 例1 ALTER TABLESPACE user_stu Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M; 例2 为表空间增加数据文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M ; (4)数据文件更名

简述表空间和数据文件之间的关系

1、简述表空间和数据文件之间的关系。 2、概述Oracle数据库体系的物理结构。 3、简要介绍表空间、段、区和数据块之间的关系。 4、简述Oracle实例系统中各后台进程的作用。 5、简述Oracle初始化参数文件。 6、简述启动数据库时的状态。 7、简述数据库的各种关闭方式。 8、Oracle实例和数据库的概念和关系是什么? 9、SGA的各个组成部分的名称和作用,PGA与它有什么区别? 10、简述行迁移、行链接的产生原因? 14、truncate操作与delete操作的区别? 15、B-Tree与Bitmap索引的比较? 16、解释冷备份和热备份的不同点以及各自的优点 18、还原段的作用是什么 19、影响oracle数据库性能的因素都有哪些? 20、ORACLE数据库有哪几种标准备份方式? 21、对raid1+0 和raid5有何认识? 22、rman是什么? 23、oracle系统后台进程的作用? 24、某数据运行在archivelog,且用rman作过全备份和数据库的冷备份,且所有的归档日志都有,现非system表空间的数据文件损坏,其他文件全部完好,请问该怎么恢复该数据库。

参考答案: 1.简述表空间和数据文件之间的关系。 答:每一个数据文件都必须隶属于某个表空间,但一个表空间可以由多个数据文件组合而成。tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。 2.概述Oracle数据库体系的物理结构。 答:Oracle数据库体系的物理结构是指数据库上实际的、可以从操作系统看到的文件,可以利用操作系统指令进行管理作业,物理存储结构组成文件如下所列:数据文件(Data File):实际存储数据的地方;在线重做日志文件(Online Redo Log File):记录曾经发生过的动作,当数据库受损时,可利用在线重做日志文件进行必要的恢复动作;控制文件(Control File):记录数据库必要的信息,以验证及维护数据库的完整性的信息;初始化参数文件(Parameter File):当数据库开启时,用来架构出Oracle内存结构的文件;密码文件(Password File):验证哪些帐号能开启、关闭Oracle数据库。 答:Oracle的逻辑存储单元从小到大依次为: 数据块、区、段和表空间。它们之间的关系如 右图所示。表空间又由许多段组成,段由多个 区组成,区又由多个数据块组成。 4.简述Oracle实例系统中各后台进程的作用。 答:(1)DBWRn(Database Writer)的主要工作是将数据 缓冲区中被改过的数据写回到数据文件里。 (2)LGWR(Log Writer)主要的工作是将Redo Log Buffer 里的记录写到在线重做日志文件中。 (3)SMON(System Monitor)有两个主要的功能。 <1>执行Instance Recovery:当数据库不正常中断后再度 开启时,SMON会自动执行Instance Recovery,也 就是会将在线重做日志里面的数据回写到数据文件里面。 <2>收集空间:将表空间内相邻的空间进行合并的动作。 (4)PMON(Process Monitor):监视数据库的用户进程。若用户的进程不当而被中断,PMON会负责清理任何遗留下来的资源,并释放失效的进程所保留的锁,然后从Process List中移除,以终止Process ID。 (5)CKPT(Checkpoint)主要负责更新数据库的最新状态,CKPT当Checkpoint完成时,会更新控制文件和数据库文件的文件头。 (6)ARCn(Archiver).当Oracle数据库设定为ARCHIVELOG Mode时,ARCn 会在Log Switch时自动将Redo Log File复制一份到指定的目录下称为归档日志文件(Archivedredologs)。 5.简述Oracle初始化参数文件。 答:Oracle在启动实例时将读取本地的一个文本文件,并利用从中获取的初始化参数对实例和数据库进行设置,这个文本文件称为初始化参数文件(简称PFILE)。 6.简述启动数据库时的状态。 答:开启数据库分成4种状态。 (1)SHUTDOWN状态:数据库是关闭的。 (2)NOMOUNT状态:Instance被开启的状态,会去读取初始化参数文件。 (3)MOUNT状态:会去读取控制文件。数据库被装载。 (4)OPEN状态:读取数据文件、在线重做日志文件等,数据库开启。

ORACLE的逻辑存储管理

ORACLE的逻辑存储管理 Oracle在逻辑存储上分4个粒度:表空间Tablespace、段Segment、盘区Extent、块Block。 Oracle数据库在逻辑上是由多个表间组成的,表空间中存储的对象叫段,段由区组成,区是磁盘分配的最小单位。 每个区的大小是数据块大小的整数倍,区的大小可以不相同。 数据块是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位。 一、数据库由一个或多个表空间组成; 二、表空间由一个或多个数据文件组成,一个表空间包含多个段; 三、段由一个或多个区组成(Oracle的分区表可以包括多个分区,每个分区都是一个独立的段);一个段对应唯一的表空间。 四、区是数据文件中一个连续的分配空间,由一个或多个块组成; 五、块是数据库中最小、最基本的单位,是数据库使用的最小的I/O单元。 一、块(Block) 数据块Block是Oracle存储数据信息的最小单位。 Oracle就是通过数据块来屏蔽不同操作系统存储结构的差异。无论是Windows环境,还是Unix/Linux环境,他们的操作系统存储结构和方式、甚至字符排列的方式都是不同的。Oracle利用数据块将这些差异加以屏蔽,全部数据操作采用对Block的操作,相当于是一

个层次的抽象。 Oracle所有对数据的操作和空间分配,实际上都是针对数据块Block的操作。我们从数据表中搜索出一行,实际中Oracle就会从内存缓冲区(或者硬盘)中读取到该行所在的数据块,再返回该数据块上的指定数据行。 数据块是有大小的,在一个数据库建立的时候,通过参数进行设置。(注意:Oracle数据库参数中,数据块大小的参数db_block_size 是建库之后不能进行修改的)。 数据库中每个块的大小都是相同的,而且所有的块都有相同的格式,由“块头+表目录+行目录+空闲空间+数据空间”组成。块头包含着块类型(比如是表块、还是索引块)的信息、磁盘上块的位置等信息。表目录(table directory),如果有的话,包含着此块中存储各行的表的信息(如果一个块中存有多个表中的数据)。行目录(row directory)包含着数据行的描述信息,它是一个指针数组,指示了每一行在数据块中的物理位置。块头、表目录、行目录统称为块开销(block overhead),是oracle原来统计、管理块本身的。剩下的两部分很简单,已经存有数据的就是数据空间,暂时没存的就是空闲空间。 数据块的大小是通过KB字节个数来指定的,默认为8KB。相关参数为db_block_size。 查看参数设置:show parameter db_block_size; 设置数据块的大小是依据不同类型的系统的。如果数据块设置比

相关主题
文本预览
相关文档 最新文档