oracle alter语句扩展dbf文件大小

Posted

技术标签:

【中文标题】oracle alter语句扩展dbf文件大小【英文标题】:oracle alter statement to expand dbf file size 【发布时间】:2021-10-12 23:51:22 【问题描述】:

我在对我的 Oracle 数据库运行查询时收到此错误,我认为这表明我需要扩展我的 dbf 文件大小:

ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
01652. 00000 -  "unable to extend temp segment by %s in tablespace %s"
*Cause:    Failed to allocate an extent of the required number of blocks for
           a temporary segment in the tablespace indicated.
*Action:   Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
           files to the tablespace indicated.

基于此,我找到了this SO 答案,建议运行以下内容:

select value from v$parameter where name = 'db_block_size';

返回值8192。如果上面返回“低最大大小”,则相同的 SO 答案建议运行自动扩展。所以我决定尝试这种方法。我首先得到了我的 dbf 文件的位置:

select name from v$datafile;

返回这 6 行:

/opt/oracle/product/11.2.0/xe/dbs/system.dbf
/opt/oracle/product/11.2.0/xe/dbs/sysaux.dbf
/opt/oracle/product/11.2.0/xe/dbs/undotbs1.dbf
/opt/oracle/product/11.2.0/xe/dbs/users.dbf
/opt/oracle/deploy/oradata/my_db_01.dbf
/opt/oracle/deploy/oradata/my_db_02.dbf

所以我尝试运行my_db_01.dbf 的自动扩展:

alter database datafile /opt/oracle/deploy/oradata/my_db_01.dbf autoextend on maxsize unlimited;

但这给了我:

ERROR at line 1:
ORA-02236: invalid file name

当我直接从 v$datafile 查询中提取文件名时,为什么文件名无效

【问题讨论】:

【参考方案1】:

您遇到的错误是TEMP 中的空间不足。如果您正在运行查询,那是 Oracle 用于排序之类的空间。虽然您确实有可能确实想要扩展 TEMP 表空间的大小,但更常见的问题是您正在运行的特定查询存在导致其使用过多数量的错误TEMP 空间。例如,如果您错过了一个连接条件并且您正在创建一个笛卡尔积,那么在问题处添加 TEMP 空格不太可能解决它 - 您需要修复查询。

如果您确定查询编写正确,并且您认为它需要任何TEMP 占用的空间是合理的,您需要查看v$tempfiledba_temp_files 以查看与您的临时表空间关联的文件。

select file_name, 
       tablespace_name, 
       bytes/1024/1024 current_size_gb,
       maxbytes/1024/1024 max_size_gb,
       autoextensible
  from dba_temp_files;

如果TEMP 文件尚未设置为自动扩展,您可以将它们设置为自动扩展(注意file_name 必须用单引号括起来)

alter database tempfile '<<path>>' autoextend on;

【讨论】:

对我来说这个答案的关键部分是 file_name 需要用单引号括起来。但其他信息也很有帮助。谢谢!

以上是关于oracle alter语句扩展dbf文件大小的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库!

Oracle 临时表空间 SQL语句

Oracle 临时表空间 SQL语句

oracle表空间如何自动扩展?

oracle 表空间自动扩展

oracle 表空间自动扩展