создание таблицы оракулом из другой таблицы, созданной частично; невозможно продлить временное пространство - PullRequest
0 голосов
/ 03 мая 2018

Мы пытаемся создать таблицу из другой таблицы с помощью метода -

create table tab1 as select * from tab2;

Но процесс завершился ошибкой

ORA-01652: невозможно увеличить временной сегмент на 8192 в табличном пространстве

Однако таблица tab1 создается только с частичными данными. В tab1 и tab2 имеется несоответствие количества. Ни одна из этих двух таблиц не заполняется / не обновляется ни одной транзакцией. Это случилось с парой столов.

Что мои знания говорят об этом, создание таблицы должно создавать таблицу вообще или не создавать вообще. Нет возможности создания таблицы частично.

Любое понимание предлагается от экспертов.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Откладывая причину ошибки (адрес @ Лев в его ответ ):

Я не нашел ничего конкретного по транзакциям для CREATE TABLE ... AS SELECT. Любой оператор CREATE TABLE является операцией DDL, которая, в свою очередь, обычно является нетранзакционной операцией.

Это всего лишь предположение, но я бы сказал, что создание таблицы прошло успешно. Инструкция, которую вы дали, в основном, два в одном, где первая - это фактическое создание таблицы, которая работает (и поскольку она не транзакционная, на нее не может повлиять вторая), а вторая - вариант массовая вставка из select (с неявными коммитами для пакетов), которая прерывается в какой-то момент.

Вероятно, это не ответ на ваш вопрос, но, поскольку в любом случае операция, по-видимому, является двухфазной, если вам нужен более транзакционный подход, вам будет полезно разделить операцию на два отдельных:

первый:

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

второй:

INSERT INTO tab1 SELECT * FROM tab2;

Таким образом, если вторая часть выйдет из строя, вы не получите частичную вставку. Стол все еще будет на месте.

0 голосов
/ 03 мая 2018

Выполните следующее, чтобы определить имя файла для существующего табличного пространства как sysadmin

SELECT * FROM DBA_DATA_FILES;

Затем увеличьте размер файла данных следующим образом (замените имя файла на имя из предыдущего запроса):

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

Вы можете сначала попробовать команду ниже или попросить администратора базы данных дать привилегию:

 grant unlimited tablespace to <schema_name>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...