我们正尝试使用方法 -
从另一个表创建一个表 create table tab1 as select * from tab2;
但是该过程失败并出现错误
ORA-01652:无法在表空间
中将临时段扩展8192
但是,表tab1
仅使用部分数据创建。 tab1和tab2
中的计数不匹配。任何事务都没有填充/更新这两个表中的任何一个。这发生在几张桌子上。
我的知识就此而言,创建表应该创建一个表或根本不创建表。表格不可能部分创建。
专家建议任何见解。
答案 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;
这样,如果第二部分失败,您将不会以部分插入结束。你仍然可以使用该表。