Обновление экспортом базы данных с версии 9.0.5 на 10.2.0.2 в продукте Oracle e-Business suite версии 11.5.10.2 (черновик, Олег Иванов, 2006) ================================================================= Цель: избавиться от большого числа файлов, улучшить структуру объектов, тем самым ускорить работу продукта полезные Notes:230627.1 362203.1 1) УСТАНОВКА ПО 10.2.0.2 ----------------------------------------------------------------- подготовить машину, для RHEL4 update 4, в /etc/sysctl.conf проверить параметры net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.tcp_syncookies=1 net.ipv4.ip_default_ttl=128 net.ipv4.tcp_keepalive_probes=2 net.ipv4.tcp_keepalive_time=1200 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_retries2 5 net.ipv4.tcp_syn_retries 1 net.ipv4.ip_local_port_range=1024 65000 #kernel.shmmax=2147483648 - это ставить не стоит kernel.sem=250 256000 32 1024 fs.aio-max-nr=1048576 установить ПО (например, в /oracle/visora/10.2) с Database CD запустить инсталлятор с Companion CD и доставить в тот же $OH запустить инсталлятор с Client CD и доставить OEM для удобства администрирования запустить инсталлятор патча и установить патч 10.2.0.2 основная кодировка базы не может быть AL32UTF8, с ней не работают клиенты 8 версии, которых использует Applications 11i создать базу данных скриптами в кодировке UTF8, можно и не в ней, но тогда нужно поменять nls/admin/data как описано в Note. с plsql native compilation можно не возиться размер блока создаваемой базы данных db_block_size=8192, так как 3 индекса CREATE UNIQUE INDEX BSC_SYS_KPI_COLORS_U1 ON BSC_SYS_KPI_COLORS (TAB_ID, INDICATOR, DIM_LEVEL1, DIM_LEVEL2, DIM_LEVEL3, DIM_LEVEL4, DIM_LEVEL5, DIM_LEVEL6, DIM_LEVEL7, DIM_LEVEL8, PERIOD_ID) PCTFREE 10 INITRANS 11 TABLESPACE APPS_TS_TX_IDX; CREATE UNIQUE INDEX IBC_DIRECTORY_NODES_B_U2 ON IBC_DIRECTORY_NODES_B (DIRECTORY_PATH, NODE_TYPE) PCTFREE 10 INITRANS 11 TABLESPACE APPS_TS_TX_IDX; CREATE INDEX ZPB_TASK_PARAMETERS_N2 ON ZPB_TASK_PARAMETERS (NAME, VALUE) PCTFREE 10 INITRANS 11 TABLESPACE APPS_TS_TX_IDX; не влезают в меньший блок и выдадут ошибку ORA-01450: maximum key length (3118) exceeded первый индекс 5+5+(400*8)+5 байт, во втором программист издевался: поставил размер 3175+30. В третьем - не забивал себе голову - сделал столбцы размером 100+4000. Если создавать табл. пространства с одинаковым размером экстента, то UNIFORM SIZE должен быть больше 40К (и кратен 5 блокам) так как определения LOBов содержат параметр CHUNK 32768 (описание в Note:281571.1) Если размер DB_BLOCK_SIZE=8192 нет проблем. это определение можно не выгружать меняя catexp.sql или отредактировать файл экспорта, но редакторы его не берут из-за размера. Можно написать программу на C или java и заменять CHUNK 32768 на пробелы. LOBы во всех пространствах - разработчики не заботились об отдельном ТБС для них. пример сообщения об ошибке: IMP-00017: following statement failed with ORACLE error 3252: CREATE TABLE "ODM_PMML_DTD" ("DTD" CLOB) PCTFREE 10 TABLESPACE "ODM" NOCOMPRESS LOB ("DTD") STORE AS (TABLESPACE "ODM" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 NOCACHE) ORA-03252: initial extent size not enough for LOB segment 10.2.0.2 база создается примерно полчаса, половина времени уходит на форматирование больших файлов. Нужно создать табличные пространства с теми же именами, что в исходной базе данных, по одному файлу для каждого ТБС. Установить переменные окружения в профиле пользователя-владельца ПО: LD_LIBRARY_PATH=/lib:/usr/lib:$ORACLE_HOME/lib так как 10.2.0.2 криво скомпилирован и ругается в alert.log, что не может найти библиотеку. NLS_LANG=AMERICAN_AMERICA.UTF8 так как в imp ошибка, он делает двойное перекодирование Параметры инициализации можно взять из Note:216205.1 db_block_size = 8192 O7_DICTIONARY_ACCESSIBILITY = FALSE compatible = 10.2.0.2.0 db_block_checking = FALSE db_block_checksum = TRUE db_file_multiblock_read_count = 8 log_buffer = 10485760 recyclebin=off undo_management = AUTO nls_length_semantics = BYTE nls_language = american nls_territory = america nls_date_format = DD-MON-RR nls_numeric_characters = ".," nls_sort = binary nls_comp = binarysga_target = 1G plsql_optimize_level = 2 plsql_code_type = native plsql_native_library_dir = ?/visora/10.2/plsql_nativelib plsql_native_library_subdir_count = 149 open_cursors = 600 session_cached_cursors = 500 #на время создания базы импорта не ставить _system_trig_enabled = true _kks_use_mutex_pin=TRUE _b_tree_bitmap_plans = FALSE dml_locks = 10000 cursor_sharing = EXACT optimizer_secure_view_merging = FALSE timed_statistics = true shared_pool_size = 400M shared_pool_reserved_size = 40M pga_aggregate_target = 500M workarea_size_policy = AUTO olap_page_pool_size = 4194304 shared_pool_size = 400M shared_pool_reserved_size = 40M aq_tm_processes = 1 job_queue_processes = 2 local_listener=VIST utl_file_dir = /usr/tmp,/usr/tmp,/oracle/vistdb/10g/appsutil/outbound/VIST_vist,/usr/tmp НА ВРЕМЯ СОЗДАНИЯ И ИМПОРТА можно поставить (быстрее на 20%) sga_target = 2600000000 aq_tm_processes = 0 job_queue_processes = 0 O7_DICTIONARY_ACCESSIBILITY = TRUE _disable_logging = TRUE _wait_for_sync=false commit_write=BATCH, NOWAIT проблема с MDSYS, в 10.2 отсутствуют необходимые объекты. Например, тип GEOCODE_RESULT нужен для WIRELESS.MYGEOCODER Из 9i взять файл и выполнить cd /oracle/visora/9.2.0/md/admin alter user mdsys identified by mdsys account unlock; connect mdsys/mdsys @sdogcdr.sql @prvtgcdr.plb можно создать представление sys.ad_extents, если оно есть - оно не импортируется. set long 100000 spool adextents.sql select TEXT from dba_views where VIEW_NAME='AD_EXTENTS'; spool off сконфигурировать листенер 10.2 (параметры взять из 9.2) и запустить его. NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME) #in minutes SQLNET.EXPIRE_TIME = 2 #in seconds SQLNET.SEND_TIMEOUT = 25 #in seconds, выдаст ORA-12535 если клиент ничего не пошлет после соединения #SQLNET.RECV_TIMEOUT=60 #in seconds, если клиент не авторизуется SQLNET.INBOUND_CONNECT_TIMEOUT = 8 #чтобы никто не подсоединялся к базе tcp.validnode_checking=yes tcp.invited_nodes=(127.0.0.1,IPсерверов) 2) ПОДГОТОВКА ИСХОДНОЙ БАЗЫ К МИГРАЦИИ ----------------------------------------------------------------- в Note:230627.1 написано, что нужно установить патчи 4872830 provides the adclondb.sql 4775612 ставится полчаса, компилирует DLL (проверить что /usr/gcc указывает на gcc296 а /usr/bin/g++ на g++296) и другие объекты выполнять adgrants.sql из этого патча не нужно - он старый. Нужно выполнить такой же файл из директории с базой данных. ОБЯЗАТЕЛЬНО установив ORACLE_HOME указывающий на базу и погасив процессы Applications sqlplus '/ as sysdba' @adgrants.sql APPLSYS этот скрипт обходит необходимость выставления O7_DICTIONARY_ACCESSIBILITY=TRUE sqlplus system/manager @$AD_TOP/patch/115/sql/adclondb.sql 9 создаст файл adcrdb.sql в котором команда создания базы и ТБС, файл бессмысленный cd /oracle/vistappl/au/11.5.0/patch/115/sql sqlplus "/ as sysdba" @$AU_TOP/patch/115/sql/auque1.sql создаст auque2.sql который надо запустить после импорта, чтобы активировать работу с очередями после импорта Note:235422.1 выполнить на исходной базе под SYS declare cursor c1 is select unique rule_owner ro from dba_rules union all select unique rule_set_owner ro from dba_rule_sets union all select unique evaluation_context_owner ro from dba_evaluation_contexts; stmt varchar2(1000); begin for c1_rec in c1 loop dbms_rule_adm.grant_system_privilege( privilege => dbms_rule_adm.CREATE_EVALUATION_CONTEXT_OBJ, grantee => c1_rec.ro, grant_option => TRUE); dbms_rule_adm.grant_system_privilege( privilege => dbms_rule_adm.CREATE_RULE_SET_OBJ, grantee => c1_rec.ro, grant_option => TRUE); dbms_rule_adm.grant_system_privilege( privilege => dbms_rule_adm.CREATE_RULE_OBJ, grantee => c1_rec.ro, grant_option => TRUE); stmt := 'grant aq_user_role to ' || c1_rec.ro; execute immediate stmt; end loop; end; / скопировать catexp.sql добавить ВСЮДУ где перечислены пользователи (exu81obj exu8usr и т.п.) пользователей. Они служебные в 10g, а в 9i простые: ,'MDDATA','OLAPSYS','DMSYS','OUTLN','DBSNMP' insert into noexp$ select 'SYSTEM', 'HELP', 2 from sys.dual where not exists (select 'x' from sys.noexp$ where name = 'HELP' AND owner = 'SYSTEM'); COMMIT; выполнить отредактированный скрипт исключать схему SYSTEM из экспорта нельзя, там есть таблицы типа BROWSER_PROFILE, IAP проверить результат запроса к view, если отличается пересоздать (создается catexp.sql): CREATE OR REPLACE VIEW exu81csc (release) AS SELECT '8.1.0.0.0' FROM DUAL; записать результат: select * from global_name; select username, default_tablespace from dba_users where username='CTXSYS' or username='OLAPSYS'; select OWNER,TRIGGER_NAME from dba_triggers where STATUS='DISABLED'; select OWNER,NAME from DBA_QUEUES where ENQUEUE_ENABLED='NO'; select OWNER,NAME from DBA_QUEUES where DEQUEUE_ENABLED='NO'; select OWNER,OBJECT_NAME,OBJECT_TYPE, status from dba_objects where status<>'VALID'; разобраться почему объекты INVALID, а триггера DISABLED мигрировать korean lexer ДО ЭКСПОРТА exec ctx_ddl.create_preference('ko_morph_lexer','korean_morph_lexer'); alter index "ICX"."ICX_QUES_CTX" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); alter index "APPS"."IBE_CT_IMEDIA_SEARCH_IM" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); alter index "CS"."CS_FORUM_MESSAGES_TL_N4" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); alter index "CS"."CS_INCIDENTS_ALL_TL_N1" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); alter index "CS"."CS_KB_ELEMENTS_TL_N2" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); alter index "CS"."CS_KB_SETS_TL_N3" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); alter index "CS"."CS_KB_SOLN_CAT_TL_N1" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); alter index "CS"."SUMMARY_CTX_INDEX" rebuild parameters ('REPLACE LEXER ko_morph_lexer'); 2.1) ОЧИСТКА НЕНУЖНОГО МУСОРА ----------------------------- В EBS копится очень много мусора, из-за которого всё тормозит и экспортировать его нет смысла. Мусор concurrent requests: -------------------------- в панели администрирования выполнить очистку данных параллельных запросов (Все, Число,1,....нет,Да) Note:238415.1 FNDCPPUR пытается удалить несуществующие файлы. Это бывает, если клонировать базу и не обновить пути или не перетащить файлы логов. можно их создать: select 'echo > '||LOGFILE_NAME from applsys.FND_CONCURRENT_REQUESTS where LOGFILE_NAME is not null; select 'echo > '||OUTFILE_NAME from applsys.FND_CONCURRENT_REQUESTS where OUTFILE_NAME is not null; delete from applsys.fnd_conc_request_arguments where request_id in (select request_id from applsys.fnd_conc_request_arguments minus select request_id from applsys.fnd_concurrent_requests); если процесс висит после успешной очистки FND_TEMP_FILES, то может подвисать на очистке FND_ENV_CONTEXT. Скорость удаления строк 5000 в минуту, а там может быть 10млн.строк. Для ускорения в 60 раз можно: проследить, чтобы concurrents не работали drop index applsys.fnd_env_context_u1; create index applsys.fnd_env_context_u1 on applsys.fnd_env_context (concurrent_process_id,variable_name) pctfree 10 tablespace apps_ts_tx_idx logging; запустить работу по удалению. 10млн строк удалит за 20 минут. по таблице FND_CONFLICT_DOMAIN Note:386385.1 Patch.4574592 select count(*) from apps.fnd_env_context e where not exists (select 'X' from apps.fnd_concurrent_processes p where p.concurrent_process_id=e.concurrent_process_id); таблицы логов workflow ---------------------- посмотреть сколько мусора скопилось: select item_type,activity_status,count(*) from applsys.wf_item_activity_statuses group by item_type,activity_status; select item_type,count(*) from applsys.wf_item_attribute_values group by item_type; Стандартными средствами удалить невозможно, архитектура workflow такая, что генерируется куча строк об удалении которых потом никто не заботится. После того как у клиентов накопятся десятки миллионов строк, сотни лишних гигабайт и Applications начнут тормозить программисты oracle выпускают скрипт как можно удалить конкретный тип мусора. Пример: Note:144806.1 Note:277124.1 Note:298550.1 Можно послать concurrent: Purge Obsolete Workflow Runtime Data и указать 0 дней exec WF_PURGE.ITEMS(null,null,'11-DEC-1970',true,true); exec WF_PURGE.ACTIVITIES; exec WF_PURGE.NOTIFICATIONS(null,'15-DEC-2006'); exec WF_PURGE.TOTAL; exec WF_PURGE.TOTALPERM; exec WF_PURGE.ADHOCDIRECTORY; есть еще скрипты им тоже нужны параметры $FND_TOP/sql/wfrmitms.sql $FND_TOP/sql/wfrmtype.sql $FND_TOP/sql/wfaqtabcoal.sql Note:144806.1 есть скрипт из Note:374308.1 можно его попробовать можно попробовать Note:375095.1 set pagesize 100000 spool abortXDPWFSTD.sql select 'exec WF_ENGINE.abortProcess('''||ITEM_TYPE||''','''||item_key||''');' from wf_items where item_type = 'XDPWFSTD' and end_date is null spool off @abortXDPWFSTD.sql exec WF_PURGE.TotalPERM('XDPWFSTD'); spool abortWFERROR.sql select 'exec WF_ENGINE.abortProcess('''||ITEM_TYPE||''','''||item_key||''');' from wf_items where item_type = 'WFERROR' and parent_item_type = 'XDPWFSTD' and end_date is null; spool off @abortWFERROR.sql exec WF_PURGE.Total('WFERROR'); очереди aq: ----------- Note:181410.1 select consumer_name, msg_state, count(*) from aso.aq$aso_order_feedback_t group by consumer_name, msg_state; Select Q_Name, State, Count(*) From Aso.Aso_Order_Feedback_T Group By Q_Name, State; $ASO_TOP/patch/115/sql/asoclofq.sql файлы логов ----------- 11i постоянно и обильно ходит в $APPL_TOP/admin/log/ где лежат файлы eventsX.log и errorX.log которые можно удалить, остановив процессы Applications 2.2) следовать процедуре клонирования ------------------------------------- обновляет конфиг файлы $COMMON_TOP/admin/scripts/VIST_vist/adautocfg.sh ввести APPS $AD_TOP/bin/admkappsutil.pl создает zip архив с утилитами, который надо будет раскрыть в $OH 10.2 раскрыть полученный appsutil.zip в корне $OH 10.2 cd $ORACLE_HOME/appsutil/scripts/ perl adpreclone.pl dbTier 3) ЭКСПОРТ ----------------------------------------------------------------- прямой экспорт может дать ошибку на одной из таблиц со старым ROWID, поэтому проще выгружать обычным экспортом, разница в скорости несущественна перед экспортом погасить процессы Applications, убедиться по списку процессов, что они остановились, перегрузить экземпляр, дать alter system set job_queue_processes=0; alter system set aq_tm_processes=0; exp parfile=p.txt file=visexp.dmp userid="/ as sysdba" buffer=10485760 recordlength=65535 consistent=y statistics=none direct=n full=y log=visexp.log идёт ~3 часа, размер файла 19Гб, сжимается gzip до 2,5Гб за 15минут на 3ГГЦ PentiumD 4) ИМПОРТ ----------------------------------------------------------------- импортировать с помощью файла parfile.imp так как строка toid_novalidate частично игнорируется FILE=visexp2.dmp FULL=Y TOID_NOVALIDATE=(SYSTEM.REPCAT$_OBJECT_NULL_VECTOR, SYS.AQ$_AGENT, SYS.AQ$_JMS_USERPROPERTY, SYS.AQ$_JMS_USERPROPARRAY, SYS.AQ$_JMS_MESSAGE, SYS.AQ$_JMS_TEXT_MESSAGE, SYS.AQ$_JMS_BYTES_MESSAGE, SYS.AQ$_JMS_STREAM_MESSAGE, SYS.AQ$_JMS_MAP_MESSAGE, MDSYS.SDO_GEOMETRY) IGNORE=Y USERID="system/manager" LOG=visimp2.txt BUFFER=10000000 RECORDLENGTH=65535 COMPILE=N imp parfile=imp.par компилировать пакеты в процессе импорта не нужно - все равно не скомпилируются. недостаточно привилегий у APPS. чтобы не было ошибок IMP-00060: Warning: Skipping table "APPLSYS"."WF_NOTIFICATION_OUT" because object type "SYS"."AQ$_JMS_OBJECT_MESSAGE" does not exist or has different identifier 12 таблиц, все кроме WF_NOTIFICATION_OUT пустые через 1-10 мин. после начала импорта, когда пользователи будут созданы, дать: grant execute on DBMS_SYS_SQL to system; grant execute on DBMS_SYS_SQL to OWAPUB; grant execute on dbms_sql to APPS; grant execute on dbms_pipe to APPS; grant execute on dbms_lock to APPS; grant execute on dbms_lock to EDWREP; grant execute on dbms_space_admin to APPS; grant execute on dbms_system to APPS; grant execute on dbms_alert to APPS; grant execute on dbms_pipe to OWAPUB; grant execute on DBMS_REPCAT_INTERNAL_PACKAGE to ASG; #EDWREP.WBSECURITYHELPER grant select on DBA_ROLE_PRIVS to EDWREP; grant select on V_$SESSION to EDWREP; #grant execute on dbms_aqadm to applsys; #system.defcall grant execute on dbms_defer_query_utl to system; через 2-60 минут после начала импорта: есть продукт E Data Warehouse, в котором насоздавали таблиц через dblink с этой же базой. Зачем нужно для single node? понтово - варехауз dblinkов может быть много - базу ковыряли перед созданием дистрибутива. проверить до экспорта параметры dblink APPS.EDW_APPS_TO_WH и APPS.APPS_TO_APPS убедиться, что есть запись в TNS_NAMES - по умолчанию VIS34 и запущен листенер или вручную создать пользователя apps и создать линки со своим алиасом connect apps/apps alter session set global_names=false; drop database link EDW_APPS_TO_WH; drop database link APPS_TO_APPS; create database link EDW_APPS_TO_WH connect to apps identified by apps using 'VIST'; create database link APPS_TO_APPS connect to apps identified by apps using 'VIST'; select * from dba_db_links where db_link in ('APPS_TO_APPS','EDW_APPS_TO_WH'); Объектные индексы создаются с ошибкой. Ошибки: DRG-12606: error encountered while parsing COLUMNS list ORA-00904: "CTXSYS"."HZDQM"."MCT": invalid identifier Причина: не импортируется пакет, так как схема CTXSYS служебная и не выгружается. EBS же создает в ней свои объекты. Bug 5635146 sqlplus apps/apps @/oracle/visappl/ar/11.5.0/patch/115/sql/arhdqcp1.sql APPS CTXSYS AR но в этом скрипте процедуры создаются через одно место, которое ещё не импортировано. Поэтому нужно создать объекты нормально: CREATE OR REPLACE PACKAGE CTXSYS.HZ_CTX_CUSTOMER_TEXT AS /*$Header: arhdqcp1.sql 115.8 2004/07/27 04:29:08 sponnamb noship $*/ procedure hz_site_proc(rid in rowid, tchar in out varchar2); procedure hz_site_proc2(rid in rowid, tlob in out clob); END HZ_CTX_CUSTOMER_TEXT; / CREATE OR REPLACE PACKAGE BODY CTXSYS.HZ_CTX_CUSTOMER_TEXT AS /*$Header: arhdqcp1.sql 115.8 2004/07/27 04:29:08 sponnamb noship $*/ procedure hz_site_proc(rid in rowid, tchar in out varchar2) IS begin APPS.RA_CUSTOMER_TEXT_PKG.site_info(rid,tchar); end; procedure hz_site_proc2(rid in rowid, tlob in out clob) IS begin APPS.RA_CUSTOMER_TEXT_PKG.site_info2(rid,tlob); end; END HZ_CTX_CUSTOMER_TEXT; / CREATE OR REPLACE PACKAGE CTXSYS.HZDQM AS /*$Header: arhdqcp1.sql 115.8 2004/07/27 04:29:08 sponnamb noship $*/ FUNCTION mp (rid IN ROWID) RETURN CLOB; FUNCTION mps (rid IN ROWID) RETURN CLOB; FUNCTION mct (rid IN ROWID) RETURN CLOB; FUNCTION mcpt (rid IN ROWID) RETURN CLOB; FUNCTION dps (party_id NUMBER) RETURN VARCHAR2; FUNCTION dcpt (party_id NUMBER) RETURN VARCHAR2; FUNCTION dct (party_id NUMBER) RETURN VARCHAR2; END HZDQM; / CREATE OR REPLACE PACKAGE BODY CTXSYS.HZDQM AS /*$Header: arhdqcp1.sql 115.8 2004/07/27 04:29:08 sponnamb noship $*/ FUNCTION mp (rid IN ROWID) RETURN CLOB IS begin RETURN APPS.HZ_STAGE_MAP_TRANSFORM.miscp(rid); end; FUNCTION mps (rid IN ROWID) RETURN CLOB IS begin RETURN APPS.HZ_STAGE_MAP_TRANSFORM.miscps(rid); end; FUNCTION mct (rid IN ROWID) RETURN CLOB IS begin RETURN APPS.HZ_STAGE_MAP_TRANSFORM.miscct(rid); end; FUNCTION mcpt (rid IN ROWID) RETURN CLOB IS begin RETURN APPS.HZ_STAGE_MAP_TRANSFORM.misccpt(rid); end; FUNCTION dps (party_id NUMBER) RETURN VARCHAR2 IS begin RETURN APPS.HZ_STAGE_MAP_TRANSFORM.den_ps(party_id); end; FUNCTION dcpt (party_id NUMBER) RETURN VARCHAR2 IS begin RETURN APPS.HZ_STAGE_MAP_TRANSFORM.den_cpt(party_id); end; FUNCTION dct (party_id NUMBER) RETURN VARCHAR2 IS begin RETURN APPS.HZ_STAGE_MAP_TRANSFORM.den_ct(party_id); end; END HZDQM; / grant execute on CTXSYS.HZ_CTX_CUSTOMER_TEXT to APPS; grant execute on CTXSYS.HZ_CTX_CUSTOMER_TEXT to AR; grant execute on CTXSYS.HZDQM to APPS; grant execute on CTXSYS.ctx_output to AR; grant execute on CTXSYS.HZDQM to AR; Выполнить sqlplus "/ as sysdba" @/oracle/vistappl/ad/11.5.0/patch/115/sql/adctxpkg.sql manager CTXSYS APPS Можно посмотреть как пересоздать индексы и схему CTXSYS в Note:292996.1, 312640.1, но выполнить рекомендации их до импорта нельзя импорт идёт 5ч15мин. если не очистить APPLSYS.WF_ITEM_ATTRIBUTE_VALUES, то в UNDO потребуется больше 1Гб 5) ПОСЛЕ ИМПОРТА ----------------------------------------------------------------- Note:371933.1 пакеты APPS.PY_ZA_USERMESG_PKG PY_ZA_PRORATE_PKG скачать патч 4543522 и выполнить sqlplus apps/apps @pyzamesg.pkb sqlplus apps/apps @pyzapror.pkb то же самое с ASG_DOWNLOAD, но нет патча для asgdwldb.pls строка 2149 просто закомментировать ее - она там не нужна. Только не ошибиться со строкой! автономная транзакция там во вложенном блоке, это запрещено синтаксисом если ошибка в HZ_IMP_LOAD_WRAPPER 2654/9 PL/SQL: ORA-00918: column ambiguously defined Note:391830.1 патч 4671360 выполнить sqlplus apps/apps @ARHLWRPB.pls если ошибки компиляции: EGO_USER_ATTRS_DATA_PVT subprogram or cursor 'GET_USER_ATTR_VAL' is declared in a package specification and must be defined in the package body EGO_ITEM_AML_PUB и EGO_LIFECYCLE_USER_PUB component 'IS_EGO_INSTALLED' must be declared то искать патч с глобальными именами возиться не нужно, если только не использовать dblinkи. тогда перед импортом дать ALTER DATABASE RENAME GLOBAL_NAME TO староеимя; после импорта ALTER DATABASE RENAME GLOBAL_NAME TO новоеимя; exec dbms_defer_sys.delete_error(null,null); exec sys.dbms_defer_sys.delete_tran(null,null); commit; после этих команд ОБЯЗАТЕЛЬНО перегрузить инстанс но всё равно будут ошибки при импорте в SYS . . importing table "DEF$_AQCALL" 0 rows imported IMP-00017: following statement failed with ORACLE error 23327: "BEGIN SYS.DBMS_DEFER_IMPORT_INTERNAL.QUEUE_IMPORT_CHECK('VIS.FORS.RU','Li" "nuxi386/Linux-2.0.34-8.1.0'); END;" IMP-00003: ORACLE error 23327 encountered ORA-23327: imported deferred rpc data does not match GLOBAL NAME of importing db ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86 ORA-06512: at "SYS.DBMS_DEFER_IMPORT_INTERNAL", line 30 если базу ковыряли, могут остаться пакеты, использующие dblinkи: ALTER PACKAGE имя COMPILE; ORA-04052: error occurred when looking up remote object CHANGE.DBMS_HS_PASSTHROUGH@адрес ORA-12154: TNS:could not resolve the connect identifier specified после или в процессе импорта посмотреть логфайл на ошибки. сначала идут ошибки создания табличных пространств. Их можно игнорировать, если пользователи у которых оно DEFAULT уже созданы, если нет - импорт прервется при попытке импортировать объекты в несуществующих пользователей. ошибки на SYSTEM.REPCAT$* можно игнорировать - ничего не импортируется в DEF$_DESTINATION вставлено 2 строки роли не играют, можно удалить в AQ$_QUEUE_UPGRADE_TMP вставлено 4 строки заполнялась при переходе с 8 версии, роли не играет предупреждения table contains ROWID column, values may be obsolete можно игнорировать, если дальше стоит 0 rows imported не создается около 135 индексов - якобы нет таблицы. Причина баг 5391326 - SYS теряет права при работе с CTX, наерное, кривое затыкание дыры в безопасности. Можно попробовать перед импортом дать под SYS select * from session_privs where PRIVILEGE not in (select PRIVILEGE from dba_sys_privs where grantee='SYS'); Если у SYS нет прямых привилегий дать их: grant EXEMPT ACCESS POLICY to sys; grant EXEMPT IDENTITY POLICY to sys; склеить текст из лога для индексов, которые не создалить и пересоздать их. Можно текстовым редкатором их выбирать из лога, в котором мегабайты мусора от объектов, созданных с предупреждением. Предупреждения из-за зависимостей от еще не импортированных объектов. если перед экспортом не мигрировать koren lexer будут ошибки, Note:362203.1 для импорта не поможет: DRG-13201: KOREAN_LEXER is desupported ORA-13249: Rebuild_index parameter cannot be specified in CREATE INDEX ORA-02001: user SYS is not permitted to create indexes with freelist groups ORA-13231: failed to create index table [MDRT_49E4E$] during R-tree creation если APPLSYS.WF_CONTROL или ODM.DMS_QUEUE_TABLE не импортируется IMP-00060: из-за SYS.AQ$_JMS_USERPROPARRAY значит в импорте параметры не подействовали - их вбивали в командной строке, а она импортом обрезается. могут быть ошибки создания триггеров, они созданы на несуществующие объекты типа схемы APPS_MRC, можно игнорировать. Предупреждения тоже - триггеры потом успешно компилируются. Оценка скорости операций: скорость диска: iostat -k -x -d 2 формирование пустых блоков 6Мб/c журнальные файлы лучше вынести на отдельный диск - 8Мб/c чтение дампа 5Мб/c запись в файлы данных 5-14Мб/c переключение 500мб логфайлов раз в 1,5мин импорт идет 5,5-9,5 часов. 164 переключений журнала, общий объем 85Гб после импорта ~16000 объектов INVALID. Note 372263.1 sqlplus "/ as sysdba" @/oracle/vistappl/ad/11.5.0/patch/115/sql/adctxpkg.sql manager CTXSYS APPS sqlplus "/ as sysdba" @/oracle/vistdb/9.2.0/appsutil/sql/adgrants.sql APPLSYS select a.table_owner||'.'||a.synonym_name from dba_synonyms a,dba_objects b where status='INVALID' and object_type='SYNONYM' and a.synonym_name=b.object_name; Note:380480.1 из них 83 синонима на объекты несуществующих пользователей: select a.table_owner||'.'||a.synonym_name from dba_synonyms a,dba_objects b where status='INVALID' and object_type='SYNONYM' and a.synonym_name=b.object_name and a.table_owner not in (select username from dba_users); удалить их spool dropsynonyms.sql select 'DROP PUBLIC SYNONYM '||a.synonym_name||';' from dba_synonyms a,dba_objects b where status='INVALID' and object_type='SYNONYM' and a.synonym_name=b.object_name and a.table_owner not in (select username from dba_users); spool off @dropsynonyms.sql скомпилировать объекты: execute utl_recomp.recomp_serial(); после перекомпиляции за 13 минут, остается ~3-10 нескомпилированных объекта в схеме APPS Например, DBP_TEST EGO_ITEM_AML_PUB EGO_USER_ATTRS_DATA_PVT EGO_LIFECYCLE_USER_PUB ASG_DOWNLOAD XXCS_COMMON_PKG FFP57002_01011951 ADSAPAPP после импорта очереди AQ запрещены. Нужно разрешить как в Note:357011.1 execute DBMS_AQADM.START_QUEUE('AR.AR_REV_REC_Q', TRUE, TRUE); или скриптом полученным на первом шаге убрать временные параметры из init.ora _disable_logging _wait_for_sync COMMIT_WRITE установить значения sga_target = 800000000 aq_tm_processes = 2 job_queue_processes = 1 O7_DICTIONARY_ACCESSIBILITY = FALSE пересоздать spfile после клонирования выполнять не нужно, так как объекты есть, а скрипт их портит cd /appsutil/install/ sqlplus "/ as sysdba" @adupdlib.sql so если меняется имя хоста, порты, то cd /appsutil/clone/bin perl adcfgclone.pl dbTier если он работоспособен полезные запросы в процессе импорта: select owner||'.'||object_name||' '||object_type from dba_objects where status='INVALID'; select owner,object_type, count(object_id) from dba_objects where status='INVALID' group by owner,object_type; select owner,INDEX_NAME from dba_indexes where DOMIDX_OPSTATUS<>'VALID'; select owner,INDEX_NAME from dba_indexes where DOMIDX_STATUS<>'VALID'; select owner,INDEX_NAME from dba_indexes where FUNCIDX_STATUS<>'ENABLED'; select PGA_TARGET_FOR_ESTIMATE,PGA_TARGET_FACTOR,ESTD_PGA_CACHE_HIT_PERCENTAGE from v$pga_target_advice; select SIZE_FACTOR,ESTD_PHYSICAL_READS,ESTD_PCT_OF_DB_TIME_FOR_READS from v$db_cache_advice; select SHARED_POOL_SIZE_FACTOR,ESTD_LC_TIME_SAVED_FACTOR,ESTD_LC_LOAD_TIME_FACTOR from v$shared_pool_advice; select SGA_SIZE_FACTOR,ESTD_PHYSICAL_READS,ESTD_DB_TIME_FACTOR from V$SGA_TARGET_ADVICE; select UNDOBLKS,TXNCOUNT,MAXQUERYLEN,ACTIVEBLKS,UNEXPIREDBLKS,TUNED_UNDORETENTION a from v$undostat order by begin_time asc; 6) РЕГИСТРАЦИЯ В OAM -------------------- Можно раскрыть утилиты конфигурации в новый $OH зайти в OAM, руками обновить параметры - чтобы указывали на новый $OH и директории тип базы нужно cтавить db102 обновить файл переменных окружения в новом $OH, запустить adautocfg.sh из директории новой базы данных. Обновится контекстный файл, конфигурационные файлы сети и init.ora Запустить adautocfg.sh из директории приложений, рестартовать службы, чтобы убедиться, что проблем с файлом нет. потом запустить под APPS EXEC FND_CONC_CLONE.SETUP_CLEAN - очистит все таблицы в базе связанные с контекстом и узлами. Запустить еще раз adautocfg.sh из директории приложений и новой базы. Статус в OAM будет корректный, а старый $OH удалится. Можно запустить инсталлятор из директории 10g и удалить ПО базы 9.2 OAM обновляет файлы конфигурации сети, делает это по шаблонам и криво. Добавить в invited_nodes 127.0.0.1 и в 8.0.6/network/admin/../listener.ora в листенере APPS_XXX на порту 1627 поставить полное доменное имя машины. Ставится без него (s_sphost + s_cpdomain) - без этого чудесным образом листенер пытается сеть на 127.0.0.1 тоже по чудесной причине обламывается и не стартует. баг в fnd/11.5.0/admin/template/listener_ux.ora