表空间相关操作大全

表空间相关操作大全

表空间是Oracle将相关逻辑结构分组在一起的数据库存储单元。数据库数据文件存储在表空间中。表空间(tablespaces)实际上是一个逻辑的概念,在物理上是并不存在的。DBA在日常管理中,表空间的管理尤为重要,关乎数据安全。本篇博客整理了一些表空间的相关操作。

系统重要表空间介绍

1.1 SYSTEM,系统表空间,存放关于表空间名称、控制文件、数据文件等管理信息,存放着方案对象(如表,索引,同义词,序列)的定义信息,存放着所有pl/sql 程序(如过程,函数,包,触发器)的源代码,是oracle数据库中最重要的表空间。它属于SYS和SYSTEM方案,仅被SYS和SYSTEM或其他具有足够权限的用户使用。即使是SYS 和SYSTEM用户也不能删除或重命名该空间。
自动管理,如发现空间占据70%以上,可考虑添加数据文件
1.2 SYSAUX,系统辅助表空间,用于减少system表空间的负荷,提高系统的工作效率
1.3 TEMP ,临时表空间,存放临时表和临时数据,用于排序。每个数据库都应该有一个(或创建一个)临时表空间,以便在创建用户时将其分配给用户,否则就会将TEMP表空间作为临时表空间。
1.4 UNDOTBS,重做表空间,存放数据库的有关重做的相关信息和数据,日志切换频繁时需添加数据文件
1.5 REDO,Oracle通过Redo来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被恢复。Redo对于Oracle数据库来说至关重要。在数据库中,Redo的功能主要通过3个组件来实现:Redo Log Buffer、LGWR后台进程和Redo Log File(在归档模式下,Redo Log File最终会经由ARCn进程写出为归档日志文件)。
1.6 USERS,用户表空间,存放永久性的用户对象的数据和私有信息,因此也被称为数据表空间。每个数据库都应该有一个(或创建一个)用户表空间,以便在创建用户时将其分配给用户,否则将会使用SYSTEM表空间来保存数据。

1.创建表空间操作

--标准格式
CREATE TABLESPACE lmtbsb 
	LOGGING DATAFILE  
	'/u02/oracle/data/lmtbsb01.dbf' 
	SIZE 32M AUTOEXTEND ON    
	NEXT 32M MAXSIZE 2048M 
	EXTENT MANAGEMENT LOCAL; 
--创建非标准128K扩展区的表空间
CREATE TABLESPACE lmtbsb 
	LOGGING DATAFILE 
	'/u02/oracle/data/lmtbsb01.dbf' 
	SIZE 50M 
	EXTENT MANAGEMENT LOCAL 
	UNIFORM SIZE 128K;
--SET LONG 10000
SELECT DBMS_METADATA.GET_DDL('TABLESPACE',TABLESPACE_NAME) 
	FROM DBA_TABLESPACES 
	WHERE TABLESPACE_NAME='USERS';

2. 表空间查询操作

2.1 查询表空间使用情况

--包含自动扩展和非自动扩展表空间使用情况,比例等,DBA常用查询
--set linesize 4000
--set pagesize 2000

select a.tablespace_name,a.autoextensible,
               round(a.bytes_alloc / 1024 / 1024/1024) alloc_GB,
               round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024/1024) used_GB,
               round((a.bytes_alloc - nvl(b.bytes_free, 0)) * 100 /
                     a.maxbytes) used_of_max,
               round((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free, 0)) /
                     1048576/1024) free_of_max_GB,
               round(a.maxbytes / 1048576/1024) max_GB,
                           round(((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free, 0))/a.maxbytes*100),2) ratio
          from (select f.tablespace_name,f.autoextensible,
                       sum(f.bytes) bytes_alloc,
                       sum(decode(f.autoextensible,
                                  'YES',
                                  f.maxbytes,
                                  'NO',
                                  f.bytes)) maxbytes
                  from dba_data_files f
                 group by tablespace_name,autoextensible) a,
               (select f.tablespace_name, sum(f.bytes) bytes_free
                  from dba_free_space f
                 group by tablespace_name) b, dba_tablespaces
         where a.tablespace_name = b.tablespace_name and a.tablespace_name=dba_tablespaces.tablespace_name;

2.2 查询数据文件

-- 查询某个表空间的数据文件
SELECT * FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USER';

-- 查询临时表空间数据文件
SELECT * FROM DBA_TEMP_FILES D;

2.3 查询表空间下用户信息

-- 查询表空间下面所有的用户
SELECT DISTINCT S.OWNER 
	FROM DBA_SEGMENTS S 
	WHERE S.TABLESPACE_NAME ='TABLESPACENAME';

--查看用户默认表空间、临时表空间:
SELECT USERNAME,TEMPORARY_TABLESPACE,
	DEFAULT_TABLESPACE 
	FROM DBA_USERS;

2.4 查询表空间下所有对象

--删除表空间前查询表空间下所有对象
SELECT TABLESPACE_NAME AS TABLESPACE_NAME ,
	SEGMENT_NAME AS SEGMENT_NAME , 
	SUM(BYTES)/1024/1024  AS SEGMENT_SIZE  
	FROM DBA_SEGMENTS
	WHERE TABLESPACE_NAME='TABLESPACENAME' 
	GROUP BY TABLESPACE_NAME,SEGMENT_NAME 
	ORDER BY 3
--ORDER BY 3 按照第三列(SEGMENT_SIZE)排序

2.5 查询表空间的日志模式

--使用OGG软件数据同步时需要开启logging
SELECT TABLESPACE_NAME,LOGGING 
	FROM DBA_TABLESPACES 
	WHERE TABLESPACE_NAME='TABLESPACENAME';

3. 表空间扩展操作

-- 直接修改原有数据文件大小,修改成32G,单个数据文件最大只能32G
ALTER DATABASE DATAFILE '/ORADATA/XXX.DBF' RESIZE 32G;

-- 给表空间增加数据文件
ALTER TABLESPACE DATA_ODS 
ADD DATAFILE '/oradata/xxx.dbf' 
SIZE 1G AUTOEXTEND ON
NEXT 8M MAXSIZE 30G;

4. 表空间删除操作

--删除users表空间,包含目录
DROP TABLESPACE users INCLUDING CONTENTS;

--删除users表空间,包含目录和数据文件
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;

5. 表空间给用户授权和配额

表空间存储限制是用户在某一个表空间中可以使用的存储空间总数。 在创建或修改用户时,可以由参数QUOTA指出。
若用户在向表空间存储数据时,超出了此限额,则会产生错误。 错误信息:ORA-01536:SPACE QUOTA EXCEEDED FOR TABLESPACE TABLESPACENAME…’。 可以通过查询字典DBA_TS_QUOTAS查看表空间限额信息。

--查看所有用户表空间的配额情况 
SELECT * FROM DBA_TS_QUOTAS;

--查看当前用户表空间的配额情况   
SELECT * FROM USER_TS_QUOTAS;
--更改用户的表空间限额:
--全局:
GRANT UNLIMITED TABLESPACE TO ABC;
--针对某个表空间:
ALTER USER ABC QUOTA UNLIMITED ON TEST;
--回收:
REVOKE UNLIMITEDTABLESPACE FROM ABC;
ALTER USER ABCQUOTA 0 ON TEST;

如果没得到你想要的答案,请移步至官方文档《Managing Tablespaces》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值