powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Обновление приложения XE_ADMIN с версии 4.0 до 4.2
4 сообщений из 4, страница 1 из 1
Обновление приложения XE_ADMIN с версии 4.0 до 4.2
    #38511035
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как известно, после апгрейда XE админское приложение 4950 умирает.

Вот что говорит документация:
http://www.oracle.com/technetwork/developer-tools/apex/upgrade-apex-for-xe-154969.html Once you upgrade Application Express within your Oracle Database XE, you will lose the Oracle APEX interface to perform some of your database management functions. This includes the ability to create and alter users, set database parameters, etc. To perform these functions, you will need to use either SQL Developer or SQL*Plus.
Это в силе и для 11g XE, т.е. админское приложение на поздних версиях апекса не поддерживается.
По правильному с этим нужно смириться и использовать предложенные средства.

Но кому если особенно охота сохранить админское приложение, ниже примеры скриптов, кот. апгрейдят это приложение
В данном случае конкретно с 4.0 до 4.2 (должны существовать соответствующие схемы):

Инструкция (для опытных пользователей):

1. Создаем папку c:\install (для windows)
2. Создаем скрипт XE_ADMIN_EXPORT.sql с примерным содержимым

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
create or replace procedure tmp_write_to_file(p_file_name in varchar2
                                              ,p_directory in varchar2
                                              ,p_content in blob) is
  l_file utl_file.file_type;
  l_buffer raw(32000);
  l_amount binary_integer := 32000;
  l_pos integer := 1;
  l_blob blob;
  l_blob_left number;
  l_blob_length number;
begin
  l_blob_length := dbms_lob.getlength(p_content);
  l_blob_left := l_blob_length;
  -- open the destination file.
  l_file := utl_file.fopen(p_directory
                          ,p_file_name
                          ,'WB'
                          ,32760);
  -- read chunks of the blob and write them to the file
  -- until complete.
  -- if small enough for a single write
  if l_blob_length < 32760 then
    utl_file.put_raw(l_file
                    ,p_content);
    utl_file.fflush(l_file);
  else
    -- write in pieces
    l_pos := 1;
    while l_pos < l_blob_length loop
      dbms_lob.read(p_content
                   ,l_amount
                   ,l_pos
                   ,l_buffer);
      utl_file.put_raw(l_file
                      ,l_buffer);
      utl_file.fflush(l_file);
      -- set the start position for the next cut
      l_pos := l_pos + l_amount;
      -- set the end position if less than 32000 bytes
      l_blob_left := l_blob_left - l_amount;
      if l_blob_left < 32000 then
        l_amount := l_blob_left;
      end if;
    end loop;
  end if;
  utl_file.fclose(l_file);
exception
  when others then
    -- close the file if something goes wrong.
    if utl_file.is_open(l_file) then
      utl_file.fclose(l_file);
    end if;
    raise;
end;
/

CREATE DIRECTORY TMP_DIR AS 'C:\install'
/

declare
  i number;
  v_out_buf htp.htbuf_arr;
  v_out_row_count number := 99999999;
  v_document_blob blob;
  params owa.vc_arr;
begin
  htp.init;
  owa.init_cgi_env(params);
  apex_040000.apex_application.g_public_user := 'ANONYMOUS';
  apex_040000.apex_util.set_security_group_id(10);
  apex_040000.wwv_flow_gen_api2.export( 4950 );
  owa.get_page(v_out_buf, v_out_row_count);
 
  dbms_lob.createtemporary(v_document_blob, true, dbms_lob.session);
  for i in 1..v_out_row_count loop    
    dbms_lob.writeappend(v_document_blob, utl_raw.length(utl_raw.cast_to_raw(
    
      replace(replace(v_out_buf(i),'wwv_flow_login.user_is_dba','wwv_flow_security.user_is_dba')
                                  ,upper('wwv_flow_login.user_is_dba'),upper('wwv_flow_security.user_is_dba'))
      
    )), utl_raw.cast_to_raw(
    
      replace(replace(v_out_buf(i),'wwv_flow_login.user_is_dba','wwv_flow_security.user_is_dba')
                                  ,upper('wwv_flow_login.user_is_dba'),upper('wwv_flow_security.user_is_dba'))
      
    ));
  end loop;
  
  tmp_write_to_file('XE_ADMIN.SQL', 'TMP_DIR', v_document_blob);
end;
/

drop procedure tmp_write_to_file
/

drop directory TMP_DIR
/


(скрипт создаст в папке экспортный файл XE_ADMIN.SQL с приложением 4950 + правит несколько ошибок, связанных с апгрейдом на 4.2 )

2. Создаем скрипт XE_ADMIN_IMPORT.sql: (Всё в той же папке)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
begin
  apex_application.g_public_user := 'ANONYMOUS';
  apex_util.set_security_group_id(10);
  
  apex_application_install.set_application_id( 4950);
  apex_application_install.set_workspace_id( 10 );
