2015-07-23 3 views
0

Я использую Oracle XE 10.2. Я пытаюсь скопировать 2,653,347 строки из удаленной базы данных с утверждениемКопирование строк из удаленной базы данных oracle

INSERT INTO AUTOSCOPIA 
(field1,field2...field47) 
SELECT * FROM [email protected]; 

Я пытаюсь скопировать все 47 столбцов для всех 2 миллиона строк на местном уровне. После запуска в течение нескольких минут, однако, я получаю ошибку:

ORA- 12952 : The request exceeds the maximum allowed database size of 4 GB data. 

Как я могу избежать этой ошибки?

Подробности: у меня есть 3 индекса в моей локальной таблице (там, где я хочу вставить удаленную информацию).

+2

Вы не говорите нам, какую версию Oracle или какое издание вы используете. Ошибка подразумевает, что вы используете экспресс-версию Oracle 10.2, поскольку она имеет ограничение 4 ГБ. Если размер таблицы превышает 4 ГБ, вы не можете сохранить ее в своей базе данных. Вам нужно будет установить другую версию и/или другую версию. Вы можете установить экспресс-версию 11.2 с пределом 11 ГБ. Я не знаю, насколько велика ваша таблица (и индексы), поэтому я не знаю, достаточно ли этого предела. –

+0

Привет, Джастин, оракул экспресс 11g, и я не знаю, если размер больше 4 ГБ. –

+0

Это не имеет смысла. Если вы использовали экспресс-версию 11.2, ошибка возникнет, если размер вашей базы данных достигнет 11 ГБ. Сообщение об ошибке сильно означает, что вы используете экспресс-версию 10.2. Вы действительно уверены, что используете экспресс-версию 11.2? Что возвращает запрос против 'v $ version'? –

ответ

1

Вы используете экспресс-версию Oracle 10.2, которая включает в себя ряд ограничений. Тот, с которым вы работаете, состоит в том, что вы ограничены 4 ГБ места для своих таблиц и ваших индексов.

  • Насколько велика таблица в ГБ? Если таблица имеет 2.6 миллиона строк, если каждая строка больше чем ~ 1575 байт, то то, что вы хотите сделать, невозможно. Вам придется либо ограничить объем данных, которые вы копируете (не получая каждую строку, не получая каждый столбец, или не получая все данные в некоторых столбцах), либо вам нужно будет установить версию и версию что позволяет хранить столько данных. Экспресс-версия 11.2 позволяет хранить 11 ГБ данных и бесплатно, как и экспресс-версия 10.2, так что это будет самый простой вариант. Вы можете увидеть, сколько места таблицы потребляет в удаленной базе данных, запрашивая all_segments столбец в удаленном database--, которые должны приближать объем пространства, вам нужно в базе данных

Обратите внимание, что это игнорирует пространство используется из-линии сегментов больших объектов, а также индексы

SELECT sum(bytes)/1024/1024/1024 size_in_gb 
    FROM [email protected] 
WHERE owner = <<owner of table in remote database>> 
    AND segment_name = 'AUTOS' 
  • Если таблица меньше 4 Гбайт, но размер таблицы + индексов больше, чем 4 ГБ, то можно скопировать данные локально, но вам нужно будет удалить один или несколько индексов, которые вы создали в локальной таблице, прежде чем копировать данные ove р. Это, конечно, может привести к проблемам с производительностью, но вы, по крайней мере, сможете получить данные в своей локальной системе.
  • Если вы (или кто-либо еще) создали в этой базе таблицы какие-либо таблицы, эти таблицы также учитываются в вашем пределе базы данных 4 ГБ. Удаление их освободит пространство, которое вы можете использовать для этой таблицы.
  • Предполагая, что вы не будете изменять данные в этой таблице после их локального копирования, вы можете использовать PCTFREE из 0 при определении таблицы. Это позволит свести к минимуму объем пространства, зарезервированного в каждом блоке для последующих обновлений.
Смежные вопросы