Транспортируемые табличные пространства в Oracle 11g

Источник: habrahabr
DevAndrew

В этой статье я расскажу о перемещаемых табличных пространствах(Transportable tablespaces) в Oracle 11g. Табличное пространство можно клонировать и затем включить в другую базу данных путем копирования, а также можно исключить из одной базы данных Oracle и включить в другую базу данных Oracle на той же платформе с помощью перемещения.

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

Работа с утилитами экспорта и импорта

Oracle Database позволяет копировать данные между базами данных, а также обмениваться ими с внешними файлами. Копирование осуществляется посредством экспорта и импорта.
Для осуществления данной задачи есть утилиты imp.exe и exp.exe

Переносимые табличные пространства

Оперативное предоставление разработчикам свежей копии данных производственной системы. Использование информации, публикуемой на неперезаписываемых носителях (CD-ROM, DVD и т.п.). Быстрое перемещение данных из оперативной системы в хранилище или в витрину данных.
Ускорение переноса информации достигается за счет замены ресурсоемких процессов экспорта-импорта или выгрузки-загрузки значительно более быстрым копированием файлов данных с одной вычислительной установки на другую.

Выбор самодостаточного набора табличных пространств

Существует ряд условий ограничивающих применение описываемой возможности. 
Можно перемещать табличные пространства только между такими базами данных, которые: 

1. Имеют одинаковый размер блока (db_block_size), созданы с одинаковой кодировкой (character set), в файлах инициализации (INIT.ORA) исходной и целевых баз данных параметр COMPATIBLE должен быть установлен в значение, работают на совместимых платформах одного и того же производителя оборудования. 
Удовлетворение требований можно проверить, выполнив в исходной и целевой БД запрос: 

select name, value from v$parameter where name in ('db_block_size','compatible')
union all
selct parameter, value from nls_database_parameters where parameter like '%characterset'

Результаты запросов в исходной и целевой БД, должны быть одинаковые.

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

3. Не поддерживается транспортировка: снапшотов и тиражируемых таблиц, функциональных индексов, локальных ссылок на объекты, доменных индексов.

4. Выбор самодостаточного набора табличных пространств
Самодостаточный набор табличных пространств - это совокупность табличных пространств, объекты которых не ссылаются на какие-либо объекты, не содержащиеся в данном наборе.
Для проверки самодостаточности удобно использовать процедуру TRANSPORT_SET_CHECK(для выполнения процедуры требуется роль EXECUTE_CATALOG_ROLE). 

begin
sys.dbms_tts.transport_set_check (ts_list => 'USER_DATA', incl_constraints => true);
end;

Результаты ее работы записываются во временную таблицу и их можно посмотреть через системное представление SYS.TRANSPORT_SET_VIOLATIONS:
select * from sys.transport_set_violations

Перенос набора табличных пространств

Сначала следует перевести табличные пространства в состояние READ ONLY(далее в тексте XXX - имя табличного пространства): 
ALTER TABLESPACE TS_XXX READ ONLY; 

Затем с помощью утилиты EXP экспортируются метаданные словаря.
В командной строке следует изменить кодировку для корректного отображения информации.
set nls_lang=russian_cis.ru8pc866

exp transport_tablespace=y tablespaces=(TS_XXX) triggers=y constraints=y grants=y file=d:\exp_xxx log=d:\exp_xxx 

oracle попросит ввести имя пользователя и пароль:
Имя пользователя: sys/system@orcl2012 as sysdba 
orcl2012 - строка подключения к исходной БД.
TRANSPORT_TABLESPACE=Y - указывает, что выполняется экспорт метаданных транспортируемых табличных пространств, TABLESPACES=(USERS, USER_DATA, INDX) - задает список транспортируемых табличных пространств, TRIGGERS=Y - Экспортировать табличные триггеры (если указать N, то триггеры экспортироваться не будут) CONSTRAINTS=Y - Экспортировать ограничения целостности (при N не экспортируются ограничения типов PRIMARY KEY, UNIQUE, FOREIGN KEY и CHECK, однако ограничения NOT NULL экспортируются), GRANTS=Y - Экспортировать привилегии доступа к таблицам (N отменяет экспорт привилегий), FILE=exp_tts и log=exp_tts имя файла с данными и имя файла журнала экспорта. 
После того как утилита успешно экспортирует метаданные на выходе будет файл с расширением .dmp.(exp_xxx.dmp)
После экспорта метаданных, можно перевести табличные пространства назад в состояние READ WRITE:
ALTER TABLESPACE TS_XXX READ WRITE;

Подключение набора табличных пространств к целевой БД

Перед импортом, необходимо перенести данные от исходной базы данных к целевой:
Это можно сделать средствами ftp, командной строки или копированием средствами Windows.
Нужно копировать файл табличного пространства(.dbf) от исходной БД к целевой.
В командной строке.
Copy \\server1\oradata\orcl\TS_XXX.dbf  \\server2\oradata\orcl

\\server1\oradata\orcl\TS_XXX.dbf - путь к файлу перемещаемого табличного пространства на исходной базе данных
\\server2\oradata\orcl\ - путь, где будет хранится перемещаемое табличное пространство на целевой базе данных
Теперь можно подключать набор табличных пространств к целевой БД
imp transport_tablespace=y DATAFILES=('E:\server2\oradata\orcl\TS_XXX.dbf') TABLESPACES=(TS_XXX) TTS_OWNERS=(XXXCORE)
fromuser=(XXXCORE) touser=(XXXCORE) FILE=D:\ exp_xxx.dmp LOG=D:\imp_xxx.log 

oracle попросит ввести имя пользователя и пароль:
sys/system@ora2015 as sysdba 
ora2015 - строка подключения к целевой БД.
TRANSPORT_TABLESPACE=Y - указывает, что импортируются метаданные набора подключаемых табличных пространств, DATAFILES=(…) - список, определяющий имена и место расположения подключаемых файлов данных, TABLESPACES=(TS_XXX) - список табличных пространств. Если параметр не задан, то список берется из файла экспорта. Если задан, то сверяется со списком, содержащимся в файле экспорта (в случае несовпадения будет выдано сообщение об ошибке). TTS_OWNERS=( XXXCORE) - список схем, которым принадлежат объекты в подключаемых табличных пространствах. Если параметр не задан, то список берется из файла экспорта. Если задан, то сверяется со списком, содержащимся в файле экспорта (в случае несовпадения будет выдано сообщение об ошибке). FROMUSER=( XXXCORE), TOUSER=( XXXCORE) - имена исходных и соответствующих им целевых схем.
Если импорт завершен успешно, можно проверять наличие данных на целевой БД. 

Используемая литература литература:

Страница сайта http://185.71.96.61
Оригинал находится по адресу http://185.71.96.61/home.asp?artId=31332