Oracle数据库的下一层逻辑结构并非数据表,而是表空间。每个数据表都属于唯一的表空间。
1、Oracle表空间
与数据表相同,Oracle表空间是一个逻辑对象,而非物理对象,是数据库的组成部分。当使用SQL语句对数据库进行操作时,操作的都是逻辑对象,而非直接操作物理文件。一个数据库可以有多个表空间,一个表空间可以有多个数据表。
Oracle表空间的Oracle数据库高性能的保证,对于访问频繁的数据表,可以将其放入单独的表空间中,并存储与高性能磁盘;将其他访问较少的数据表规划于单独的表空间,并存储与性能相对较低的磁盘,以实现合理利用服务器资源,最大限度提供数据库性能。另外一种应用场景为将更新频繁的数据表规划于单独的表空间,而很少更新的数据表规划于其他的表空间,在备份数据库时,可以针对不同表空间指定不同的备份周期,在最大程度减小备份数据库占用的系统资源。
不同的表空间对应着不同的物理文件,当某个表空间物理文件损坏时,不会影响其他表空间的正常使用,提高了数据库的安全性。另外可以将数据库实际数据与日志规划为不同的表空间,并存储与不同的磁盘。即使数据库所在磁盘出现问题,还可以利用另一磁盘的日志文件恢复数据库,从而降低了数据丢失的风险。
1.1、创建Oracle表空间
Oracle表空间是一个逻辑概念,创建时需要指定物理文件,即为实际数据分配磁盘空间。表空间的物理文件为数据文件(datafile),同时指定数据文件初始大小。
1>、创建基本表空间
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M
数据文件的初始大小是必须参数,其完整鹭江必须包含在单引号中。
2>、指定数据文件的可扩展性
当存储在某个数据文件中的数据量超过了其初始大小时,数据文件可以进行自动扩展,使用autoextend选项。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M
AUTOEXTEND ON
autoextend选项值为“on”,表空间的数据文件可以自动扩展。若设置为“off”,则关闭自动扩展功能。
3>、指定数据文件的增长幅度
数据文件自动增长时,每次默认增长64K。当某个表空间数据更新很快,数据量的增长很快时,就会频繁地要求增加数据文件的大小。此时需要为每次的增长幅度设定一个合理的值,避免频繁执行增加数据文件大小的动作,影响数据库性能。
设定自动增长幅度使用next选项。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M
AUTOEXTEND ON NEXT 5M
4>、指定数据文件的最大尺寸
数据文件可以自动增长,但是无限制的增长往往带来风险。除非特殊需要,应为每个表空间的数据文件设定最大尺寸。
为数据文件设定最大尺寸使用maxsize选项。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M
AUTOEXTEND ON NEXT 5M MAXSIZE 500M
如果不限制数据文件的最大尺寸,使用unlimited来代替实际值。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
5>、查看表空间是否创建成功
表空间成功创建之后,会在数据库系统表中添加相应的记录,并且创建相应的物理文件。可以通过查询视图dba_data_files中的记录和实际数据文件存在性,来判断表空间是否创建成功。
查看表空间信息的SQL语句:
select file_name,tablespace_name from dba_data_files order by file_name
6>、为一个表空间创建多个数据文件
一个表空间可以有多个数据文件,为一个表空间创建多个数据文件需要指定多个数据文件的完整路径和详细的选项参数。各数据文件参数之间使用逗号(“,”)分隔。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA_01.DBF' SIZE 20M,'F:\DATABASE\ORADATA\MEMBER_DATA_02.DBF' SIZE 10M
1.2、查看表空间
可以通过查询视图dba_tablespaces和视图dba_data_files来获得数据库的表空间信息。dba_tablespaces可以用来查看所有表空间的基本信息,dba_data_files可以用来查看相关数据文件的信息。
select tablespace_name,status,allocation_type from dba_tablespaces
1.3、修改数据库默认表空间
默认表空间是相对用户来说的,每个用户登录Oracle时,都有一个默认的工作空间。当进行与表空间相关操作时,如果为显示指定表空间,则该操作将作用于用户的默认表空间。
查询每个用户的默认表空间:
select user_id,username,default_tablespace from dba_users
修改数据库默认表空间的SQL语句:
alter database default tablespace MEMBER
1.4、修改表空间名称
修改表空间名称使用rename to命令,不能对数据的系统表空间进行重命名。
ALTER TABLESPACE MEMBER01 RENAME TO MEMBER02
1.5、删除表空间
如果某个表空间没有存在的必要,可以执行删除表空间命令,以释放磁盘空间。删除表空间的命令为drop tablespace。删除表空间有两种方式,一是仅仅删除其在数据库中的记录,另一种是将记录和数据文件一起删除。
1>、仅删除其在数据库中记录的SQL语句
DROP TABLESPACE MEMBER01
2>、删除表空间及其数据文件的SQL语句
including contents and datafiles表明当删除该表空间时,应将数据文件一并删除。
DROP TABLESPACE MEMBER01 INCLUDING CONTENTS AND DATAFILES
2、创建Oracle数据表
利用SQL语句查看数据表所属的表空间:
select table_name,tablespace_name from user_tables
DESCRIBE T_USER
3、修改Oracle数据表结构
1>、使用rename选项修改列名
ALTER TABLE T_USER RENAME COLUMN USER_EMAIL TO EMAIL
2>、使用modify选项修改列的属性
ALTER TALBE T_USER MODIFY (USER_NAME VARCHAR2(15))
一次修改多个属性
ALTER TALBE T_USER MODIFY (USER_NAME VARCHAR2(15), EMAIL VARCHAR2(30))
3>、添加列
ALTER TABLE T_USER ADD (REMARK VARCHAR2(50))
4>、删除列
ALTER TABLE T_USER DROP COLUMN REMARK
5>、修改表名
ALTER TABLE T_USER RENAME TO T_USERS
4、删除数据表
DROP TABLE T_USERS
DROP TABLE T_USERS CASCADE CONSTRAINS
有时某些数据表的列被其他表引用,如外键引用时,直接使用DROP TABLE将无法删除该表,此时需要使用CASCADE CONSTRAINS选项,CASCADE CONSTRAINS表示删除表时,将一起作用于约束。