oracle 表空间总结

时间:2021-02-06 23:17:28

                       表空间总结

 一、认识表空间

1:表空间概念:

表空间是数据库中最大的逻辑单位,Oracle数据库采用表空间将相关的逻辑组件组合在一起,一个Oracle数据库至少包含一个表空间。每个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系。

在每一个数据库中都有一个名为SYSTEM的表空间,即系统表空间,该表空间是在创建数据库或数据库安装时自动创建的,用于存储系统的数据字典表、程序单元、过程、函数、包和触发器等。

2.表空间的四种状态:

联机状态:要保证表空间的可读性首先必须使表空间在联机状态下,这样表空间内的数据才可是可读的。

脱机状态:使表空间进入脱机状态一般是为了使数据库的某一表空间临时失效,其它表空间正常运行,再者就是对表空间维护,一致性备份,数据库升级等 重命名或重分配表空间中的数据文件。(一般很少脱机)

只读状态:只读表状态必须是表空间联机状态下的,而且更多的是用于表空间的维护,比如一致性备份,数据库升级等操作。

读写状态:读写状态表空间同样必须是在联机状态下的,这个时候的表空间是可以做任意操作的。

注意:system表空间必须是联机读写状态,因为数据库的启动和关闭都将访问和更改system表空间的内容

 3:表空间类型:

永久表空间:用来存放永久数据的,例如系统表空间,用户表空间等,其特点是:数据库被关闭后,数据仍然保留,不会照成数据丢失。

临时表空间:有点类似于操作系统的内存,其作用就是建立一个临时的数据处理区域,比如大量的查询和排序操作都将用到临时表空间。而且为了提高效率一般都会对临时表空间进行分组管理。

撤销表空间:用来帮助回退未提交的事务数据。

4:数据文件(dbf、ora):
 数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不
能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。(我一般用dbf文件格式)

5:操作与应用:

5.1:创建表空间

CREATE TABLESPACE 表空间名

DATAFILE '数据文件路径' SIZE 大小

[AUTOEXTEND ON] [NEXT 大小]

[MAXSIZE大小];

【说明】[]里面内容可选项;数据文件路径中若包含目录需要先创建

SIZE为初始表空间大小,单位为K或者M

AUTOEXTEND ON是否自动扩展

NEXT为文件满了后扩展大小

MAXSIZE为文件最大大小,值为数值或UNLIMITED(表示不限大小)

5.2创建临时表空间

CREATE TEMPORARY TABLESPACE trade01_temp

TEMPFILE '/data/orcl/cshj_temp01.dbf'

SIZE 32M

AUTOEXTEND ON

NEXT 32M MAXSIZE 2048M

EXTENT MANAGEMENT LOCAL;

5.3创建表空间

CREATE TABLESPACE trade01

LOGGING

DATAFILE  '/data/orcl/trade002.dbf' SIZE 4096M

EXTENT MANAGEMENT LOCAL --本地管理

SEGMENT SPACE MANAGEMENT AUTO; --ASSM 管理的标志

(这里创建的是自动管理表空间)

5.4创建导入 用户使用表空间trade 临时表空间trade_temp

CREATE USER trade02 IDENTIFIED BY
trade2017  DEFAULT  TABLESPACE
trade02 TEMPORARY TABLESPACE trade02_TEMP;

5.5用户附权

grant connect,resource,dba to trade02;  导入需要dba权限

查看数据文件路径

select * from
v$dbfile;

二、表空间的查询

1. select file_name,autoextensible,increment_by
from dba_data_files;--查询oracle 表空间是否自动扩展

2.查看各表空间分配情况。

select tablespace_name, sum(bytes) / 1024 / 1024  from dba_data_files

group by tablespace_name;

3.查看各表空间空闲情况。

select tablespace_name, sum(bytes) / 1024 / 1024  from dba_free_space  group by tablespace_name;

4.更直观的查看表空间的情况:

SELECT a.tablespace_name
"表空间名",

total
"表空间大小",

free
"表空间剩余大小",

(total - free) "表空间使用大小",

total
/ (1024 * 1024 * 1024) "表空间大小(G)",

free / (1024 * 1024 * 1024) "表空间剩余大小(G)",

