数据库的存储结构
数据库主要用于存储和检索相关的信息,Oracle数据库包含逻辑结构和物理结构。
物理结构是指现实存储单元,由一组文件组成如数据文件、日志文件、控制文件。
数据文件:用于存储数据的文件。如表,索引和数据等都存储在数据文件中。
日志文件:用于记录对数据库的修改信息。
控制文件:用于存储 Oracle实例信息、数据文件信息和日志文件信息的二进制文件。由于存储了数据文件和日志文件的信息,所以 Oracle启动时必须访问呢控制文件。
逻辑结构式是指数据概念性的组织。包括 表空间、表、行等概念组成。
一、表空间(tablespace)的概念
表空间是Oracle特殊的发明,用于存储数据库表,索引等对象的磁盘逻辑空间。在物理上表空间由1个或者多个数据文件组成,而数据库在逻辑上由1个或者多个表空间组成。
表空间在Oracle10g中北分为一下3类:
1、永久性表空间:一般保持基表、视图、存储过程和索引等数据。SYSTEM、SYSAUX、USERS、EXAMPLE表空间是默认安装的。
2、临时性表空间:用于保存系统中短期活动的数据,如排序数据等。
3、撤销表空间;用来帮助回退未提交的事务数据,已提交了的数据在这里是不可以恢复的。
一般不需要建立临时表空间和撤销表空间,除非把它们转移到其他磁盘以提高性能。
表空间的目的:
1、对不同用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户操作,对模式对象的管理。
2、可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间,有利于提高I/O性能,有利于备份和恢复数据等。
二、系统自带的表空间:
SYSTEM表空间:用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。不建议将用户创建的表、索引等对象存放到SYSTEM表空间中。
SYSAUS表空间:用于存放Oracle系统内部的常用的样例用户的对象。SYSAUX表空间一般不存储用户的数据,由Oracle系统自动维护。
Undotbs表空间:Undotbs表空间用于存放撤销信息的表空间。当我们对数据库表的数据进行增加、修改、删除时,Oracle自动使用撤销表空间来临时存储修改前的数据。当所做操作提交后, Oracle可根据需要保留修改前数据的时间长短来释放撤销表空间的部分空间。一般在创建Oracle实例后,Oracle会自动创建一个名为UNDOTBS1的撤销表空间。
TEMP表空间:用于存放临时数据的特殊表空间。例如:当用户需要进行排序时,Oracle讲排序的数据临时放到该表空间内。排序完成后即可释放排序数据所占用的空间。
USERS表空间:Users表空间是Oracle建议用户使用的表空间,可以在这个表空间上创建各种对象,如创建表、索引等。
Example表空间:(实例表空间)它用来存放我们安装Oracle的时候创建的实例用户模式的数据信息。
除了 Oracle自带的表空间外,用户可以根据需要创建多个表空间,以区分用户数据和系统数据。一般在Oracle数据库中,只创建一个数据库实例,而创建多个表空间来管理保存多个项目中的数据库表。
三、创建表空间
语法:
CREATE TABLESPACE tablespacename
DATAFILE 'filename'[size integer]
[AUTOEXTEND[OFF|ON]]
tablespancename:表示创建表空间的名称。
filename:表示组成表空间的一个活多个数据文件,当有多个数据文件时,使用,分隔。
size:指定文件的大小,单位是K(字节)或者M(兆)。
AUTOEXTEND:用来启用或警用数据文件的自动扩展,只有设置了AUTOEXTEND后,在存储空间使用完毕后才会自动扩展,设置为ON即可,如果设置为OFF,则不能自动扩展。会导致存储空间不足的情况。
示例:
--创建一个表空间,物理文件为shop_dev_data.dbf,初始大小为100M,为自动增长 CREATE TABLESPACE shop_dev_data datafile 'E:\DB\Shop\shop_dev_data.dbf' size 100m autoextend on
四、操作表空间
1、更改表空间大小:
ALTER DATABASE DATAFILE '数据文件路径' resize <新的大小>
--将表空间的物理文件大小设置为50M ALTER DATABASE DATAFILE 'E:\DB\Shop\shop_dev_data.dbf' resize 50m
2、改变表空间的属性和状态
ALTER TABLESPACE <表空间名称> READ WRITE;
--设置表空间为只读状态 ALTER TABLESPACE SHOP_DEV_DATA READ ONLY; --设置表空间为读写状态 ALTER TABLESPACE SHOP_DEV_DATA READ WRITE; --修改表空间状态为offline; ALTER TABLESPACE SHOP_DEV_DATA OFFLINE;
3、删除表空间
DROP TABLESPACE tablespacename;
--删除表空间 DROP TABLESPACE SHOP_DEV_DATA
4、查询系统中所有的表空间
SELECT t.TABLESPACE_NAME,t.STATUS FROM DBA_TABLESPACES t
5、查询表空间和数据文件对应关系
SELECT d.TABLESPACE_NAME,d.FILE_NAME FROM DBA_DATA_FILES d
6、查询用户默认的表空间
--查询用户默认的表空间 SELECT u.username,u.default_tablespace FROM DBA_USERS
7、查询表空间中包含哪些表
--查询“SHOP_DEV_DATA”表空间下对应的所有的表 SELECT * FROM USER_TABLES ut WHERE ut.TABLESPACE_NAME = 'SHOP_DEV_DATA' --名称必须全大写
8、移动表到一个新的表空间
--将newTable移动到users表空间下 ALTER TABLE NEWTABLE MOVE TABLESPACE USERS SELECT * FROM USER_TABLES ut WHERE ut.TABLESPACE_NAME = 'USERS'
9、修改用户默认表空间
SELECT username,default_tablespace FROM DBA_USERS --修改shop_user用户默认表空间为users ALTER USER shop_user DEFAULT TABLESPACE USERS