作者:雨竹清风
创建非表空间的作用:
1.方便磁盘的管理
2.更好的控制分配给用户磁盘空间的数量
3.可以有效的将静态数据和动态数据进行分离
4.按照备份的要求将数据分开存放
创建表空间的命令格式:
create tablespace 表空间名
[datafile子句]
[minimum extent 正整数[K|M]]
[blocksize正整数[k]]
[logging|nologging]
[defaultc存储子句]
[online|offline]
[permanent|temporary]
[区段管理子句]
[段管理子句]
说明:
minimum extent:表空间中所使用的每个extent都必须是该参数所指定数的整数倍。
logging:说明在该表空间的所有的数据变化都会写入重做日志文件中这是默认设置。
offline:说明在该表空间被创建后立即被置为脱机,即不能使用。
以下是创建和删除表空间的实例:
1.创建表空间,表空间的名字叫fanlu,大小为5M,区大小统一为120k。
SQL> create tablespace fanlu datafile 'D:\oracle\product\10.2.0\user_tablespace\fanlu_tablespace.dbf'size 5M extent management local uniform size 120k;
表空间已创建。
2.查看刚刚创建的fanlu表空间是否已经存在了。使用v$tablespace和dba_data_files。
SQL> desc v$tablespace;
名称 是否为空? 类型
----------------------------------------- -------- ------------
TS# NUMBER
NAME VARCHAR2(30)
INCLUDED_IN_DATABASE_BACKUP VARCHAR2(3)
BIGFILE VARCHAR2(3)
FLASHBACK_ON VARCHAR2(3)
ENCRYPT_IN_BACKUP VARCHAR2(3)
SQL> select TS#,NAME from v$tablespace;
TS# NAME
---------- -----------------------------------
0 SYSTEM
1 UNDOTBS1
2 SYSAUX
4 USERS
3 TEMP
6 EXAMPLE
7 XIXI
8 FANLU
已选择8行。
SQL> desc dba_data_files;
名称 是否为空? 类型
----------------------------------------- -------- ---------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
SQL> col file_name for a62
SQL> col tablespace_name for a15
SQL> select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
--------------- -------------------------------------------------------------
USERS D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
SYSTEM D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
EXAMPLE D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
XIXI D:\ORACLE\PRODUCT\10.2.0\XIXI.DBF
FANLU D:\ORACLE\PRODUCT\10.2.0\USER_TABLESPACE\FANLU_TABLESPACE.DBF
已选择7行。
从结果看两次查询时相同的。
以下蓝色背景字出自于:http://coupling001.blog.163.com/blog/static/174925389201102534541321/
表空间数据字典信息
dba_tablespaces:提供数库中所有表空间的列表以及与这些表空间相关的默认设置。
dba_data_files:列出与给定表空间相关的所有数据文件,包括他们的位置和配置。
dba_segments:列出数据库中所有的段(表、索引等),段类型和每个段的表空间分配。
dba_extents:列出表和表空间所分配的区。
v$tablespace:列出表空间的序号和名称。当数库装在以后,即可使用视图。
v$datafile:列出所有数库的数据文件以及与每个数据文件相关的表空间序号。当数库装在以后,即可使用该视图。
DBA_TABLESPACES字段多,描述的信息详细,v$tablespace只有很少几个字
段信息。
dba_data_files 全部数据文件信息和对应表空间信息。v$datafile 数据文件的同步信息和文件信息。DBA_*只有在数据库OPEN 的时候才能使用,v$*的内容取自于控制文件,在数据库MOUNT下也可以使用。例如:在操作系统下删除某数据文件,启动的时候只能到MOUNT 下,这时候,用v$datafile 还是可以查看到该数据文件。启动不到OPEN,当然不能不能使用dba_data_files。
//查看表空间对应的数据文件/
由上面的查看表空间信息,我们自然会想到查看数据文件信息有v$datafile 和dba_data_files。通过查看v$datafile 结构,发现v$datafile里面没有同时具备表空间名字和数据文件名字NAME 的字段,但是有一个表空间编号字段TS#。同时,在v$tablespace 里面有表空间编号字段TS#。因此,我们可以通过两个表的关联查询,获取表空间对应的数据文件。查询如下:SELECT t.name,d.name FROM v$tablespace t,v$datafile d WHERE t.ts#=d.ts#。
SQL> select t.name,d.name from v$tablespace t,v$datafile d where t.TS#=d.TS#;
NAME NAME
----------------------------------- -----------------------------------
SYSTEM D:\ORACLE\PRODUCT\10.2.0\ORADATA\OR
CL\SYSTEM01.DBF
UNDOTBS1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\OR
CL\UNDOTBS01.DBF
SYSAUX D:\ORACLE\PRODUCT\10.2.0\ORADATA\OR
CL\SYSAUX01.DBF
USERS D:\ORACLE\PRODUCT\10.2.0\ORADATA\OR
CL\USERS01.DBF
NAME NAME
----------------------------------- -----------------------------------
EXAMPLE D:\ORACLE\PRODUCT\10.2.0\ORADATA\OR
CL\EXAMPLE01.DBF
XIXI D:\ORACLE\PRODUCT\10.2.0\XIXI.DBF
FANLU D:\ORACLE\PRODUCT\10.2.0\USER_TABLE
SPACE\FANLU_TABLESPACE.DBF
已选择7行。
SQL> desc dba_data_files;
名称 是否为空? 类型
----------------------------------------- -------- -----------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
SQL> col file_name for a62
SQL> col tablespace_name for a15
SQL> select tablespace_name ,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
--------------- --------------------------------------------------------------
USERS D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
SYSTEM D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
EXAMPLE D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
XIXI D:\ORACLE\PRODUCT\10.2.0\XIXI.DBF
FANLU D:\ORACLE\PRODUCT\10.2.0\USER_TABLESPACE\FANLU_TABLESPACE.DBF
已选择7行。
/
以下是删除表空间的命令。
SQL> drop tablespace xixi including contents and datafiles;
表空间已删除。
查看是否已经成功删除。
SQL> col file_name for a62
SQL> col tablespace_name for a15
SQL> select tablespace_name ,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
--------------- -------------------------------------------------------------
USERS D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
SYSTEM D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
EXAMPLE D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
FANLU D:\ORACLE\PRODUCT\10.2.0\USER_TABLESPACE\FANLU_TABLESPACE.DBF
已选择6行。