Скачать из ноты 2471245.1 архив со скриптами
Перечень TC указать в параметре
tablespaces=
Директории используемые для формирования файлов
src_scratch_location=
dest_datafile_location=
dest_scratch_location=
ID платформы
platformid=6
Подготовка:
Создать пустую БД и настроить ее. Параметры должны совпадать с исходной БД!
Обратить внимание на параметр domain, если вдруг установлен в исходной БД, то в БД назначения он так же должен быть указан
Проверить версию файла timezone, они должны совпадать.
на время заливки данных и проверки, лучше отключить job
Залит в нее соурс пользователей, при этом поменять TS на USERS
impdp system/<password> directory=ttsdir network_link=ttslink FULL=y INCLUDE=USER,ROLE,ROLE_GRANT,PROFILE remap_tablespace=<>:USERS logfile=imp_metausr.log
Переименовать TS если USERS так же мигрирует!
alter tablespace users rename to userstbs
Бэкапим на NFS шару
1. Бэкап 0 уровня:
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup
2. Копируем файл res.txt на сервер где восстанавливаем базу (этот файл хранить как зеницу ока!, в нем параметры для восстановления)
3. Запускаем восстановление на сервере назначения:
$ORACLE_HOME/perl/bin/perl xttdriver.pl --restore
4. если файл res.txt скопирован, и запущено восстановление, то сразу запускаем бэкап уровня 1 на базе источнике (AIX)
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup
5. По его завершении, копируем опять файл res.txt на сервер назначения, старый файл переименовать!!! и запускаем восстановление
$ORACLE_HOME/perl/bin/perl xttdriver.pl --restore
4-5 повторяем пока есть время и возможность, каждый следующий бэкап быстрее предыдущего.
6. Финальный бэкап:
Переводим нужные TS в read only
alter tablespace <name> read only;
.....
и запускаем бэкап:
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup
по его завершении, копируем файл res.txt на сервер назначения и запускаем восстановление
Выгружаем в дамп данные для связи файлов и объектов в новой БД
Для этого создаем файл параметров со следующей структурой parfile:
dumpfile=xttdump.dmp
directory=DMP_XTTN
exclude=statistics
transport_tablespaces=список пространств через запятую
transport_full_check=y
logfile=tts_export.log
7. Все файлы восстанавливаются с новыми именами в новой БД, они не связаны с БД/объектами, для связи, нужно сформировать скрипт
cd /devdata/data
ls -AF > list.txt
Открываем в редакторе файл и дописываем путь к файлу, в итоге нужно получить что-то вроде этого, при этом необходимо удалить файлы новой БД, они не связываются!!!
'/devdata/data/USERS_100.dbf',
'/devdata/data/USERS_101.dbf',
.....
Собираем par файл для импотра:
vi par.imp
dumpfile=xttdump.dmp
directory=DMP_XTT
logfile=imp_log_1.log
transport_datafiles='/devdata/dbf/<file>',
.........
8. Импортируем данные
impdp parfile=par.imp
После выполнения проверить лог, если будут ошибки, поправить. но быть их не должно, их править нужно на этапе тестирования.
9. Проверка структуры фалов - работает долго,
RMAN> validate tablespace <tablespace list> check logical;
10. Правим default tablespace у пользователей,
на исходной БД выполняем запрос
select 'alter user '||username||' default tablespace '||default_tablespace||';' from dba_users
и применяем вывод на новой БД
11. Сверка (предполагается наличие линка на исходную БД),
11.1 Проверяем наличие таблиц и индексов
select * from (
select count(*), object_type, owner from dba_objects@TTSLINK where object_name not like 'BIN$%' group by owner,object_type
minus
select count(*), object_type, owner from dba_objects where object_name not like 'BIN$%' group by owner,object_type) d
where d.owner not in ('SYS','SYSTEM','WMSYS','XDB','PUBLIC','OWBSYS','ORDDATA','ORACLE_OCM','OLAPSYS','MDSYS','DBSNMP')
order by 3,2
11.2 Размеры объектов
select * from (
select round(sum(bytes/1024/1024/1024)), segment_name, owner from dba_segments@TTSLINK
where segment_name not like 'BIN$%' group by segment_name, owner
minus
select round(sum(bytes/1024/1024/1024)), segment_name, owner from dba_segments
where segment_name not like 'BIN$%' group by segment_name, owner ) a
where a.segment_name not like 'BIN$%'
order by 1 desc
p.s.: Убедится что были перенесены все объекты, могут быть случаи потери таблиц
12. Переводим все в read write
alter tablespace USERS read write
.....
13. Переносим логику, так как операции выше переносят только таблицы, данные каталога не переносятся.
expdp system/<> directory=<> content=metadata_only .....
14. Проверяем еще раз объекты, все ли переехало.
select * from (
select count(*), object_type, owner from dba_objects@TTSLINK where object_name not like 'BIN$%' group by owner,object_type
minus
select count(*), object_type, owner from dba_objects where object_name not like 'BIN$%' group by owner,object_type) d
where d.owner not in ('SYS','SYSTEM','WMSYS','XDB','PUBLIC','OWBSYS','ORDDATA','ORACLE_OCM','OLAPSYS','MDSYS','DBSNMP')
order by 3,2
15. Руками переносим все что было отдельно создано в SYS
16. Руками накатываем гранты на системные объекты и системные права, права на объекты SYS
select 'grant '||privilege||' on '||owner||'.'||table_name||' to '||grantee||';' from DBA_TAB_PRIVS where owner ='SYS' and grantee not in ('SCHEDULER_ADMIN','SYS','XDB','OLAP_USER','DBA','MDSYS','OEM_USER','OLAPSYS','EM_EXPRESS_ALL','OEM_MONITOR','IMP_FULL_DATABASE','OWBSYS','DATAPUMP_IMP_FULL_DATABASE','GSMADMIN_INTERNAL','WMSYS','OWB$CLIENT','SPATIAL_WFS_ADMIN_USR','SYSBACKUP','DBSNMP','SYSTEM','ORDSYS','SI_INFORMTN_SCHEMA','AUDIT_ADMIN','CTXSYS','OJVMSYS','RECOVERY_CATALOG_OWNER','OWBSYS_AUDIT','APPQOSSYS','EXP_FULL_DATABASE','DATAPUMP_EXP_FULL_DATABASE','AQ_ADMINISTRATOR_ROLE','CONNECT','ANONYMOUS','MDDATA','OEM_ADVISOR','JAVADEBUGPRIV','SPATIAL_CSW_ADMIN_USR','RESOURCE','SYSDG','OUTLN','SYSKM','EM_EXPRESS_BASIC','CDB_DBA','PUBLIC','SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE','DBFS_ROLE','LOGSTDBY_ADMINISTRATOR','AQ_USER_ROLE','GATHER_SYSTEM_STATISTICS','ORACLE_OCM','ADM_PARALLEL_EXECUTE_TASK','HS_ADMIN_SELECT_ROLE','OLAP_XS_ADMIN','XDBADMIN','HS_ADMIN_EXECUTE_ROLE','ORDPLUGINS','SHOW_PLAN_QUERY','CAPTURE_ADMIN','AUDIT_VIEWER','OPTIMIZER_PROCESSING_RATE','CSMIG','PDB_DBA','GSMUSER_ROLE','XS_CACHE_ADMIN','GSMCATUSER')
select 'grant '||privilege||' to '||grantee||';' from DBA_SYS_PRIVS where grantee not in ('SCHEDULER_ADMIN','SYS','XDB','OLAP_USER','DBA','MDSYS','OEM_USER','OLAPSYS','EM_EXPRESS_ALL','OEM_MONITOR','IMP_FULL_DATABASE','OWBSYS','DATAPUMP_IMP_FULL_DATABASE','GSMADMIN_INTERNAL','WMSYS','OWB$CLIENT','SPATIAL_WFS_ADMIN_USR','SYSBACKUP','DBSNMP','SYSTEM','ORDSYS','SI_INFORMTN_SCHEMA','AUDIT_ADMIN','CTXSYS','OJVMSYS','RECOVERY_CATALOG_OWNER','OWBSYS_AUDIT','APPQOSSYS','EXP_FULL_DATABASE','DATAPUMP_EXP_FULL_DATABASE','AQ_ADMINISTRATOR_ROLE','CONNECT','ANONYMOUS','MDDATA','OEM_ADVISOR','JAVADEBUGPRIV','SPATIAL_CSW_ADMIN_USR','RESOURCE','SYSDG','OUTLN','SYSKM','EM_EXPRESS_BASIC','CDB_DBA')
17. Добавить в UNDO и TEMP файлы.
18. Установить параметр job_queue_processes
Comments