Oracle的表空间
Oracle表空间
1 表空间的概述
ORACLE数据库被划分成称作为表空间的逻辑区域,形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等
2 表空间的作用
- 决定数据库实体的空间分配;
- 设置数据库用户的空间份额;
- 控制数据库部分数据的可用性;
- 分布数据于不同的设备之间以改善性能;
- 备份和恢复数据
3 表空间的分类
1> 系统表空间:该表空间是每个Oracle数据库都必须具备的部分。在系统表空间中存放的是诸如表空间名称,表空间所含数据文件这类管理数据库自身所需的信息。不能由用户创建。
2> 临时表空间:临时表空间是Oracle用于存储其所有临时表的所在。临时表空间类似于数据库白板或草稿纸。就像有时可能需要草草记下一些数据以对其进行操作一样,Oracle工作时也需要一些临时的磁盘空间。可有多个临时表空间。用户可以自己创建临时表空间
3> 用户表空间:用来存放用户的私有信息。例如,在学习使用Oracle时,读者可能需要建立一些数据库对象。
4> 回滚表空间:撤销表空间用于回滚事务,以及提供与DML语句同时运行在相同的表或表集上的select语句的读一致性,并支持大量Oracle闪回特性,例如闪回查询(Flashback Query) 3 表空间的常用操作
--注:临时表空间和撤销表空间是oracle管理的特殊的表空间.只用于存放系统相关数据.
--oracle 创建表空间应该授予的权限
1.被授予关于一个或多个表空间中的resource特权;
2.被指定缺省表空间;
3.被分配指定表空间的存储空间使用份额;
4.被指定缺省临时段表空间。
4:表空间的常用操作
1> 建立表空间
--> 语法格式:
CREATE [BIGFILE | SMALLFILE][TEMPORARY]TABLESPACE name --指定带创建的表空间的名称和类型
DATAFILE 数据文件全名 | TEMPFILE 临时文件全名 --为表空间指定数据文件或临时文件
[MINIMUM EXTENT 最小区段大小] --指定表空间的最小区段大小
[BLOCKSIZE 块大小] --指定表空间的块大小
[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE] --指定本地存储策略
[LOGGING|NOLOGGING] --是否创建重做日志文件,默认logging
[FORCE LOGGING] --强制日志模式,nologging参数不再起作用
[ONLINE|OFFLINE] --表空间是联机还是脱机状态
[EXTENT MANAGEMENT DICTIONARY |LOCAL [AUTOALLOCATE|UNIFORM SIZE size]] --扩展区块的管理方式
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO] --段空间管理方式
[FLASHBACK ON|OFF] --是否支持闪回
--> 实例
CREATE TABLESPACE TestTS --创建名为TestTS的表空间 DATAFILE 'D:\Oracle\oradata\orcl\sample.dbf' --为表空间指定数据文件 SIZE 50M REUSE --数据文件的大小为50M AUTOEXTEND ON --数据文件自动增长 NEXT 50M --下一次数据文件增长50M MAXSIZE 1024M --数据文件的最大大小为1G MINIMUM EXTENT 128K --最小区段大小128K,默认为64K DEFAULT STORAGE ( INITIAL 128K --区段的第一个段为128K NEXT 128K --第二个Extend的大小, --第二个以后的Extend计算方式:前一个Extend*(1+PCTINCREASE%) MINEXTENTS 1 --区段第一次创建的时候分配1个Extend MAXEXTENTS 4096 --最多可分配的Extend的个数 PCTINCREASE 0 --第二个以后得Extend增长的百分比 ) LOGGING --生成日志 ONLINE --联机 SEGMENT SPACE MANAGEMENT AUTO --自动区段管理 FLASHBACK ON; --开启回闪
2> 修改表空间
--> 语法格式:
alter tablespce 表空间名
(add datafile 文件标识符[,文件标识符]...
|rename datafile ’文件名’[,’文件名’]...
to ’文件名’[,’文件名’]...
|default storage(存储配置参数)
|online|offline[normal|immediate]
|(begin|end)backup);
--> 实例
--1.使表空间脱机 ALTER TABLESPACE GAME OFFLINE; --如果是意外删除了数据文件,则必须带有recover选项 ALTER TABLESPACE GAME OFFLINE FOR RECOVER; --2.使表空间联机 ALTER TABLESPACE GAME ONLINE; --3.使数据文件脱机 ALTER DATABASE DATAFILE 3 OFFLINE; --4.使数据文件联机 ALTER DATABASE DATAFILE 3 ONLINE; --5.使表空间只读 ALTER TABLESPACE GAME READ ONLY; --6.使表空间可读写 ALTER TABLESPACE GAME READ WRITE; --首先查看表空间的名字和所属文件 SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, ROUND(BYTES / (1024 * 1024), 0) TOTAL_SPACE FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME;
3> 扩展表空间
--1.增加数据文件 ALTER TABLESPACE GAME ADD DATAFILE '/oracle/oradata/db/game02.dbf' SIZE 1000M; --2.手动增加数据文件尺寸 ALTER DATABASE DATAFILE '/oracle/oradata/db/game.dbf' RESIZE 4000m; --3.设定数据文件自动扩展 ALTER DATABASE DATAFILE '/oracle/oradata/db/game.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE 10000M; --4.设定后查看表空间信息 SELECT A.TABLESPACE_NAME, A.BYTES TOTAL, B.BYTES USED, C.BYTES FREE, (B.BYTES * 100) / A.BYTES "% used", (C.BYTES * 100) / A.BYTES "% free" FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;
4> 删除表空间
1 --> 语法格式: 2 /* drop tablespace表空间名[including contents [and datafile]]; */ 3 --> 实例 4 DROP TABLESPACE TestTS;
5> 表空间相关查询
1 --检查当前用户空间分配情况 2 SELECT TABLESPACE_NAME, 3 SUM(EXTENTS), 4 SUM(BLOCKS), 5 SUM(BYTES) 6 FROM USER_SEGMENTS 7 GROUP BY TABLESPACE_NAME; 8 -- 检查各用户空间分配情况 9 SELECT OWNER, 10 TABLESPACE_NAME, 11 SUM(EXTENTS), 12 SUM(BLOCKS),SUM(BYTES) 13 FROM DBA_SEGMENTS 14 GROUP BY OWNER, TABLESPACE_NAME; 15 -- 检查当前用户数据库实体空间使用情况 16 SELECT TABLESPACE_NAME,SEGMENT_NAME, 17 SEGMENT_TYPE, 18 COUNT(EXTENT_ID), 19 SUM(BLOCKS), SUM(BYTES) 20 FROM USER_EXTENTS 21 GROUP BY TABLESPACE_NAME, SEGMENT_NAME, SEGMENT_TYPE; 22 -- 检查各用户空间使用情况 23 SELECT OWNER, TABLESPACE_NAME, 24 COUNT(EXTENT_ID), 25 SUM(BLOCKS), SUM(BYTES) 26 FROM USER_EXTENTS 27 GROUP BY OWNER, TABLESPACE_NAME; 28 -- 检查数据库空间使用情况 29 SELECT TABLESPACE_NAME, COUNT(EXTENT_ID), 30 SUM (BLOCKS), SUM(BYTES) 31 FROM USER_EXTENTS 32 GROUP BY TABLESPACE_NAME; 33 -- 检查当前用户自由空间情况 34 SELECT TABLESPACE_NAME, COUNT(BLOCK_ID), 35 SUM (BLOCKS), SUM(BYTES) 36 FROM USER_FREE_SPACE 37 GROUP BY TABLESPACE_NAME; 38 --检查数据库自由空间情况 39 SELECT TABLESPACE_NAME, COUNT(BLOCK_ID), 40 SUM (BLOCKS), SUM(BYTES) 41 FROM DBA_FREE_SPACE 42 GROUP BY TABLESPACE_NAME;

浙公网安备 33010602011771号