DevGang
Авторизоваться

Oracle: Как перенести схему из одной базы данных в другую с помощью exp / imp 

Здесь я дам подробные инструкции по миграции схемы с использованием exp / imp, pipe, gz между двумя базами данных.

Как перенести схему из одной базы данных в другую

Следующие шаги необходимо выполнить в исходной базе данных.

Метаданные о схеме

SQL> select owner,sum(bytes)/1024/1024 from dba_segments where owner in ('EXAMPLE_SCH') group by owner; 

SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_segments where owner in ('EXAMPLE_SCH') group by tablespace_name; 

SQL> select default_tablespace,username from dba_users where username in ('EXAMPLE_SCH'); 
SQL> select owner,status,object_type,count(*) from dba_objects where owner in ('EXAMPLE_SCH') group by object_type,owner,status;

SQL> select object_type,count(*) from dba_objects where owner in ('EXAMPLE_SCH') group by object_type; 

SQL> select count(*),status from dba_objects where owner in ('EXAMPLE_SCH') group by status; 

SQL> select object_type,count(*),status from dba_objects where owner in ('EXAMPLE_SCH') group by status,object_type;  

Экспорт схемы

vi exp.sh

#!/bin/ksh
export NLS_LANG=AMERICAN_AMERICA.UTF8
mknod /tmp/exp_pipe1 p
gzip -c < /tmp/exp-pipe1 >  SOURCE_schemas.dmp.gz &
exp system/password file=/tmp/exp_pipe1 buffer=2097152 log=exp_SOURCE_schemas.log statistics=none owner=EXAMPLE_SCH
rm -f /tmp/exp_pipe1
unset NLS_LANG

nohup ./exp_SOURCE_schemas.sh > exp_SOURCE_schemas.log 2>&1

Скопируйте SOURCE_schemas.dmp.gz на сервер целевой базы данных.

scp -p SOURCE_schemas.dmp.gz orac@host1:/home/oracle/export

В целевой базе данных

Создать метаданные в целевой базе данных

1. Создайте табличные пространства в соответствии с результатами, полученными в исходной базе данных.

2. Создать пользователей в целевой базе данных

Запустите следующий сценарий в исходной базе данных и выполните полученный сценарий в целевой базе данных.

set linesize 300
set pagesize 300
spool create_users.sql
select 'create user '||username||' identified by values '''||password||''' default tablespace '||default_tablespace||' temporary tablespace temp profile '||profile||';' from dba_users where username in ('EXAMPLE_SCH');
spool off

3. Предоставление квот в целевой базе данных

Запустите следующий сценарий в исходной базе данных и выполните результирующий сценарий в целевой базе данных.

spool create_tablespace_quota.sql
select 'alter user '||username||' quota unlimited on '||tablespace_name||';' from dba_ts_quotas where MAX_BYTES='-1' and username in ('EXAMPLE_SCH');
select 'alter user '||username||' quota '||max_bytes||' on '||tablespace_name||';' from dba_ts_quotas where MAX_BYTES!='-1' and username in ('EXAMPLE_SCH');
spool off

4. Предоставление ролей в целевой базе данных

Запустите следующий сценарий в исходной базе данных и выполните полученный сценарий в целевой базе данных.

spool create_grant_roles.sql
select 'grant '||GRANTED_ROLE||' to '||GRANTEE||';' from dba_role_privs where ADMIN_OPTION='NO' and grantee in ('EXAMPLE_SCH');
select 'grant '||GRANTED_ROLE||' to '||GRANTEE||' with admin option;' from dba_role_privs where ADMIN_OPTION='YES' and grantee in ('EXAMPLE_SCH');
spool off

5. Предоставление системных привилегий в целевой базе данных

Запустите следующий сценарий в исходной базе данных и выполните полученный сценарий в целевой базе данных.

spool create_sys_privs.sql
select 'grant '||PRIVILEGE||' to '||GRANTEE||';' from dba_sys_privs where ADMIN_OPTION='NO' and grantee in ('EXAMPLE_SCH');select 'grant '||PRIVILEGE||' to '||GRANTEE||' with admin option;' from dba_sys_privs where ADMIN_OPTION='YES' and grantee in ('EXAMPLE_SCH');
spool off 

Импортировать схему в целевую базу данных

vi imp.sh

#!/bin/ksh
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
mknod /tmp/imp_pipe1 p
gunzip -c SOURCE_schemas.dmp.gz >/tmp/imp_pipe1 &
imp system/password file=/tmp/imp_pipe1 buffer=20971520 log=imp_TARGET_schemas.log full=y
rm -f /tmp/imp_pipe1
unset NLS_LANG

Шаги поста

  1. Проверьте журналы импорта на наличие ошибок
  2. Запустите метаданные, которые были запущены в источнике, чтобы сравнить количество объектов
  3. Предоставление таблицы Priv на целевой объект

Запустите следующий сценарий в исходной базе данных и выполните результирующий сценарий в целевой базе данных

spool create_tab_privs.sql
select 'grant '||privilege||' on '||owner||'.'||table_name||' to '||grantee||';' from dba_tab_privs where GRANTABLE='NO' and grantee in ('EXAMPLE_SCH');
select 'grant '||privilege||' on '||owner||'.'||table_name||' to '||grantee||' with grant option;' from dba_tab_privs where GRANTABLE='YES' and grantee in ('EXAMPLE_SCH');
spool off

4. Cкомпилируйте импортированную схему

EXEC DBMS_UTILITY.COMPILE_SCHEMA ('EXAMPLE_SCH');

5. Соберите статистику по всем импортированным схемам

exec dbms_stats.gather_schema_stats ('EXAMPLE_SCH', cascade=>TRUE);

Источник:

#Oracle
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

В подарок 100$ на счет при регистрации

Получить