Oracle Tablespace

我们知道oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。

表空间属性:
一个数据库可以包含多个表空间,一个表空间只能属于一个数据库
一个表空间包含多个数据文件,一个数据文件只能属于一个表空间
表这空间可以划分成更细的逻辑存储单元


1、创建表空间

1) 创建表空间ts01

SQL> create tablespace ts01 datafile 'D:\install\oracle\product\10.2.0\oradata\orcl\df01.dbf' size 10M uniform size 128k;

2) 创建表table01放入表空间ts01
SQL> create table table01(id number,name varchar2(10)) tablespace ts01;

2、扩展表空间

1) 增加数据文件

SQL> alter tablespace ts01 add datafile 'D:\install\oracle\product\10.2.0\oradata\orcl\df02.dbf' size 10M;
2) 手工改变已存在数据文件的大小
SQL> alter database datafile 'D:\install\oracle\product\10.2.0\oradata\orcl\df01.dbf' resize 20M;
3) 允许已存在的数据文件自动增长
SQL> alter database datafile 'D:\install\oracle\product\10.2.0\oradata\orcl\df01.dbf' autoextend on next 10M maxsize 500M;
4) 新增数据文件,并且允许数据文件自动增长
SQL> alter tablespace ts01 add datafile 'D:\install\oracle\product\10.2.0\oradata\orcl\df03.dbf' 
size 10M autoextend on next 10M maxsize 500M;


3、移动数据文件

1) 确定数据文件所在表空间

SQL> select tablespace_name from dba_data_files where 
file_name='D:\INSTALL\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DF01.DBF';
2) 使表空间脱机(确保数据文件一致性)
SQL> alter tablespace ts01 offline;
3) 移动数据文件到指定位置(Command Window)
CMD> host move D:\install\oracle\product\10.2.0\oradata\orcl\df01.dbf D:\df01.dbf
4) 执行alter tablespace命令
SQL> alter tablespace ts01 rename datafile 'D:\install\oracle\product\10.2.0\oradata\orcl\df01.dbf' to 'D:\df01.dbf';
5) 使表空间联机
SQL> alter tablespace ts01 online;


4、删除表空间(drop tablespace ts01)

1) 删除表空间中的segments

SQL> drop tablespace ts01 including contents;
2) 删除表空间中的segments和datafiles
SQL> drop tablespace ts01 including contents and datafiles;
3) 删除所有与该空间相关的完整性约束条件
SQL> drop tablespace ts01 cascade constraints;


5、修改表空间状态

1) 使表空间脱机

SQL> alter tablespace ts01 offline;
2) 使表空间联机
SQL> alter tablespace ts01 online;
3) 只读表空间(不能在该表空间上执行update、delete、insert)
SQL> alter tablespace ts01 read only;
4) 取消表空间只读
SQL> alter tablespace ts01 read write;


6、其它

1) 显示该表空间所有表

SQL> select * from all_tables where tablespace_name='TS01';
2) 查询表属于哪个表空间
SQL> select tablespace_name,table_name from user_tables where table_name='TABLE01';

你可能感兴趣的:(Oracle)