end;
/

begin
  for rec in (select *
              from dba_tab_privs t
              where t.grantee in ('APEX_040000')
              and (t.table_name, t.grantable) not in
                    (select t2.table_name, t2.grantable
                     from dba_tab_privs t2
                     where t2.grantee in 'APEX_040200')
              order by t.table_name) loop
  
    execute immediate 'grant ' || rec.privilege || ' on ' || rec.owner || '.' 
                    || rec.table_name || ' to APEX_040200' 
                    || case when rec.grantable = 'YES' then ' with grant option' end;
  end loop;
end;
/

@XE_ADMIN.SQL


(скрипт устанавливает приложение XE_ADMIN и дополнительно выдаёт права, кот. были в 4.0)

3. Инсталлируем:

Код: sql
1.
2.
3.
4.
cd c:\install
sqlplus логинимся
@XE_ADMIN_EXPORT.sql
@XE_ADMIN_IMPORT.sql



4. Удалить можно скриптом XE_ADMIN_DROP.sql:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
alter session set current_schema = APEX_040200;

var F4000_P20_FLOW_ID varchar2(4000);
var flow_security_group_id varchar2(4000);

begin
  :F4000_P20_FLOW_ID := 4950;
  :flow_security_group_id := 10;
end;
/

begin
wwv_flow.g_import_in_progress := true;

for c1 in (select translation_flow_id
           from WWV_FLOW_LANGUAGE_MAP 
           where security_group_id = :flow_security_group_id and
           primary_language_flow_id = :F4000_P20_FLOW_ID) loop

    -- removing from reserved list
    delete from wwv_flows_reserved
    where id = c1.translation_flow_id;

   for c2 in (select id from wwv_flows
              where id = c1.translation_flow_id) loop
       delete from wwv_flows 
       where id = c2.id and security_group_id = :flow_security_group_id;
   end loop;
end loop;

delete from WWV_FLOW_LANGUAGE_MAP where primary_language_flow_id = :F4000_P20_FLOW_ID;

delete from wwv_flows 
where id = :F4000_P20_FLOW_ID and security_group_id = :flow_security_group_id;

-- removing from reserved list
delete from wwv_flows_reserved
 where id = :F4000_P20_FLOW_ID;

--
-- Delete the saved interactive reports
--
delete from wwv_flow_worksheet_rpts
 where flow_id = :F4000_P20_FLOW_ID
   and security_group_id = :flow_security_group_id;
end;
/

commit;

alter session set CURRENT_SCHEMA = SYS;



Примечания:

1. Некоторые гранты выданные при установке (их требует админское приложение) этим скриптом не удаляются, так что если есть такая необходимость, перед установкой гранты нужно записать в отдельный файлик

2. Скрипт удаления желательно сверить во всяких вьюшках apex_application_page_processes, где кнопка удаления приложения, в соответствии со своей точной версией.

Все действия на свой страх и риск.

P.S. В результате всё съезжает, особенно в некоторых браузерах, но никто и не обещал, что оно будет правильно красиво отображаться.

Скрипты представляют скорее научный, чем какой-то практический интерес, так что я решил их слить, чтобы не пылились и не пропадали даром, авось кому пригодятся
...
Рейтинг: 0 / 0
Обновление приложения XE_ADMIN с версии 4.0 до 4.2
    #38541530
Карина В
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, после апгрейда базы на APEX 4.2
схему APEX_040000 можно безболезненно дропнуть?
...
Рейтинг: 0 / 0
Обновление приложения XE_ADMIN с версии 4.0 до 4.2
    #38541756
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карина В,

Можно.

P.S. Нечего писать в левых темах, не относящихся к вашей, создайте свою.
...
Рейтинг: 0 / 0
Обновление приложения XE_ADMIN с версии 4.0 до 4.2
    #38541769
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выше 4.0. нужен только для разовой выгрузки приложения XE_ADMIN.SQL, далее схема 4.0 больше не нужна, если вы про это.

А если не про это

Remove Schemas from Prior InstallationsTo remove schemas from prior installations:
1. Start SQL*Plus and connect to the database where Oracle Application Express is
installed as SYS specifying the SYSDBA role. For example:
■ On Windows:
SYSTEM_DRIVE:\ sqlplus /nolog
SQL> CONNECT SYS as SYSDBA
Enter password: SYS_password
■ On UNIX and Linux:
$ sqlplus /nolog
SQL> CONNECT SYS as SYSDBA
Enter password: SYS_password
2. Execute a statement similar to the following example:
DROP USER FLOWS_030000 CASCADE;
Вместо FLOWS_030000 в вашем случае APEX_040000.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Обновление приложения XE_ADMIN с версии 4.0 до 4.2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]