Создать копию схемы oracle
Чтобы после сбоя в системе (например, отказа жесткого диска) восстановить базу нужно иметь под рукой резервную копию.
(Нет резервной копии — прощай работа ))
Чем свежее копия, тем лучше.
Более того: резервная копия базы должна быть полной и непротиворечивой.
С полнотой все просто. В резервной копии должны быть файлы:
- файлы данных (data files)
- управляющий файл (controlfile)
- архивные журнальные файлы (archived redo logs)
- файл параметров (spfile)
- файл паролей.
А с непротиворечивостью есть некоторые заморочки, поскольку просто так скопировать файлы нельзя.
Можно остановить базу, а затем скопировать файлы с помощью команд операционной системы. Такая резервная копия называется холодным бэкапом (cold backup).
Для баз, работающих в режиме NOARCHIVElOG, создание холодного бэкапа — это единственный способ получить резервную копию.
Если же база находится в режиме ARCHIVELOG, то кроме холодного бэкапа есть еще два варианта для создания горячих бэкапов (hot backup):
- Использовать команды BEGIN BACKUP и END BACKUP и команды операционной системы (так называемые user-managed backups).
- Использовать утилиту Recovery Manager (RMAN).
Второй вариант является более предпочтительным, так как RMAN кроме копий файлов (Image copy) может создавать резервные наборы или бэкапсеты (Backup set — группа из нескольких файлов базы данных). Бэкапсеты удобны для записи на ленточные накопители.
RMAN также позволяет делать инкрементальные бэкапы, то есть создавать не полную копию БД, а сохранять только изменения с момента создания предыдущего бэкапа. В отличие от полного бэкапа (Level 0), который хранит все блоки БД, инкрементальный бэкап содержит только блоки, которые были изменены с момента создания бэкапа того же уровня или более низкого.
Представленный на рисунке вариант использования инкрементальных бэкапов предполагает:
- Создание полного бэкапа уровня 0 по воскресеньям.
- Ежедневно создаются инкрементальные бэкапы уровня 2.
- В среду создается бэкап уровня 1, который включает все блоки, которые были изменены с момента создания резервной копии уровня 0.
Интересная фишка: начиная с версии Oracle 10g в RMAN появилась возможность после создания инкрементального бэкапа применить его к ранее созданному бэкапу. В результате время на создание бэкапа остается небольшим, а полная копия базы уже не требует длительного применения архивных журнальных файлов.
Упомяну о некоторых полезных функциях RMAN:
- информацию о резервных копиях может хранится как в управляющем файле так и во внешней базе данных (Recovery Catalog)
- Recovery Manager позволяет выполнять компрессию резервных копий и взаимодействовать через дополнительные библиотеки с ленточными носителями
- командой DUPLICATE можно создать копию базы как напрямую из работающей базы данных, так и из полного бэкапа на диске
- с помощью Recovery Manager можно проверить базу на наличие поврежденных (corrupted) блоков.
Физические бэкапы удобно использовать при повреждении отдельных блоков в файлах данных. С помощью RMAN из бэкапа можно легко восстановить отдельный файл базы в случае, если он имеет повреждения.
Backup также полезен для создания клонов основной базы для целей тестирования и разработки.
В общем, система резервного копирования должна быть настроена для любой промышленной базы данных. Если не позаботиться заранее, то последствия потери данных могут быть очень серьезными. И обязательно: протестируйте её!
Сергей Греховодов,
автор курсов по обучению OracleПохожие статьи:
Умеете делать резервную копию оракловой базы? Вопрос далеко-далеко не праздный (если вы уже знаете, как делать копию, то, наверное, догадываетесь, о чём пойдёт речь, правильно — о времени). Тема резервного копирования для администраторов оракла — одна из ключевых.
Решил публично ответить одному из подписчиков. Дело в следующем. У меня на сайте есть форма, через которую подписчики могут задавать вопросы, но форма анонимная и, даже если захочу, приватно ответить не смогу.
Если нужно перенести объекты схемы из одной базы в другую, то проще всего это сделать с помощью технологии Oracle Data Pump. Прежде чем вникать в детали работы с Data Pump, давайте уточним: у нас есть физические резервные копии и логические дампы.
Для баз, работающих в режиме NOARCHIVElOG, создание холодного бэкапа — это единственный способ получить резервную копию.
Странно а как же импорт - экспорт?
2. во всех пунктах подписки примеры какие то неживые.
нет самого главного механики как это делается, есть только общие фразы.
почему не расмотреть при отключенном архив логе imp system/* full=yes log=imp%date.log ?Что копирует структуру и данные, но что, если мне просто нужна структура?
Просто используйте предложение where, которое не выбирает никакие строки:
копировать без табличных данных
Параметр REMAP_TABLE
Параметр REMAP_TABLE позволяет переименовывать таблицу при выполнении операции импорта с сипользованием метода переноса табличных пространств.
В этом примере параметр REMAP_TABLE указывает, что при выполнении операции импорта имя таблицы hr.employees должно быть изменено на hr.emp
Ограничения
Следующие вещи не будут скопированы в новую таблицу:
- последовательности
- триггеры
- индексы
- некоторые ограничения не могут быть скопированы
- материализованные журналы просмотра
Это также не обрабатывает разделы
Это отличный чистый ответ. Просто хочу напомнить, что это не будет включать никаких ограничений .. у новой таблицы даже не будет первичного ключа.
И у новой таблицы не будет никаких индексов - не попадитесь, пытаясь сделать большой запрос к новой таблице :-)
Просто дополнение - оно будет содержать некоторые ограничения - т.е. любые ограничения NOT NULL будут скопированы.
Чтобы избежать повторения снова и снова и ничего не вставлять на основе условия, где 1 = 2
Ты можешь сделать это Create table New_table as select * from Old_table where 1=2 ; но будьте осторожны Созданная вами таблица не имеет индекса, PK и т. Д., Как old_table.
Просто напишите такой запрос:
Где new_table - это имя новой таблицы, которую вы хотите создать, а old_table - это имя существующей таблицы, структуру которой вы хотите скопировать, при этом будет скопирована только структура.
Создайте новую пустую таблицу, используя схему другой. Просто добавьте предложение WHERE, которое заставляет запрос не возвращать данные:
Если нужно создать таблицу (с пустой структурой) только для ОБМЕНА РАЗДЕЛОМ , лучше всего использовать предложение «..FOR EXCHANGE ..». Однако он доступен только начиная с версии Oracle 12.2 и выше.
Это беспрепятственно адресует «ORA-14097» во время «раздела обмена», если структуры таблиц точно не копируются при нормальной работе CTAS. Я видел, как Oracle пропустил некоторые определения столбцов «DEFAULT» и «HIDDEN» из исходной таблицы.
ORA-14097: несоответствие типа или размера столбца в ALTER TABLE EXCHANGE PARTITION
Вы также можете сделать
Затем обрежьте таблицу abc_new . Надеюсь, этого будет достаточно.
Конечно, если у вас много данных в исходной таблице, это может быть действительно очень плохой идеей. ;)
Используя pl / sql Developer, вы можете щелкнуть правой кнопкой мыши по table_name либо в рабочей области sql, либо в проводнике объектов, затем щелкнуть «view» и затем щелкнуть «view sql», который генерирует sql-скрипт для создания таблицы со всеми ограничениями. , индексы, разделы и т. д.
Затем вы запускаете скрипт, используя new_table_name
Учетные записи SYS и SYSTEM
аждая база Oracle с момента своего создания содержит две схемы (следует отметить, что термины «учетная запись», «схема» и «пользователь» обозначают в Oracle одно и то же) SYS и SYSTEM. Схема SYS содержит все системные объекты внутренние таблицы базы данных, пакеты, процедуры. Кроме того, пользователь SYS является владельцем словаря данных. Словарь данных Oracle это совокупность таблиц и представлений, позволяющих получить любую информацию о структуре базы данных, о ее настройках и состоянии при помощи стандартных SQL-запросов. Учетная запись SYS является также учетной записью администратора базы данных с неограниченными полномочиями. Учетная запись SYSTEM предоставляет доступ ко всем объектам базы и наделена ролью DBA. При работе с учетными записями SYS и SYSTEM необходимо соблюдать ряд правил:
- разработка в базе данных не должна вестись от имени пользователей SYS и SYSTEM;
- нельзя удалять или изменять системные объекты, размещенные в этих схемах, подобные действия могут привести к непредсказуемым последствиям;
- у учетных записей SYS и SYSTEM должны быть заданы сложны устойчивые к подбору пароли длиной не менее 6-8 символов. В случае необходимости можно вообще запретить регистрацию пользователей под учетными записями SYS и SYSTEM.
Ограничения
Следующие вещи не будут скопированы в новую таблицу:
- последовательности
- триггеры
- индексы
- некоторые ограничения не могут быть скопированы
- материализованные журналы просмотра
Это также не обрабатывает разделы
Это отличный чистый ответ. Просто хочу напомнить, что это не будет включать никаких ограничений .. у новой таблицы даже не будет первичного ключа.
И у новой таблицы не будет никаких индексов - не попадитесь, пытаясь сделать большой запрос к новой таблице :-)
Просто дополнение - оно будет содержать некоторые ограничения - т.е. любые ограничения NOT NULL будут скопированы.
Чтобы избежать повторения снова и снова и ничего не вставлять на основе условия, где 1 = 2
Ты можешь сделать это Create table New_table as select * from Old_table where 1=2 ; но будьте осторожны Созданная вами таблица не имеет индекса, PK и т. Д., Как old_table.
Просто напишите такой запрос:
Где new_table - это имя новой таблицы, которую вы хотите создать, а old_table - это имя существующей таблицы, структуру которой вы хотите скопировать, при этом будет скопирована только структура.
Создайте новую пустую таблицу, используя схему другой. Просто добавьте предложение WHERE, которое заставляет запрос не возвращать данные:
Если нужно создать таблицу (с пустой структурой) только для ОБМЕНА РАЗДЕЛОМ , лучше всего использовать предложение «..FOR EXCHANGE ..». Однако он доступен только начиная с версии Oracle 12.2 и выше.
Это беспрепятственно адресует «ORA-14097» во время «раздела обмена», если структуры таблиц точно не копируются при нормальной работе CTAS. Я видел, как Oracle пропустил некоторые определения столбцов «DEFAULT» и «HIDDEN» из исходной таблицы.
ORA-14097: несоответствие типа или размера столбца в ALTER TABLE EXCHANGE PARTITION
Вы также можете сделать
Затем обрежьте таблицу abc_new . Надеюсь, этого будет достаточно.
Конечно, если у вас много данных в исходной таблице, это может быть действительно очень плохой идеей. ;)
Используя pl / sql Developer, вы можете щелкнуть правой кнопкой мыши по table_name либо в рабочей области sql, либо в проводнике объектов, затем щелкнуть «view» и затем щелкнуть «view sql», который генерирует sql-скрипт для создания таблицы со всеми ограничениями. , индексы, разделы и т. д.
Затем вы запускаете скрипт, используя new_table_name
Параметры TRANSFORM
Предположим, что требуется импортировать таблицу из другой схемиы или даже другой азы данных и не импортироват при этом другие атрибуты хранения объектов, т.е. необходимо просто перенести содержациеся в таблице данные. Параметр TRASNSFORM позволяет указать утилите Data Pump Import не импортировать оперделенные атрибуты хранения и атрибуты других видов. За счет применения параметра TRANSFORM можно исключать из таблицы или индекса конструкции STORAGE и TABLESPACE или только конструкции STORAGE. При выполнении импорта с помощью Data Pump Oracle создает объекты с использованием DDL-операторов, которые находит в экспортных файлах дампа. Параметр TRANSFORM, по сути, указывает утилите Data Pump Import изменять приводящие к созданию объектов операторы DDL оперделенным образом.
В целом синтаксис параметра TRANSFORM выглядит так:
Ниже приведено краткое описание того, что собой представляет кадый элемент.
1) Название_трансовармации. Существуют всего четыре опции, которые могут указываться на месте этого элемента. Эти опции позволяют, соответственно, изменять четыре основных вида характеристик объекта.
- SEGMENT ATTRIBUTES. Эта опция позволяет влиять на атриуты сегмента, в число которых вхдят физические атрибуты, атрибуты хранения, табличные пространства и журанлы. Принуждать Data Pump Import включать все эти атрибтуы можно, указав на месте название_трансформации этой опции со значением Y (SEGMENT_ATTRIBUTES=Y), которое является для этого параметра значением по умолчанию. В таком случае Data Pump Import будет включать все четыре атрибута сегмента вместе с их операторами DDL.
- STORAGE. За счет указания на месте название_трансформации опции STORAGE со значением Y (STORAGE=Y), представляющее собой значение по умолчанию, можно получать лишь атрибуты хранения тех объектов, которые являются частью задания Data Pump Import.
- OID. В случае указания на месте название_трансформации опции OID со значением Y (OID=Y), которое является для нее значением по умолчанию, объектым таблицам во время импорта будет приваиваться новй OID.
- PCTSPACE. За счет указания на месте название_трансформации опции PCTSPACE с положительным числом в качестве значения можно увеличивать выделяемый под объекты и файлы данных объем пространства на соответствующее количество процентов.
2) Значение. На месте элемента значение в параметре TRANSFORM может указываться либо значение Y (да), либо значение N (нет). Как упоминалось выше, для первых трех опций, которые могут указываться на месте название_трансформации, по умолчанию устанавливается занчение Y. Это означает, что по умолчанию Data Pump предусмативает выполнение импорта как атрибутов сегмента, так и атрибутов хранения объекта. В качестве альтернативного варианта, для этих опций можно устанавивать значение N и тем самым указывать Data Pump не импортировать исходные атрибуты сегмента и/или хранения. Что касается опции PCTSPACE, то для нее на месте элемета занчение можнет задваться только какое-то число.
3) Типобъекта. На месте элемета типобъекта можно указывать утилите Data Pump Import, объекты какого типа необходимо трансформировать. Это могут быть таблицы, индексы, табличные пространсва, типы, кластеры, граничения и прочие обхекты, в зависимости от опций, указываемых на месте название_транформации. В случае не указания типа подлежащих транформаци обхектов при использовании опции SEGMENT_ATTRIBUTES и STORAGE, эти опции будут применяться ко всем таблицам и индексам, которые являются частью операции импорта.
Ниже приведен пример применения параметра TRANSFORM:
В этом примере для SEGMENT_ATTRIBUTES установлено занчение N, а в качестве типа объекта указана таблица. В такой спецификации параметр TRANSFROM указывает утилите Data Pump Import не импортировать существующие атрибуты хранения ни для каких таблиц.
ШАГ 1:
query выше создает дубликат таблицы (также с содержимым).
Чтобы получить структуру, удалите содержимое таблицы с помощью.
ШАГ 2:
Это даже менее эффективно, чем версия truncate . Помимо выделения экстентов для всех данных, вы не освобождаете их путем удаления, поэтому вы потенциально тратите пространство, если таблица не вырастет до старого размера. И вы генерируете отмену / повтор как при вставке, так и при удалении. Ответ Джима очень просто избегает всего этого.
Я использовал метод, который вы часто принимали, но, как кто-то заметил, он не дублирует ограничения (за исключением NOT NULL, я думаю).
Более продвинутый метод, если вы хотите продублировать полную структуру:
Это даст вам полный текст оператора создания, который вы можете изменить по своему желанию для создания новой таблицы. Конечно, вам придется изменить имена таблицы и все ограничения.
(Вы также можете сделать это в более старых версиях, используя EXP / IMP, но теперь это намного проще.)
Отредактировано для добавления Если таблица, которую вы ищете, находится в другой схеме:
предыдущей части мы рассмотрели установку Oracle 10g XE, а теперь речь пойдет о резервном копировании и восстановлении, основных учетных записях и ролях базы.
Резервное копирование и восстановление
Операции резервного копирования и восстановления в Oracle можно разделить на три вида:
- логическое резервное копирование производится при помощи входящей в состав Oracle утилиты exp, которая позволяет экспортировать всю базу, заданные схемы или таблицы. В случае экспорта всей базы выполняется так называемый полный экспорт (при этом экспортируются все таблицы базы данных) или инкрементный (выгружаются таблицы, изменившиеся с момента последнего экспорта). Для Oracle 10g XE, в котором объем базы не превышает 4 Гбайт, можно пользоваться полным экспортом;
- физическое резервное копирование выполняется после остановки базы и предполагает копирование файлов данных, управляющих файлов, оперативных журналов повтора и файла init.ora с настройками базы;
- оперативное резервное копирование осуществляется в базе, функционирующей в режиме ARCHIVELOG. В этом режиме производится архивация оперативных журналов повтора и ведется журнал всех транзакций.
Для небольших учебных баз данных наиболее простым и надежным является полное логическое резервное копирование и физическое резервное копирование. Логическое резервное копирование выполняется при помощи утилиты exp.exe, размещенной в папке oraclexe\app\oracle\product\10.2.0\server\BIN\. Утилита является консольным приложением, получающим параметры через командную строку. Поскольку параметров обычно бывает много (5-10 штук), удобно создать профиль с параметрами и затем передать его утилите экспорта при помощи параметра parfile.
Рассмотрим пример типовых профилей. Для начала решим наиболее распространенную задачу создание резервной копии одной или нескольких схем. В качестве примера рассмотрим копирование схемы SCOTT с учебным примером. Для этого создадим текстовый файл exp_scott.prm, содержащий следующие строки:
USERID = имя/пароль
LOG = ora10scott.log
FILE = ora10scott.dmp
OWNER= SCOTT
Затем произведем экспорт, выполнив команду exp parfile=exp_scatt.prm, в результате чего будет создан файл ora10scott.dmp, содержащий резервную копию схемы SCOTT. Этот файл имеет бинарный формат и очень хорошо сжимается любым архиватором, поэтому для автоматизации процедуры резервного копирования удобно создать BAT-файл, содержащий команду экспорта и вызов архиватора для сжатия полученного дампа.
В нашем случае параметр USERID содержит имя и пароль для доступа к базе данных, параметр LOG задает имя файла, в который записывается протокол работы, параметр FILE задает имя файла резервной копии, OWNER одна или несколько экспортируемых схем (если указывается несколько схем, то они перечисляются через запятую).
Для выполнения полного экспорта профиль немного изменится:
USERID = имя/пароль
LOG = ora10full.log
FILE = ora10 full.dmp
FULL = Y
del ora10scott.dmp
del ora10scott.log
exp parfile=exp_scott_d.prm
"C:\Program Files\WinRAR\WinRAR.exe" a -agDDMMYYYY -m5 ora10g- ora10scott.dmp ora10scott.log
del ora10scott.dmp
del ora10scott.log
В данном случае параметры экспорта содержатся в файле exp_scott_d.prm. После выполнения резервного копирования производится архивация дампа и протокола экспорта, причем в имени архива содержится дата его создания. Размер архива определяется количеством объектов и объемом данных в таблицах; для учебной схемы SCOTT-архив с резервной копией имеет размер 2 Кбайт.
Логический импорт является зеркальной операцией по отношению к экспорту и выполняется при помощи утилиты IMP. В ходе импорта необязательно импортировать всю имеющуюся в дампе информацию можно произвести импорт заданных схем или таблиц. Параметры утилиты IMP удобно размещать в профилях, например для импорта схемы SCOTT можно применить профиль следующего вида:
USERID = scott/tiger
LOG = ora10scottimp.log
FILE = ora10scott.dmp
ROWS = Y
GRANTS = Y
INDEXES = Y
FROMUSER= SCOTT
TOUSER= SCOTT
Параметр FROMUSER указывает, из каких учетных записей в дампе берется информация, а TOUSER в какие учетные записи она импортируется. Это очень удобная возможность утилиты импорта, так как она позволяет импортировать данные одной схемы в другую.
Параметры ROWS (строки таблиц), GRANTS (полномочия на объекты), INDEXES (индексы) указывают, какие типы объектов импортируются.
Рассмотрим несколько типичных ситуаций, встречающихся на практике:
- необходимо импортировать таблицы, но не требуется загружать в них данные в этом случае следует задать параметр ROWS=N;
- необходимо импортировать объекты учетной записи SCOTT в учетную запись SCOTT1. В этом случае следует задать параметры FROMUSER=SCOTT и TOUSER= SCOTT1;
Перед импортом необходимо удалить все объекты из схемы, иначе в процессе импорта будут выдаваться ошибки IMP-00015 для каждой импортируемой таблицы (импорт данных в этом случае не производится). Если по каким-либо причинам необходимо загрузить данные в существующую таблицу, то можно применить параметр IGNORE=Y, что приведет к игнорированию ошибок при создании объектов и к продолжению импорта данных. Однако в случае применения параметра IGNORE=Y необходимо учитывать, что в таблицах без первичного ключа может возникнуть удвоение записей (так как каждая операция импорта загружает новые данные, а старые при этом не уничтожаются).
У IMP есть одна интересная функция вместо выполнения команд в базе данных эта утилита выводит их в протокол, генерируя тем самым скрипты, содержащие DML-операторы. Для включения этой функции необходимо указать параметр SHOW=Y.
Работа с базой данных: первые шаги
так, мы рассмотрели основные вопросы, связанные с резервным копированием и восстановлением. Теперь перейдем непосредственно к изучению возможностей Oracle. Начнем с языка запросов Oracle SQL. Язык запросов содержит операторы двух типов:
- DML язык манипулирования данными (команды SELECT, INSERT, UPDATE и DELETE);
- DDL язык определения данных. Позволяет создавать, изменять и удалять объекты, изменять настройки базы данных.
В некоторых классификациях операторов SQL выделяют также подмножество операторов DCL это категория SQL-операторов, управляющих доступом к данным и базе данных. В частности, к этой категории относятся операторы GRANT (выдача привилегий на некоторый объект) и REVOKE (аннулирование ранее выданных привилегий).
Начнем рассмотрение Oracle SQL с оператора SELECT, предназначенного для извлечения данных из базы. Базовый синтаксис оператора SELECT имеет вид:
SELECT список столбцов через запятую
FROM список таблиц через запятую
[WHERE условия]
[HAVING условия]
[GROUP BY группировка]
[ORDER BY сортировка]
Вместо списка столбцов допускается использование символа «*», который рассматривается как «все столбцы всех перечисленных в FROM таблиц».
Рассмотрим простейший запрос
SELECT *
FROM SCOTT.EMP
Данный запрос извлекает всю информацию из таблицы EMP. При использовании «*» следует учитывать ряд факторов:
- порядок следования столбцов при применении «*» не гарантируется. Следовательно, если использование конкретного списка столбцов по какой-либо причине недопустимо, то необходимо обращаться к возвращаемым столбцам по именам, а не по индексу. Это распространенная ошибка, поскольку, как правило, столбцы возвращаются в порядке их следования в таблице и любая реорганизация таблицы может привести к возникновению трудно диагностируемых ошибок;
- во многих случаях клиентское приложение применяет только часть имеющихся в таблице столбцов. Если вместо перечисления необходимых столбцов указать «*», то на клиентскую сторону будут передаваться неиспользуемые данные, что приведет к избыточной нагрузке на сеть и, как следствие, к снижению производительности;
- в случае извлечения информации из двух и более таблиц может оказаться, что в таблицах существуют столбцы с одинаковыми именами. В этом случае возникнет ошибка «ORA-00918 column ambiguously defined» и запрос не выполнится. Это один из подводных камней, с которыми сталкиваются начинающие разработчики, запрос может работать во время отладки, а затем через некоторое время производится модификация базы, что приводит к появлению в применяемых запросом таблицах столбцов с одинаковыми именами, в результате чего запрос перестает работать.
В некоторых случаях может потребоваться вернуть при помощи запроса результат работы некоторой хранимой функции или результат вычисления. В этом случае можно использовать специальную системную таблицу DUAL, доступную всем пользователям и всегда содержащую единственный столбец с именем DUMMY и типом VARCHAR2(1) и единственную строку. Пример запроса, производящего вычисления и применяющего таблицу DUAL:
SELECT 4 + 5*20
FROM DUAL
В качестве другого примера с использованием таблицы DUAL можно рассмотреть вызов функции SYSDATE, возвращающей текущую дату:
SELECT SYSDATE
FROM DUAL
В состав технологии Data Pump входят утилиты: Data Pump Export (expdp) и Data Pump Import (impdp).
Data Pump Export – выгружает данные в файлы операционной системы, называемые файлами дампа (dumps files), в специальном формате, который может понимать только утилита Data Pump Import.
Получить справку по утилитам можно выполнив команды:
Если необходимо выполнить экспорт схемы или ее объектов, воспользуйтесь правами данной схемы. Использовать полномочия учетных записей sys и system не рекомендуется (по той причине, что для импорта могут потребоваться права sys и system соотвестственно).
Файл параметров экспорта схемы.
JOB_NAME - имя задания, чтобы при необходимости задание можно было бы идентифицировать по имени.
DUMPFILE - каталог для дампа LOGFILE - каталог для логов
dplogs - ссылка в базе данных на каталог в котором должны будут сохраниться логи результата выполнения экспорта схемы базы данных.
dpdumps - ссылка в базе данных на каталог в котором должны будут сохраниться файл дампа базы данных.
dplogs и dpdumps должны ссылаться на реальные каталоги операционной системы с достаточным набором прав на запись.
Создание ссылки в базе данных на катлоги операционной системы
Посмотреть уже имеющиеся каталоги для datapump:
Мне не нравится каталог по умолчанию. Предпочитаю его удалить
Делегирую права на запись в данную директорию пользователю scott
Если необходимо предоставить возможность экспорта данных в указанные каталоги для любых схем:
Экспорт схемы с использованием файла параметров:
В некоторых случаях необходимо явно указать SID базы данных.
Экспорт можно выполнить одной командой без использования файла параметров:
Технология Data Pump состоит из трех главных компонентов:
- Пакет DBMS_DATAPUMP – это главный механизм для осуществления загрузки и выгрузки метаданных словаря данных. В пакете DBMS_DATAPUMP содержится основополагающие элементы технологии Data Pump в виде процедур, которые в действиельности приводят в действие задания по загрузке и выгрузке данных. Содержимое этого пакета отвечает за работу как утилиты Data Pump export, так и утилиты Data Pump Import.
- Пакет DBMS_METADATA – для извлечения и изменения метаданных Oracle.
- Клиенты с интерфейсом командной строки – impdbp и expdp
Режимы утилиты Data Pump Export
Data Pump Export поддерживает несколько режимов для выполнения заданий.
- Режим экспорта всей базы данных. Позволяет выполнять экспорт всей базы данных за один сеанс экспорта с помощью параметра FULL. Для использования этого режима, необходимы привилегии EXPORT_FULL_DATABASE.
- Режим схем. Позволяет выполнять экспорт данных и/или объектов только конкретного пользователя с помощью параметра SCHEMAS.
- Режим табличных пространств. Позволяет выполнять экспорт всех таблиц, которые содержатся в одном или нескольких табливчных пространствах, с помощью параметра TABLESPACES или только метаданных тех объектов, которые содержатся в одном или нескольких табличных пространствах, с помощью параметра TRANSPORT_TABLESPACES. Выполнять экспорт табличных пространств между базами данных можно, чначала выполнив экспорт метаданных, затем скопировав файлы табличного пространства на целевой сервер, а потом импортировав метаданные в целевую базу данных.
- Режим таблиц. Позволяет выполнять экспорт только одной или нескольких конкретных таблиц с помощью параметра TABLES.
По умолчанию для выполнения заданий Data Pump Export и Data Pump Import используется режим схем.
Параметры фильтрации экспортируемых данных.
Параметр CONTENT - позволяет выполнять фильтрацию тех данных, которые должны помещаться в файл дампа при экспорте. Он может принимать следующие значения:
- ALL – указывает, что требуется экспортировать как данные таблиц, так и определения этих таблиц и других объектов (метаданных);
- DATA_ONLY – указывает, что требуется экспортировать только строки таблиц.
- METADATA_ONLY – указывает, что требуется экспортировать только метаданные.
Пример:
Парамтеры ECLUDE и INCLUDE
Параметры EXCLUDE и INCLUDE – это два взаимоисключающих параметра, которые можно применять для выполнения так называемой фильтрации метаданных (metadata filtering). Фильтрация метаданных позволяет выборочно исплючать или наоборот включать определенные типы объектов во время выполнения задания Data Pump Export или Data Pump Import. В преджней утилите экспорта для указания того, требуется ли экспортировать такие объекты, применялись параметры CONSTRAINTS, GRANTS и INDEXES. За счет использования параметров EXCLUDE и INCLUDE теперь стало можно включать и исключать объекты и многих других видов помимо тех четырех, фильтарцию которых можно было осуществлять ранее. Например, если необходимо сделать так, тобы во время экспорта не экспортировались никакие пакеты, такое поведение задается с помощью параметра EXCLUDE.
Проще говоря, параметр EXCLUDE помогает пропускать определенные типы объектво базы данных во время операции экспорта или импорта, а параметр INCLUDE наоборот – включать в эти операции только определенный набор объектов. Ниже показано, как в общем случае выглядит синтаксис этих параметров:
Параметры EXCLUDE и INCLUDE являются взаимоисключащими. Поэтому во время выполенния одного и того же задания применять можно толкьо какой-то один из них; использовать тот и другой одновременно нельзя.
Как для параметра EXCLUDE, так и для параметра INCLUDE, элемент конструкцияимени является необязательным. Как известно, некоторые объекты в базе данных, например, таблицы, индексы, пакеты и процедуры, обладают именами, а некоторые, напримре, объекты GRANTS – нет. Элемент конструкцияимени в параметре EXCLUDE или INCLUDE позволяет приенять SQL-функцию для фильтрации именованных объектов.
Ниже приведен простой пример исключения всех таблиц, имя которые начинается с ECMP.
В этом примере ”LIKE ‘EMP%’” пре конструкцию имени.
Элемент конструкция_имени является необязательным в параметрах EXCLUDE и INCLUDE. Он представляет собой просто средство фильтрации, позволяющее более точно определять тип подлежащих исключению или включению объектво (индексов, таблиц и т.д.). В случае его пропуска включаться или исключаться будут все объекты указанного типа.
В следующем примере Oracle исключит из операции экспорта все индексы, потому в элементе конструкция_имени не было указано никакого значения, требующего, чтобы исключались только определенные индексы:
Вдобавок параметр EXCLUDE может применяться для исключения целой схемы, как показано в следующем примере:
Параметр INCLUDE является противоположностью параметру EXLCUDE и позволяет принудительно включать в операцию экспорта только определенный набор объектов. Как и в случае параметра EXLCUDE, для указания того, какие точно объекты требуется экспортировать, вместе с INCLUDE тоже можно использовать элемент конструкция_имени.
Ниже приведены три примера, демонстрирующие примеение элемента конструкция_имени для ограничения выбираемых объектов:
В первом примере параметр INCLUDE указывает, что в процессе экспорта должны приниать участие только две таблицы: ECMPLOYEES и DEPARTMENTS, во втором – только процедуры, а в третьем – только индексы, причем лишь те, имя у которых начинается с EMP.
В следующем примере показано, как использовать символ косой черты для отмены двойных кавычек:
При выполнении фильтрации метаданных за счет применения параметра EXCLUDE и INCLUDE нужно помнить о том, что все объекты, которые зависят от какого-то из фильтуемых объектов, будут обрабатываться тем же образом, что и сам этот фильтруемый объект. Например, в случае использвоания параметра EXCLUDE для исключения некоторой таблицы также автоматичеки будут исключаться индексы, граничения, триггеры и прочие зависящие от этой тблицы объеекты.
Существует еще множество всевозможных параметров в т.ч. и шиврование, компрессиия и д.р.
Параметр REMAP_DATAFILE
При перемещении баз данных между двумя различными платформами, на каждой из которых используетс свое соглашие по именованию фалов, параметр REMAP_DATAFIE приходится очень кстати, поскольку позволяет изменять формат именования файлов. Ниже приведен пример, показывающий, как с помощью этого параметра указать утилите Data Pump Import, что вместо формата фаловой системы Windows, требуется использовать формат файловой системы UNIX. После этого при обнаружении в экспортном файле дампа людой ссылки на файл с именем в формате файловой истемы Windows, утилита Data Pump Import будет автоматически изменять имя файла в соответствии с форматом файловой системы UNIX.
Параметры фильтрации
Параметр CONTENT применяться в Data Pump Import, как и в Data Pump Export, для указания того, должны ли загружаться только строки (CONTENT=DATA_ONLY), строки и метаданные (CONTENT=ALL), либо только метаданные (CONTENT=METADATA_ONLY). Параметры EXLCUDE и INCLUDE имеют в Data Pump Import точно такое же предназначение, как и в Data Pump Export, и явялются взаимоисключающими, а в частности:
- Параметр INCLUDE используется для перечиления объектов, которые необходимо импортировать;
- Параметр EXCLUDE применятьтся для перечисления объектов, которые имортировать не требуется.
Ниже приведент простой пример использования параметра INCLUDE. В этом примере импорт ограничивается только объектами таблиц. В результате импортирована будет только таблица PERSONS.
Для импорта только тех таблиц, имя у которых начинается с букв PER, можно использоть конструкцию INCLUDE=TABLE:”LIKE ‘PER%’”. Вдобавок параметр INCLUDE можно применять и отрицательным образом, указывая то, что все объекты с оперделенным синтаксисом должны игнорироваться: INCLUDE=TABLE:”NOT LIKE ‘PER%’”
Обратите внимаение на то, что в случае установки для параметра CONTENT занчения DATA_ONLY, использовать во время импорта ни параметр EXCLUDE ни параметр INCLUDE нельзя.
Параметр TABLE_EXISTS_ACTION позволяет указывать Data Pump Import, что следует делать в случае, если таблица уже существует. Для этого параметра можно устанавливать четыре разных значения:
- SKIP – (значение по умолчанию) – пропукать таблицу, если таковая уже существует;
- APPEND – присоединять строки к таблице;
- TRUNCATE – усекать таблицу и загружать данные из экспортного файла дампа.
- REPLACE – удалять таблицу, если таковая сущствует, создавать ее заново и снова загружать в нее данные.
Мониторинг выполнения заданий Data Pump
Наиболее важными для мониторинга за выполнением заданий Data Pump являются представления DBA_DATAPUMP_JOBS и DBA_DATAPUMP_SISSIONS.
Представление DBA_DATAPUMP_JOBS позволяет получать сводную информацию обо всех выполняющихся в текущий момент заданиях Data Pump.
Представление DBA_DATAPUMP_SESSIONS позволяет выяснять, какие пользователькие сеансы в текущий момент подключены к заданию Data Pump Export или Data Pump Import
Стандартные роли
Роли в Oracle это именованные группы привилегий. После создания базы данных в ней создается несколько стандартных ролей:
- роль CONNECT содержит только одну привилегию CREATE SESSION, позволяющую создавать соединение с базой;
- роль DBA полный набор привилегий, необходимых администратору базы;
- роль RESOURCE базовый набор привилегий, необходимых разработчику;
- роль DELETE_CATALOG_ROLE привилегии для удаления информации из таблицы аудита;
- роль SELECT_CATALOG_ROLE привилегии для чтения информации из таблиц аудита;
- роль EXP_FULL_DATABASE необходима пользователю, из-под учетной записи которого будет производиться полный экспорт базы;
- роль IMP_FULL_DATABASE необходима пользователю, из-под учетной записи которого будет производиться полный импорт базы.
Просмотр информации о ходе выполненния заданий Data Pump
Ниже приведен типичный сценарий, который можнро использовать для получения информаци о том, сколько времени осталось до завершения выполнения задания Data Pump:
Если нужно перенести объекты схемы из одной базы в другую, то проще всего это сделать с помощью технологии Oracle Data Pump.
Прежде чем вникать в детали работы с Data Pump, давайте уточним: у нас есть физические резервные копии и логические дампы.
В физическую резервную копию включаются файлы данных (Data Files), в которых в виде блоков хранятся все данные Oracle.
Логический дамп содержит объекты БД (таблицы, индексы, процедуры, пакеты и т. д.) и другую информацию (привилегии пользователей, статистику и т.д.).
Логический дамп — это бинарный файл, который создаётся специальной утилитой экспорта. В последующем другой утилитой — импорта — из этого бинарного файла можно восстановить объекты схемы и данные.
Экспорт-импорт происходит на уровне объектов базы. т.е. работа происходит с определениями объектов (DDL) и данными, которые в них содержатся.
Логические дампы применяются главным образом для переноса данных из одной базы в другую, а также для миграции базы на другую платформу.
Также их удобно использовать для восстановления данных редко изменяемых таблиц. Например, когда пользователь ошибочно выполняет обновление или удаление строк.
До версии Oracle 10g существовали только утилиты экспорта-импорта (exp и imp). Они работали как на сервере, так и на клиенте Oracle. В версии 10g и более поздних версиях утилиты остались, но считаются устаревшими.
Начиная с версии 10g появилась технология Oracle Data Pump.
Особенность утилиты в том, что она работает только на сервере.
С помощью Oracle Data Pump можно:
- либо создать один или несколько файлов логического дампа БД в директории на сервере
- либо перенести данные напрямую из одной БД в другую через dblink.
По сравнению с оригинальными утилитами exp/imp технология Data Pump значительно более быстрая. Имеет более гибкие настройки. Может вызываться, как из командной строки (утилиты), так и из PL/SQL с помощью пакетов DBMS_DATAPUMP и DBMS_METADATA.
Для вызова Data Pump из командной строки используются утилиты expdp и impdp
В общем, сейчас уже нет необходимости использовать оригинальные утилиты exp/imp, кроме случая, когда у вас нет доступа к файловой системе сервера Oracle.
Экспорт в Oracle Data Pump
Data Pump Export может работать в 5-ти режимах:
- Full Mode — выгрузка всей БД.
- Schema Mode — выгрузка выбранных схем.
- Table Mode — выгрузка отдельных таблиц.
- Tablespace Mode — выгрузка выбранных табличных пространств.
- Transportable Tablespace Mode — экспорт табличного пространства для переноса на другой сервер.
Пример вызова Data Pump Export в "Table Mode":
> expdp hr TABLES=employees DIRECTORY=DPUMP_DIR1 DUMPFILE=employees.dmp
Файлы дампа создаются в директории, на которую указывает объект базы данных Directory. По умолчанию параметр DIRECTORY=DATA_PUMP_DIR.
Если вы хотите выгрузить в другую директорию, то вам нужно:
- Cоздать другую directory с помощью команды (CREATE DIRECTORY .. AS '. ')
- Указать ее в параметре DIRECTORY=dpump_dir1 или перед именем файла дампа DUMPFILE=dpump_dir1:employees.dmp.
Экспорт может производиться не из текущей базы данных, а из удаленной базы по dblink. Для этого нужно указать существующий dblink на базу данных — источник, используя параметр NETWORK_LINK.
> expdp hr TABLES=employees DIRECTORY=DPUMP_DIR1 DUMPFILE=employees.dmp NETWORK_LINK=S101
Во-первых, можно создавать задания фильтры по метаданным, т.е. отбирать для экспорта объекты базыд данных как по типу, так и по имени. Для этого используются параметры: CONTENT, INCLUDE, EXCLUDE.
Во-вторых, можно выполнить фильтрацию строк выгружаемых таблиц с помощью параметра QUERY.
Импорт в Oracle Data Pump
Теперь перейдем к импорту.
Аналогично экспорту Data Pump Import также имеет 5 режимов:
- Full Mode — загрузка всего дампа.
- Schema Mode — загрузка выбранных схем.
- Table Mode — загрузка отдельных таблиц.
- Tablespace Mode — загрузка выбранных табличных пространств.
- Transportable Tablespace Mode — импорт табличного пространства.
Например, команда для полной загрузки дампа:
> impdp hr FULL=Y DIRECTORY=DPUMP_DIR1 DUMPFILE=employees.dmp
По-умолчанию выставлен параметр FULL=YES, то есть будет загружено все содержимое файла дампа. Но вы, также как и при экспорте, можете использовать параметры CONTENT, INCLUDE, EXCLUDE, QUERY для выбора нужных объектов и данных для загрузки.
Если при импорте вы указываете параметр NETWORK_LINK, то данные будут загружаться по указанному dblink напрямую из базы данных источника. В этом случае указывать файл дампа не нужно, а директория будет указывать только на размещение лога импорта.
> impdp hr TABLES=employees DIRECTORY=DPUMP_DIR1 NETWORK_LINK=S101
Итак: технология Oracle Data Pump позволяет быстро переносить данные из одной базы данных в другую как через файлы (дампы), так и напрямую по сети.
И конечно, создаваемые дампы могут использоваться и как резервные копии, особенно при небольших размерах базы данных. Но нужно учитывать следующее: если во время экспорта данные изменялись пользователями, то данные таблиц в дампе могут оказаться несогласованными.
Нюансы создания резервных копий базы дынных Oracle — это отдельная тема, которую рассмотрим в следующий раз.
Сергей Греховодов,
автор курсов по обучению OracleПохожие статьи:
Чтобы после сбоя в системе (например, отказа жесткого диска) восстановить базу нужно иметь под рукой резервную копию. (Нет резервной копии — прощай работа )) Чем свежее копия, тем лучше. Более того: резервная копия базы должна быть полной и непротиворечивой.
Если в таблице много записей, то порой достаточно выбрать первый десяток. В других СУБД для этого изначально были специальные конструкции в языке SQL. В Oracle всё это появилось гораздо позже. Есть несколько популярных способов.
Умеете делать резервную копию оракловой базы? Вопрос далеко-далеко не праздный (если вы уже знаете, как делать копию, то, наверное, догадываетесь, о чём пойдёт речь, правильно — о времени). Тема резервного копирования для администраторов оракла — одна из ключевых.
Oracle PL/SQL для администраторов баз данных
Толковая книга по PL/SQL. Читать и применять!Джоэл. И снова о программировании (файл PDF) Всё знают Джоэла. Легенда. А это его сборник статей.
SQL и реляционная теория
Как грамотно писать код на SQL. Много примеров и советов по написанию SQL-запросов.Пионеры программирования
Диалоги с создателями наиболее популярных языков программирования.Параметры переопределения
Data Pump Import
Иногда, (в моем случае при неудачном импорте) можно вытащить из файла дампа весь код DDL.
Для этого можно воспользоваться параметром SQLFILE.
Создается файл scott.sql с DDL.
Параметр REMAP_TABLESPACE
Иногда бывает нужно, чтобы табличное пространство, в которое выполняется импорт даннных, отличалось от используемого в исходной базе данных. Параметр REMAP_TABLESPACE позволяет осуществлять во время импорта перемещение объектов из одного табличноо пространства в другое.
копировать с табличными данными
WHERE 1 = 0 или подобные ложные условия работают, но мне не нравится, как они выглядят. Незначительно более чистый код для Oracle 12c + IMHO - это
CREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
Применяются те же ограничения: в новую таблицу копируются только определения столбцов и их допустимость значений NULL.
Source_table - это таблица, структуру которой вы хотите скопировать.
- создать таблицу xyz_new как select * from xyz;
- Это создаст таблицу и скопирует все данные.
- Структура таблицы будет такой же, но все скопированные данные будут удалены.
Если вы хотите преодолеть ограничения, указанные в ответе: Как я могу создать копию таблицы Oracle без копирования данных?
Вышеуказанную задачу можно выполнить в два простых шага.
Параметр REMAP_SCHEMA
Параметр REMAP_SCHEMA позволяет перемещать объекты из одной схемы в другую. Задается этот параметр примерно так:
В этом примере параметр REMAP_SCHEMA указывает, что при выполнении операции импорта требуется перемесить все объекты из исходной схемы HR в целевую схему OE. Утилита Data Pump Import может даже создать схему OE, если таковой в целевой базе данных не существует.
Читайте также: