Oracle 表空间
在执行具体的操作之前,由于Oracle不允许删除现有临时表空间,所以在删除现有临时表空间时要终止现有的实时会话。
查询Oracle表空间名称,表空间物理文件路径
- 查询临时表空间:
SQL> select FILE_NAME,TABLESPACE_NAME from dba_temp_files;
- 查询用户表空间:
SQL> SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) || ‘MB‘ total_space FROM dba_data_files;
- 查询所有表空间物理位置:
SQL> select name from v$datafile;
- 查询当前用户的表空间:
SQL> select username,default_tablespace from user_users;
- 查询所有表空间:
SQL> select * from user_tablespaces;
创建表空间
- 创建名为“TEMP_NEW”的临时表空间,大小为500MB,并具有自动扩展和表空间的增长大小不受限制(maxsize unlimited)的功能。
SQL> CREATE TEMPORARY TABLESPACE TEMP_NEW TEMPFILE ‘/DATA/database/ifsprod/temp_01.dbf‘ SIZE 500m autoextend on next 10m maxsize unlimited;
参数说明:
SIZE *[K,M]表空间的初始大小,单位可以是[K,M]
MAXSIZE *[K,M]表空间的最大存储值,maxsize unlimited 是指表空间的大小不受限制。
AUTOEXTEND ON NEXT *[K,M] 设置表空间自动扩展
EXTENT MANAGEMENT LOCAL本地管理表空间。
extent是“区间”的意思,在oracle数据库中:extent management 有两种方式 extent management local(本地管理); extent management dictionary(数据字典管理)默认的是local本地管理表空间有自动分配(AUTOALLOCATE)和统一大小分配(UNIFORM)两种空间分配方式,自动分配方式(AUTOALLOCATE)是由系统来自动决定extents大小,而统一大小分配(UNIFORM)则是由用户指定extents大小。这两种分配方式都提高了空间管理效率。uniform:默认为1M大小,在temp表空间里为默认的,但是不能被应用在undo表空间.
- 创建用户表空间:
SQL> create tablespace <表空间名> datafile ‘<表空间名>.dbf‘ size 500M autoextend on next 5M maxsize unlimited;
更改默认临时表空间
将数据库默认临时表空间更改为新创建的临时表空间,新创建的临时表名称"TEMP_NEW":
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_NEW;
杀死使用旧表空间的所有会话
检索所有使用旧临时表空间的现有会话的“ SID_NUMBER”和“ SERIAL#NUMBER”并将其杀死。
SQL> SELECT b.tablespace,b.segfile#,b.segblk#,b.blocks,a.sid,a.serial#,a.username,a.osuser, a.status FROM v$session a,v$sort_usage b WHERE a.saddr = b.session_addr;
根据查询结果执行:
SQL> alter system kill session ‘SID_NUMBER, SERIAL#NUMBER‘;
例:
SQL> alter system kill session ‘59,57391‘;
删除表空间
- 删除空的表空间,但是不包含物理文件:
SQL> drop tablespace <表空间名称>;
- 删除非空表空间,但是不包含物理文件:
SQL> drop tablespace <表空间名称> including contents;
- 删除空表空间,包含物理文件:
SQL> drop tablespace <表空间名称> including datafiles;
- 删除非空表空间,包含物理文件:
SQL> drop tablespace <表空间名称> including contents and datafiles;
- 如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS:
SQL> drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
通过以上操作内容和数据文件已成功删除。
如果希望继续使用旧的临时表空间名称,请按照上述相同的步骤重新创建具有旧名称的临时表空间。
表空间修改
- 增加用户表空间大小:
SQL> ALTER TABLESPACE caiyl_space ADD DATAFILE ‘D:\Oracle\app\caiyl\oradata\orcl\caiyl_space.dbf‘ size 4096M;
- 增加临时表空间大小:
SQL> ALTER DATABASE TEMPFILE ‘D:\Oracle\app\caiyl\oradata\orcl\caiyl_temp.dbf‘ RESIZE 8192M;
- 修改用户默认表空间:
SQL> alter user <用户名> default tablespace <新表空间名>;
常见问题
- 把数据导入不同于原系统的表空间,在导入之后却往往发现,数据被导入了原表空间。
SQL> grant connect, resource,dba to <用户名>;
- 回收用户unlimited,tablespace权限,这样就可以导入到用户缺省表空间:
SQL> revoke unlimited tablespace from <用户名>;
SQL> alter user <用户名> quota 0 on <表空间名>;
SQL> alter user <用户名> quota unlimited on <表空间名>;