Oracle 如何扩展表空间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 如何扩展表空间相关的知识,希望对你有一定的参考价值。
参考技术A 处理方法有两种,一是添加undo
表空间的数据文件,
二是切换undo
tablespace.
这种情况下多用在undo
表空间已经非常大的情况。
1
增加数据文件
sql>
alter
tablespace
undo
add
datafile
'd:\undo02.dbf'
size
100m
reuse;
表空间已更改。
2
切换undo
表空间
1、建立新的表空间undotbs2
sql>
create
undo
tablespace
undotbs2
datafile
'd:\undo03.dbf'
size
100m
reuse;
表空间已创建。
2、切换到新建的undo表空间上来,操作如下
sql>
alter
system
set
undo_tablespace=undotbs2
scope=both;
系统已更改。
3、将原来的undo表空间,置为脱机:
sql>
alter
tablespace
undo
offline;
表空间已更改。
4、删除原来的undo表空间:
sql>
drop
tablespace
undo
including
contents
and
datafiles
cascade
constraints
表空间已删除。
如果只是drop
tablespace
undo
,则只会在删除控制文件里的记录,并不会物理删除文件。
drop
undo表空间的时候必须是在未使用的情况下才能进行。
如果undo表空间正在使用(例如事务失败,但是还没有恢复成功),那么drop表空间命令将失败。在drop表空间的时候可以使用including
contents。
如何在oracle中缩小临时表空间?ORA-01652无法在表空间中扩展temp
查询临时表空间有多大:
SQL> SELECT tablespace_name, file_name, bytes
FROM dba_temp_files WHERE tablespace_name like 'TEMP%';
TABLESPACE_NAME FILE_NAME BYTES
----------------- -------------------------------- --------------
TEMP /the/full/path/to/temp01.dbf 13,917,200,000
为什么临时表空间这么大。您可能已经知道答案了。可能是由于您对一个大型查询使用了错误的排序(我已经做了多次以上)。这可能是由于其他一些特殊情况所致。如果是这种情况,那么您要做的就是缩小临时表空间并继续生活。
但是,如果您不知道该怎么办?在决定缩小之前,您可能需要对大型表空间的原因进行一些调查。如果定期发生这种情况,则您的数据库可能只需要那么多空间。
动态性能视图
V$TEMPSEG_USAGE
在确定原因方面非常有用。
也许您只是不关心原因,而只需要缩小它。这是您上班的第三天。如果数据和临时表空间为13GiB,则数据库中的数据仅为200MiB-只需收缩并继续。如果它再次增长,那么我们将调查原因。同时,该磁盘卷上的空间不足,我只需要退回空间。
让我们来看看缩小它。这将取决于您正在运行的Oracle版本以及如何设置临时表空间。
Oracle会尽力防止您犯任何可怕的错误,因此我们将尝试使用这些命令,如果这些命令不起作用,我们将采用新的方式进行缩减。
首先,让我们尝试缩小数据文件。如果我们能够做到这一点,那么我们将重新获得空间,我们可以担心它为什么会在明天增长。
SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M;
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
根据错误消息,您可能希望以小于文件当前位置的其他大小尝试此操作。我在这方面取得的成功有限。只有当临时表空间位于文件的开头并且小于您指定的大小时,Oracle才会收缩文件。一些旧的Oracle文档(他们已对此进行了纠正)说,您可以发出命令,并且错误消息将告诉您可以缩小到什么大小。在我开始担任DBA时,这还不是真的。您只需要猜测并重新运行该命令很多次,看看它是否有效。
好的。那没用。这个怎么样。
SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;
如果您使用的是11g(Maybee也使用的是10g)就可以了!如果可行,您可能需要返回上一个命令,然后再尝试一些。
但是,如果失败了怎么办。如果临时表空间是安装数据库时设置的默认临时表,那么您可能需要做更多的工作。在这一点上,我通常会重新评估是否真的需要这个空间。毕竟,所有磁盘空间的价格仅为GiB $ X.XX。通常我不想在生产时间内进行这样的更改。这意味着要在凌晨2点工作!(并不是说我真的反对在凌晨2点工作-只是……我也喜欢睡觉。而且我的妻子喜欢在凌晨2点让我在家...不在凌晨4点漫游市区,想记得在哪里我三个小时前停了车,听说过“远程通勤”的事情。
好...回到正题...如果要收缩的临时表空间是您的默认临时表空间,则必须首先创建一个新的临时表空间,将其设置为默认临时表空间,然后删除旧的默认临时表空间。表空间并重新创建它。后记删除创建的第二个临时表。
SQL> CREATE TEMPORARY TABLESPACE temp2
TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
Database altered.
SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
SQL> CREATE TEMPORARY TABLESPACE temp
2 TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3 AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
Database altered.
SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
希望这些对你有所帮助!
以上是关于Oracle 如何扩展表空间的主要内容,如果未能解决你的问题,请参考以下文章