[ELMA3] Восстановление из бэкапа базы Oracle
Восстановление базы данных Oracle из бэкапа может быть осуществлено несколькими способами.
1 способ
При восстановлении базы данных Oracle из бэкапа рекомендуется использовать данный способ. В данном случае необходимо выполнить следующие действия:
1. Запустить программу Toad for Oracle 11.6.
2. Подключиться под системным пользователем (по умолчанию уже сохранены параметры и пароль): Пользователь (User/Shema) – SYS, Тип подключения (Connect as) – SYSDBA.
Рис. 1. Подключение к базе данных
Следует отметить, что в Oracle 12с для создания пользователя без префикса C## в имени может потребовать выполнить команду:
alter session set "_ORACLE_SCRIPT"=true.
3. Создать базу и пользователей запросом:
create user C##AIST1 identified by q1234567;
grant all PRIVILEGES to C##AIST1;
GRANT SELECT ON "SYS"."GV_$RESERVED_WORDS" TO C##AIST1;
GRANT SELECT ON "SYS"."V_$RESERVED_WORDS" TO C##AIST1 ;
где: C##AIST1 – название базы, q1234567 – пароль подключения.
Рис. 2. Создание базы данных и пользователей
И нажать на клавиатуре на клавишу F5.
5. Запустить командную строку (cmd) от имени администратора.
6. Выполнить запрос (данный запрос будет работать правильно в том случае, если совпадают имя бэкапа и базы данных):
impdp aist/q1234567@ORATEST schemas=Aist directory=dpump_aist dumpfile=aist.dmp logfile=c##aist1_imp.log
- где: impdp aist – импорт в базу;
- q1234567@ORATEST – коннект до базы;
- schemas=Aist – сессия;
- directory=dpump_aist – папка, из которой берется бэкап;
- dumpfile=aist.dmp – имя бекапа;
- logfile=c##aist1_imp.log – лог создаётся сам;
- select * from dba_directories – просмотр директории из какой может восстанавливаться бекап.
7. Бэкап из другой schemas (то есть когда имя базы одно, а имя бэкапа другое):
impdp c##aist1/q1234567@ORATEST directory=dpump_aist dumpfile=aist.dmp logfile=c##aist1.log REMAP_SCHEMA=AIST:C##AIST1 TRANSFORM=oid:n:type
8. После восстановления необходимо зайти в созданную базу C##AIST1 с типом подключения Normal:
Рис. 3. База данных с типом подключения Normal
9. Выполнить запрос.
При восстановлении базы Oracle из backup оптимизируются индексы, но не совсем корректно. Например, изначально существуют 2 индекса: на (Первичный ключ) и второй сложный на (Первичный ключ, Любая колонка). После восстановления базы из бэкапа происходит оптимизация и индекс становится только 1: (Первичный ключ, Любая колонка) и привязывается к первичному ключу. Тем самым он становится индексом первичного ключа и его нельзя удалить без удаления первичного.
Изменить такое поведение при восстановлении с нашей стороны нет возможности, так как это особенности утилит экспорта/импорта Oracle.
ALTER TABLE ORGANIZATIONITEM DROP PRIMARY KEY CASCADE; DROP INDEX IX_ORGANIZATIONITEM_N2; ALTER TABLE ORGANIZATIONITEM ADD CONSTRAINT ORGANIZATIONITEM_PK PRIMARY KEY ("Id"); ALTER TABLE BASEMESSAGE DROP PRIMARY KEY CASCADE; DROP INDEX BASEMESSAGEIDINDEX; ALTER TABLE BASEMESSAGE ADD CONSTRAINT BASEMESSAGE_PK PRIMARY KEY ("Id"); ALTER TABLE WORKFLOWINSTANCE DROP PRIMARY KEY CASCADE; DROP INDEX IX_WORKFLOWINSTANCE_STATUS; ALTER TABLE WORKFLOWINSTANCE ADD CONSTRAINT WORKFLOWINSTANCE_PK PRIMARY KEY ("Id");
ALTER TABLE TASKBASE DROP PRIMARY KEY CASCADE;
DROP INDEX IX_TASKBASEIS;
ALTER TABLE TASKBASE ADD CONSTRAINT TASKBASE_PK PRIMARY KEY ("Id");
После выполнения сценария запустите систему ELMA.
2 способ
Данный способ восстановления базы данных рекомендуется использовать только в том случае, если не удалось восстановить базу первым способом. В данном случае необходимо выполнить следующие действия:
1. Запустить программу Toad for Oracle 11.6.
2. Подключиться под системным пользователем (по умолчанию уже сохранены параметры и пароль): Пользователь (User/Shema) – SYS, Тип подключения (Connect as) – SYSDBA.
Рис. 4. Подключение к базе данных
Следует отметить, что в Oracle 12с для создания пользователя без префикса C## в имени может потребовать выполнить команду:
alter session set "_ORACLE_SCRIPT"=true;
3. Создать базу и пользователей запросом:
create user C##AIST1 identified by q1234567;
grant all PRIVILEGES to C##AIST1;
GRANT SELECT ON "SYS"."GV_$RESERVED_WORDS" TO C##AIST1;
GRANT SELECT ON "SYS"."V_$RESERVED_WORDS" TO C##AIST1;
где: C##AIST1 – название базы, q1234567 – пароль подключения.
Рис. 5. Создание базы данных и пользователя
И нажать на клавиатуре на клавишу F5.
4. Далее восстанавливаем из бэкапа в созданную базу Import - SQL “LoaderWizard:
Рис. 6. Восстановление БД из бэкапа
5. Выбираем Import database (Imports the entire export file):
Рис. 7. Восстановление БД из бэкапа
6. Нажимаем Далее(Next) и выбираем название базы Selectschema, куда будем импортировать. В нашем случае – это C##AIST1:
Рис. 8. Выбор БД для импорта бэкапа.
7. Нажимаем Далее(Next). На следующем шаге оставляем все по умолчанию.
Рис. 9. Настройки импорта БД
8. Нажимаем Далее(Next) и выбираем путь до бэкапа.
Рис. 10. Выбор пути до бэкап-файла
9. Нажимаем Далее(Next) и на следующем шаге оставляем все по умолчанию.
Рис. 11. Настройки импорта БД
10. Нажимаем Далее(Next). База будет долго восстанавливаться.
11. После восстановлени необходимо зайти в созданную базу C##AIST1 с типом подключения Normal:
Рис. 12. Подключение к восстановленной БД
12. Далее необходимо выполнить запрос.
При восстановлении базы Oracle из backup оптимизируются индексы, но не совсем корректно. Например, изначально существуют 2 индекса: на (Первичный ключ) и второй сложный на (Первичный ключ, Любая колонка). После восстановления базы из бэкапа происходит оптимизация и индекс становится только 1: (Первичный ключ, Любая колонка) и привязывается к первичному ключу. Тем самым он становится индексом первичного ключа и его нельзя удалить без удаления первичного.
Изменить такое поведение при восстановлении с нашей стороны нет возможности, так как это особенности утилит экспорта/импорта Oracle.
ALTER TABLE ORGANIZATIONITEM DROP PRIMARY KEY CASCADE; DROP INDEX IX_ORGANIZATIONITEM_N2; ALTER TABLE ORGANIZATIONITEM ADD CONSTRAINT ORGANIZATIONITEM_PK PRIMARY KEY ("Id"); ALTER TABLE BASEMESSAGE DROP PRIMARY KEY CASCADE; DROP INDEX BASEMESSAGEIDINDEX; ALTER TABLE BASEMESSAGE ADD CONSTRAINT BASEMESSAGE_PK PRIMARY KEY ("Id"); ALTER TABLE WORKFLOWINSTANCE DROP PRIMARY KEY CASCADE; DROP INDEX IX_WORKFLOWINSTANCE_STATUS; ALTER TABLE WORKFLOWINSTANCE ADD CONSTRAINT WORKFLOWINSTANCE_PK PRIMARY KEY ("Id");
ALTER TABLE TASKBASE DROP PRIMARY KEY CASCADE;
DROP INDEX IX_TASKBASEIS;
ALTER TABLE TASKBASE ADD CONSTRAINT TASKBASE_PK PRIMARY KEY ("Id");
После выполнения сценария запустите систему ELMA.