(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",

round((total - free) / total, 4) * 100 "使用率
%"

FROM (SELECT tablespace_name, SUM(bytes) free

FROM dba_free_space

GROUP BY tablespace_name) a,

(SELECT tablespace_name, SUM(bytes) total

FROM dba_data_files

GROUP BY tablespace_name) b

WHERE
a.tablespace_name =
b.tablespace_name

4.更改数据表大小(10G)

alter database datafile '/ora/oradata/radius/undo.dbf' resize 10240m;

5.设置表空间不足时自动增长

5.1查看表空间是否自动增长

SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;

5.2 设置表空间自动增长

ALTER DATABASE DATAFILE '/data/orcl/trade01.dbf
' AUTOEXTEND ON;//打开自动增长

ALTER DATABASE DATAFILE '/data/orcl/trade01.dbf
' AUTOEXTEND ON NEXT 200M ;//每次自动增长200MB

ALTER DATABASE DATAFILE '/data/orcl/trade01.dbf' AUTOEXTEND ON NEXT 200M MAXSIZE 1024M;//每次自动增长200m,数据表最大不超过1G

5.3 SELECT USERNAME, TEMPORARY_TABLESPACE FROM
DBA_USERS; --查看临时表空间

(临时表空间的增长和删除和表空间的操作一样)

6.删除表空间

【语法】

DROP TABLESPACE 表空间名;

DROP TABLESPACE 表空间名 INCLUDING CONTENTS AND DATAFILES;

【说明】

第一个删除语句只删除表空间;第二个删除语句则删除表空间及数据文件

示例:

DROP TABLESPACE trade01;

DROP TABLESPACE trade01 INCLUDING  CONTENTS 
AND  DATAFILES;

三、表空间的脱机与联机

 1.概念

数据库管理员可以在数据库处于开启(open)状态时令除 SYSTEM 表空间(tablespace)之外的任何表空间联机(online)(可访问)或脱机(offline)(不可访问)。SYSTEM 表空间在数据库处于开启(open)状态时总是处于联机状态,因为Oracle需要使用其中的数据字典(data dictionary)。

表空间(tablespace)通常处于联机(online)状态,以便数据库用户访问其中的数据。但是数据库管理员可以在对表空间进行维护,备份或恢复操作时,令表空间脱机(offline)。

令表空间脱机

当一个表空间(tablespace)脱机(offline)后,Oracle不允许任何SQL语句继续引用此表空间内的对象(schema object)。如果一个活动事务(activetransaction)中的 SQL 语句正好在使用被置为脱机状态的表空间内的对象,其事务性也不会被破坏。Oracle使用 SYSTEM 表空间内的延迟回滚段(deferred rollback segment)为此事务中已完成的 SQL 语句保存回滚信息(rollback data)。当脱机表空间被重新置位联机(online)状态后,Oracle会在需要时应用这些回滚信息。

表空间(tablespace)联机(online)或脱机(offline)时,SYSTEM 表空间内的数据字典(data dictionary)会进行记录。如果用户关闭(shut down)一个数据库时某个表空间处于脱机状态,那么这个表空间在数据库下次被装载(mount)、打开(open)后依旧保持脱机状态。

用户只能将一个表空间(tablespace)联机(online)到创建她的数据库中,因为只有这个数据库的 SYSTEM 表空间中才保存着与此表空间相关的必要的数据字典(data dictionary)信息。一个脱机(offline)的表空间不能被Oracle之外的工具打开或编辑。因此脱机表空间不能被移动到其他数据库中。

当某些错误发生时,Oracle会自动地将相关的联机表空间(online tablespace)切换到脱机(offline)状态。例如,当数据库写入进程(database writerprocess,DBWn)多次尝试向表空间的数据文件(datafile)写入失败后,Oracle就会将此表空间切换到脱机状态。此时尝试访问脱机表空间内数据表的用户将会得到错误信息。如果是介质故障(media failure)导致此次磁盘 I/O 失败,用户必须在处理故障后恢复(recover)受影响的表空间。

特殊情况下的表空间使用

用户可以将不同类型的数据分开存储在不同的表空间(tablespace)中。当用户因为某些任务而令某个表空间脱机(offline)后,其余表空间仍保持联机(online)状态,其中的数据对用户依然可用。但是表空间脱机后也会导致特殊情况发生。例如,有两个表空间分别用于存储表及此表对应的索引,将出现以下问题:


如果包含索引的表空间脱机,那么查询依旧可以访问表数据,因为对表数据的访问并不一定需要索引数据。

● 如果包含表的表空间脱机,那么查询将无法访问表数据,因为脱机表空间内的对象无法被引用。

如果Oracle能够从联机(online)表空间(tablespace)中获得执行一个SQL语句的足够的信息,那么语句就将被执行。如果相关信息必须从脱机(offline)的表空间中获得,那么语句将失败。

2.只读表空间

使用只读表空间(read-only tablespace)的主要目的是为了避免对静态、且容量大的数据库内容进行备份和恢复操作。Oracle不会更新只读表空间内的数据,因此这类表空间的数据文件(datafile)可以放置在 CD-ROM 或 WORM之类的只读介质(read-only media)上。

提示:用户只能将一个表空间(tablespace)联机(online)到创建她的数据库,因此只读表空间(read-only tablespace)技术不适用于存档工作(archiving)。

只读表空间(read-only tablespace)不能被修改。如需更新一个只读表空间,首先要使表空间可读写。在更新后,还可以将表空间恢复到只读状态。

因为只读表空间(read-only tablespace)不能被修改,只要没有将只读表空间置于可读写状态,就无需对其进行重复的备份操作。当用户需要恢复数据库时,也没必要恢复只读表空间,原因同前所述。

进行此操作必须具有ALTER TABLESPACE 或 MANAGE TABLESPACE 系统权限,GRANT ALTER
TABLESPACE TO "USER";

GRANT MANAGE TABLESPACE TO
"USER";(双引号内必须大写)

也可以使表空间中所有的数据文件或临时文件脱机,然后还能联机,而不影响表空间自己的脱机或联机状态。

3.脱机表空间的原因

● 使数据库的一部分失效,同时允许对数据库剩余部分进行正常访问。

● 进行脱机表空间备份(尽管表空间在联机并正使用的情况下也能备份)

● 在升级或维护应用程序时,使应用程序和它的那组表临时不可用。

4.脱机表空间选项

4.1NORMAL

如果表空间所有数据文件都没有错误,表空间可以正常脱机。写入错误导致表空间所有数据文件都不能脱机。当指定OFFLINE NORMAL时,Oracle对所有数据文件一边进行检查一边将他们脱机, NORMAL是默认设置。。

4.2TEMPORARY

表空间能临时脱机,即使表空间的一个或多个数据文件有错误。当指定OFFLINE TEMPORARY选项时,Oracle将还没脱机的数据文件脱机,同时对他们进行检查。如果没有数据文件脱机,然后用临时选项脱机,当联机表空间时不需要介质恢复。但是,如果有表空间的文件因写入错误脱机,然后将表空间临时脱机,在将表空间联机之前需要介质恢复。

4.3IMMEDIATE

表空间能立即脱机,不等Oracle对任何数据文件做检查。在指定OFFLINE IMMEDIATE的情况下,当联机表空间时需要介质恢复。如果数据库运行在NOARCHIVELOG模式下,表空间不能立即脱机。

4.4FOR RECOVER

将在恢复集中的数据库表空间脱机,以便进行时间点恢复。

注意:

如果必须脱机表空间,尽量用NORMAL选项(默认)。这将保证表空间联机时不需要恢复。尽管部分恢复后用ALTER DATABASE OPEN RESETLOGS语句重置了重做日志序列,依然不需要恢复。只有当不能正常脱机表空间的时候才指定TEMPORARY选项。这种情况下,只有因错误被脱机的文件在表空间联机时才需要恢复。只有当指定NORMAL和TEMPORARY都不行的情况下才用IMMEDIATE选项。

4.5脱机表空间前的考虑:

•     验证表空间不含有活动的回滚段,这样的表空间不能脱机。

•     你可能想改变表空间的位置,这个表空间的用户已经将它指定为默认的或临时的表空间。这是明智的,因为当脱机时,他们不能访问表空间的对象,不能排序表空间区域(sort areas in the tablespace)。

4.6联机表空间:

只要数据库打开,Oracle数据库的表空间都能恢复联机。如果要联机的表空间不是“干净”脱机(即用NORMAL选项的ALTER
TABLESPACE OFFLINE语句),在联机之前必须先对表空间进行介质恢复。否则,Oracle返回错误并保持表空间脱机。

4.7改变数据文件或临时文件的可用性:

ALTER TABLESPACE语句的子句能改变表空间中所有数据文件或临时文件的联机或脱机状态。影响联机/脱机状态的特定语句:

•     ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}

•     ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}

你只需要输入表空间名称,不是单独的数据文件或临时文件。所有数据文件或临时文件都受到影响,但表空间自己的联机/脱机状态不变。大多数情况下,上面ALTER TABLESPACE语句能执行,只要数据库挂载,即使没有打开。如果是SYSTEM表空间,重做表空间,或默认临时表空间,数据库一定不能打开。ALTER
DATABASE DATAFILE 和 ALTER DATABASE TEMPFILE语句也有ONLINE/OFFLINE子句,但在那些语句里需要输入所有表空间的文件名。语法与改变表空间可用性的ALTER TABLESPACE … ONLINE|OFFLINE语句不同,因为那是不同的操作。ALTER TABLESPACE语句将数据文件和表空间脱机,但不能用于改变临时表空间或它的临时文件。

案例:

select tablespace_name,status from dba_tablespaces;--查看表空间是否处于联机状态(select * status from dba_tablespaces;--全局查看表空间的状态

SELECT tablespace_name FROM
dba_tablespaces

ALTER TABLESPACE users OFFLINE
NORMAL;

ALTER TABLESPACE users ONLINE;

(注:表空间的名字创建了就不能重命名,否则就是表空间迁移了,如果想重命名表空间的数据文件,那么就得使表空间处于脱机状态,或者数据库处于mount 状态

案例:ALTER
TABLESPACE TABLESPACE_NAME RENAME DATAFILE filename TO newfilename;)