logo

[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. Далее восстанавливаем из бэкапа в созданную базу ImportSQLLoaderWizard:

Рис. 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.