日期:2014-05-16 浏览次数:20499 次
如何管理oracle的表空间和数据文件 
SQL> conn sys/xin as sysdba 
已连接。 
SQL> set wrap off 
SQL> set linesize 100 
1. 一些基本的操作 
(1) 查看表空间: 
SQL> select * from v$tablespace; 
(2) 查看数据文件: 
SQL> select * from v$datafile; 
(3) 查看tablespace 和data files之间的对应关系(通过表空间的号连接在一起): 
SQL> select t1.name,t2.name 
2 from v$tablespace t1, v$datafile t2 
3 where t1.ts#=t2.ts# 
4 ; 
(4) 更改表空间 
SQL> alter tablespace users 
2 add datafile 'E:\ORACLE\ORADATA\XINER\USERS02.DBF' size 10m; 
表空间已更改。 
2. 管理表空间 
在oracle 里将表空间分为系统表空间和非系统表空间。 
(1) 系统表空间包括系统表,数据字典,以及系统回滚段等信息。 
查看系统回滚段: 
SQL> select * from dba_rollback_segs; 
(2) 非系统表空间用来分离段(分开临时数据和永久性数据,索引和表放在不同的表空间等等)可以给系统的性能带来 
好处,同时可以控制分配给用户的空间限额。 
控制用户对空间的使用: 
SQL> alter user HR 
2 quota 10m on users; 
用户已更改。 
(3) 如何创建表空间:([]均表示可选) 
create tablespace xxx 
[datafile 'xxx']---OMF时可以不指定 
[size xxx--kb,mb] 
[extent management local/dictionary] 
[default storage(xxx)] 
dictionary-managed tablespaces在oracle 9i 里已经不建议使用。 
SQL> create tablespace ice 
2 datafile 'e:\oracle\oradata\xiner\ice.dbf' size 5m 
3 extent management dictionary 
4 default storage( 
5 initial 100k 
6 next 100k 
7 pctincrease 10) 
8 offline; 
表空间已创建。 
如果表空间管理指定为Local型,则不能使用default storage。此时不会和数据字典表打交道,不会和系统表产生 
资源争用,也不会产生回滚数据(因为不涉及修改系统表),其次也不会有递归的资源争用。 
SQL> create tablespace ice1 
2 datafile 'e:\oracle\oradata\xiner\ice1.dbf' size 5m 
3 extent management local 
4 uniform size 1m; 
表空间已创建。 
SQL> create tablespace ice2 
2 datafile 'e:\oracle\oradata\xiner\ice2.dbf' size 5m 
3 extent management local autoallocate; 
表空间已创建。 
(4) Undo 表空间用来存储undo段,不能包括其他的数据对象,使用locally管理。 
undo 段主要用来保存数据改变的旧值,可以回滚transcation(rollback)。 
SQL> show parameter undo 
SQL> create undo tablespace ice3 
2 datafile 'e:\oracle\oradata\xiner\ice3.ora' size 5m 
3 extent management local 
4 uniform size 1m; //此时不能定义uniform size 
uniform size 1m 
* 
ERROR 位于第 4 行: 
ORA-30024: CREATE UNDO TABLESPACE 的说明无效 
SQL> del 4 
SQL> run 
1 create undo tablespace ice3 
2 datafile 'e:\oracle\oradata\xiner\ice3.ora' size 5m 
3* extent management local 
表空间已创建。 
不能在回滚表空间建立表对象(不能放其他的数据对象): 
SQL> create table tt1 
2 (id int) 
3 tablespace ice3; 
create table tt1 
* 
ERROR 位于第 1 行: 
ORA-30022: 无法在撤消表空间中创建段 
(5) 临时表空间用来支持排序,不能包括永久的数据对象,建议使用locally管理。 
SQL> create temporary tablespace ice4 
2 tempfile 'e:\oracle\oradata\xiner\ice4.ora' size 5m 
3 extent management local; 
表空间已创建。 
SQL> create table tt1 
2 (id int) 
3 tablespace ice4; 
create table tt1 
* 
ERROR 位于第 1 行: 
ORA-02195: 尝试创建的PERMANENT对象在TEMPORARY表空间中 
(6) 缺省的临时表空间: 
SQL> alter database default temporary tablespace ice4 
数据库已更改。 
临时表空间不可以被置为offline,也不能指定为read only,不可以被删除,除非用另外一个表空间代替它。 
SQL> alter talbespace ice4 offline 
alter talbespace ice4 offline 
* 
ERROR 位于第 1 行: 
ORA-00940: 无效的 ALTER 命令 
SQL> alter tablespace ice4 
2 read only; 
alter tablespace ice4 
* 
ERROR 位于第 1 行: 
ORA-03217: 变更 TEMPORARY TABLESPACE 无效的选项 
(7) offline状态:对数据文件改名or搬动数据文件的位置or对数据库进行部分的修复 
(7) offline状态:对数据文件改名or搬动数据文件的位置or对数据库进行部分的修复 
SQL> alter tablespace users offline; 
表空间已更改。 
SQL> alter tablespace users online; 
表空间已更改。 
不可以置为offline状态的表空间包括:system表空间(如果要对系统表空间的文件进行改变则要关闭数据库); 
包括active undo 段的表空间;缺省的临时表空间 
(8) read only 表空间:对表空间只能进行读操作;数据对象可以从表空间删除 
SQL> alter tablespace users read only; 
表空间已更改。 
(9) 删除表空间: 
SQL> create table tt1 
2 (id int) 
3 tablespace ice; 
表已创建。 
SQL> drop tablespace ice1; 
表空间已丢弃。 
SQL> drop tablespace ice2 
2 including contents and datafiles; 
表空间已丢弃。 
(10) resize表空间:自动扩张(autoextend on)、手动(resize) 
3. 管理数据文件 
(1) 移动data files: 
表空