Область команды экспорта базы данных пользователя Oracle (уровень пользователя / схема)? - PullRequest
0 голосов
/ 26 июня 2019

Я совершенно новичок с точки зрения знаний БД Oracle.Попытка понять команду IMPDB и ее область действия.

Проблема: Предположим, что в конкретной БД содержится 500 таблиц, многие из которых (60% - 70% или более) поступают как нулевые записи, когда мы импортируемданные в свежую БД Oracle (получение данных от одного поставщика, у которого есть БД).Сомнение состоит в том, как большинство таблиц могут быть нулевыми записями в БД (почему они были созданы на первом месте?).Кроме того, мы предполагаем, что, возможно, поставщик использует определенного пользователя при создании файлов .DMP, у которых нет доступа к этим таблицам и, следовательно, счетчик 0.Когда мы спросили поставщика, они сказали, что это не так, как работает Oracle, они предоставили пользовательский дамп экспорта и сказали: «Схема - это набор объектов базы данных, принадлежащих конкретному пользователю. Эти объекты включают таблицы, индексы, представления, функции,хранимые процедуры и т.д.Сообщество SO имеет замечательных экспертов по БД Oracle, может кто-нибудь пролить свет на:

  1. В чем может быть проблема?

  2. Является ли нашправильное предположение (то есть, что пользователь не имеет доступа к тем таблицам, которые получили ноль записей)?

  3. Какой правильный путь вперед?

4) Все, что вы хотите добавить.

1 Ответ

1 голос
/ 26 июня 2019

Поставщик верен - утилита, использованная для генерации экспорта, EXPDP (комплимент IMPDP) может создать полный дамп всех объектов базы данных конкретного пользователя. Однако параметры, используемые для генерации экспорта, могут сильно различаться, и экспорт может абсолютно не включать данные таблицы IF команда / параметры EXPDP, используемые для создания экспорта, указываются таким образом. Например, давайте представим, что кто-то хочет экспортировать конкретную схему, используя следующую команду:

expdp [USER]@[DATABASE] schemas=test directory=DATA_PUMP_DIR dumpfile=test.dmp logfile=test.log query=TEST.TABLE:'"WHERE row_date>sysdate"'

Пока генерируется экспорт, все строки в этой конкретной таблице будут оцениваться на основе условия where. Если в строках не указана дата в будущем, ни одна из строк, датированных до и до sysdate, не экспортируется Если подобное условие применяется ко всему экспорту, в файле дампа будут таблицы с 0 строками.

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

Первое, что я бы порекомендовал, это:

  1. Попросите поставщика предоставить количество записей каждой таблицы в этой схеме с их конца для целей проверки. Это скажет вам, если таблицы являются пустыми в базе данных. Если они пусты в базе данных, они будут пустыми в вашем экспорте. Это очень просто и может быть достигнуто с помощью запроса типа select owner, table_name, num_rows, sample_size, last_analyzed from all_tables where owner=[SCHEMA];, при условии, что статистика их таблиц обновлена.

Если это вас беспокоит, вы всегда можете попросить их исключить эти таблицы при экспорте с помощью команды вроде:

expdp [USER]@[DATABASE] schemas=test exclude=TABLE:"IN ('Table1', 'Table2')" directory=DATA_PUMP_DIR dumpfile=test.dmp logfile=test.log

Или просто исключите их во время импорта с помощью команды вроде:

impdp [USER]@[DATABASE] schemas=test exclude=TABLE:"IN ('Table1', 'Table2')" directory=DATA_PUMP_DIR dumpfile=test.dmp logfile=test.log

В любом случае должен работать, но будьте осторожны и убедитесь, что не будет проблем с точки зрения ограничений / дочерних записей. Вы также можете исключить ограничения. Есть много способов обойти это.

Если существуют несоответствия между счетами и импортированными строками , я бы порекомендовал обратиться к поставщику с просьбой указать конкретный файл команды или параметра EXPDP, который использовался для генерации экспорта. Это позволит вам узнать, вызваны ли пустые строки предложением в команде экспорта.

  1. Невозможно узнать, верно ли ваше предположение, не зная больше о базе данных, из которой идет экспорт, или не увидев команды, используемые для генерации экспорта. Я бы попросил продавца проверить количество записей, прежде чем предположить, что это проблема с разрешениями. Пустые таблицы создаются постоянно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...