Как импортировать определенный диапазон номеров строк таблицы из Oracle data pump?

#oracle

Вопрос:

Я использую impdp Oracle XE 11g, пытаясь импортировать определенный диапазон (в строке) таблицы из файла перекачки данных (*.dmp).

В базовом запросе Oracle мы можем прочитать данные в диапазоне чисел строк (my_start <= ЧИСЛО строк,

 SELECT * from (
  SELECT t.*, ROWNUM r
  from my_table t
) WHERE r >= my_start AND r < my_end
 

с помощью вложенного в него запроса.

Однако при написании запроса в файле impdp я обнаружил, что запрос может содержать только предложение where. Таким образом, мы не можем импортировать определенный диапазон строк данных.

Я хочу задать следующие вопросы.

  1. Есть ли способ использовать вложенное предложение select в запросе impdp?
  2. Если нет, есть ли какой-либо другой способ импортировать определенный диапазон строк данных?

Спасибо, что прочитали мои вопросы.

Комментарии:

1. Использование такого подзапроса действительно имеет смысл только в случае an order by . Вы пытаетесь получить диапазон как с нижней, так и с верхней границами, но даже просто с верхней границей, как в связанном вопросе ( WHERE rownum <= 100 ), вы получите неопределенные строки. Эта версия в некотором роде имеет смысл, если вам все равно, какие 100 строк вы получите. Но при заказе вы, по сути, просите data pump реализовать сортировку всей таблицы в памяти, что кажется неразумным. Почему ты хочешь это сделать? Вы пытаетесь импортировать всю таблицу целиком, но по частям, и если да, то почему? Или что-то еще?

2. @Alexpool В конечном счете, я пытаюсь импортировать таблицу объемом более 100 ГБ из файла базы данных в Oracle XE, ограниченную 11 ГБ. Итак, я решил установить несколько Oracle XEs (контейнеров docker), разделить таблицу на 10 ГБ и импортировать их отдельно. ROWNUM-самый простой критерий разделения, поэтому я его использую. Есть ли лучший способ разделить стол?

Ответ №1:

Насколько я могу судить, вам придется импортировать всю таблицу и удалить то, что вам не нужно.

В качестве альтернативы измените таблицу и добавьте новый столбец, который будет представлять интересующий вас диапазон. Затем, если вы хотите импортировать этот конкретный диапазон, используйте только что добавленный столбец в предложении import data pump QUERY .

Комментарии:

1. Могу ли я изменить таблицу перед импортом всей таблицы? Если да, то как я могу написать запрос impdp?

2. Изменение перед импортом бесполезно. Я подумал об изменении перед экспортом .

3. К сожалению, я не могу получить доступ к исходной базе данных, чтобы снова экспортировать ее. Единственный, который у меня есть, — это файл data pump (*.dmp).

4. Я понимаю… ну, тогда единственный вариант, который я знаю, — это импортировать все и удалить то, что вам не нужно.

5. Данные слишком велики, чтобы сразу импортировать файл в Oracle XE. В любом случае, спасибо, что рассмотрели и ответили на мой вопрос!