oracle从另一个表创建表创建表;无法扩展临时空间

时间:2018-05-03 12:40:08

标签: sql oracle

我们正尝试使用方法 -

从另一个表创建一个表

create table tab1 as select * from tab2;

但是该过程失败并出现错误

  

ORA-01652:无法在表空间

中将临时段扩展8192

但是,表tab1仅使用部分数据创建。 tab1和tab2中的计数不匹配。任何事务都没有填充/更新这两个表中的任何一个。这发生在几张桌子上。

我的知识就此而言,创建表应该创建一个表或根本不创建表。表格不可能部分创建。

专家建议任何见解。

2 个答案:

答案 0 :(得分:0)

执行以下操作以确定现有表空间的文件名为sysadmin

SELECT * FROM DBA_DATA_FILES;

然后按如下方式扩展数据文件的大小(将文件名替换为上一个查询中的文件名):

ALTER DATABASE DATAFILE 'C:\ORACLEXE\ORADATA\XE\SYSTEM.DBF' RESIZE 4096M;

您可以先尝试以下命令或要求DBA提供权限:

 grant unlimited tablespace to <schema_name>;

答案 1 :(得分:0)

将错误原因放在一边(由Leo中的@ his answer解决):

我在CREATE TABLE ... AS SELECT的交易中找不到任何具体内容。任何CREATE TABLE语句都是DDL操作,而后者通常是非事务性操作。

这只是一种推测,但我会说表创建确实成功了。你给出的指令基本上是二合一的,其中第一个是实际的表创建,它确实有效(并且因为它不是事务性的,所以它不受第二个的影响)而第二个是变体来自select的批量插入(对批次进行隐式提交),在某些时候会中断。

这可能没有回答你的问题,但由于操作显然是两阶段的,如果你需要更多的事务处理方法,你可以将操作分成两个独立的操作:

第一

CREATE TABLE tab1 AS SELECT * FROM tab2 WHERE 1 = 2;

第二

INSERT INTO tab1 SELECT * FROM tab2;

这样,如果第二部分失败,您将不会以部分插入结束。你仍然可以使用该表。