TABLESPACE(表空间)的类型
①PERMANENT 永久表空间
②UNDO 撤销表空间
③TEMPORARY 临时表空间
管理方式:
重点是段的管理方式和区的管理方式是在建立表空间时确定的。
段管理方式有AUTO和MANUAL两种,区管理方式有本地管理和字典管理(已淘汰)两种。
SQL> select tablespace_name,contents ,extent_management,segment_space_management from dba_tablespaces;
TABLESPACE_NAME CONTENTS EXTENT_MAN SEGMEN
------------------------------ --------- ---------- ------
SYSTEM PERMANENT DICTIONARY MANUAL ##手动
SYSAUX PERMANENT LOCAL AUTO
TEMP TEMPORARY LOCAL MANUAL
USERS PERMANENT LOCAL AUTO ##自动
EXAMPLE PERMANENT LOCAL AUTO
UNDO_TBS01 UNDO LOCAL MANUAL
TMP01 TEMPORARY LOCAL MANUAL
TEST PERMANENT DICTIONARY MANUAL
基本操作
1)建立表空间
SQL> create tablespace a datafile '/u01/oradata/prod/a01.dbf' size 10m;
利用oracle提供的dbms_metadata.get_ddl包看看缺省值都给的是什么?
SQL> set serverout on;
SQL>declare
aa varchar2(2000);
begin
select dbms_metadata.get_ddl('TABLESPACE','B') into aa FROM dual;
dbms_output.put_line(aa);
end;
/
结果:
CREATE TABLESPACE "A" DATAFILE
'/u01/oradata/prod/a01.dbf' SIZE 10485760
LOGGING ONLINE PERMANENT BLOCKSIZE
8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO
PL/SQL 过程已成功完成。
关注最后一行,两个重要信息是:(1)区本地管理且自动分配空间,(2)段自动管理。
----------------------------------
SQL>create tablespace b datafile '/u01/oradata/prod/b01.dbf' size 10m
extent management local uniform size 128k
segment space management manual
同上,调dbms_metadata.get_ddl包看Oracle对该语句的ddl操作是:
CREATE TABLESPACE "B" DATAFILE
'/u01/oradata/prod/a01.dbf' SIZE 10485760
LOGGING ONLINE PERMANENT BLOCKSIZE
8192
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 131072 SEGMENT SPACE MANAGEMENT MANUAL
最后一行信息是:区本地管理且统一分配128K, 段手动管理。如果在建表时使用缺省说明,则该表将服从其表空间的这些定义
删除表空间
表空间的删除和offline
SQL>drop tablespace test including contents and datafiles; ##contents包括控制文件和数据字典信息,datafiles是物理数据文件。
数据库OPEN下不能删除的表空间是
①system ②active undo tablespace ③default temporary tablespace ④default tablespace
数据库OPEN下不能offine的表空间是
①system ②active undo tablespace ③default temporary tablespace
查看表空间大小
SQL> select TABLESPACE_NAME,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;
查看表空间空闲大小
SQL> select TABLESPACE_NAME,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;
TABLESPACE_NAME SUM(BYTES)/1024/1024
------------------------------ --------------------
UNDOTBS1 98.4375
SYSAUX 14.625
USERS 48.1875
SYSTEM 1.875
EXAMPLE 31.25
查看表空间(数据文件)是否自动扩展
SQL> col file_name for a40;
SQL> select file_name,tablespace_name,bytes/1024/1024 mb,autoextensible from dba_data_files;
修改表空间为自动扩展
SQL>alter database datafile '/u01/app/oracle/oradata/orcl/users_d01.dbf' autoextend on;
确认是否已经修改成功
SQLl> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'USERS';
TABLESPACE_NAME FILE_NAME AUT
----------------- ----------------------------------------- ---
SEC_D /u01/app/oracle/oradata/orcl/users_d01.dbf YES
总结修改语句语法
开启自动扩展功能语法:
alter database datafile '对应的数据文件路径信息' autoextend on;
关闭自动扩展功能语法:
alter database datafile '对应的数据文件路径信息' autoextend off;
---------------------------------------------------------------------------------
1.数据文件自动扩展的好处
1)不会出现因为没有剩余空间可以利用到数据无法写入
2)尽量减少人为的维护
3)可以用于重要级别不是很大的数据库中,如测试数据库等
2.数据文件自动扩展的弊端
1)如果任其扩大,在数据量不断变大的过程中会导致某个数据文件异常的大
2)没有人管理的数据库是非常危险的
建立大文件(bigfile)的表空间
①small file,在一个表空间可以建立多个数据文件(默认)
②bigfile :在一个表空间只能建立一个数据文件 (必须是8k的block ,最大可达32T),简化对数据文件管理。
SQL> create bigfile tablespace big_tbs datafile '/u01/oradata/prod/bigtbs01.dbf' size 100m;
试图在该表空间下增加一个数据文件会报错
SQL> alter tablespace big_tbs add datafile '/u01/oradata/prod/bigtbs02.dbf' size 100 m;
报错:ORA-32771: cannot add file to bigfile tablespace
查看大文件表空间:
SQL> select name,bigfile from v$tablespace;
来源:https://www.cnblogs.com/yqp-1/p/12306036.html