powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перенос текстов объектов с одной базы на другую средствами pl/sql
12 сообщений из 12, страница 1 из 1
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416161
parusproff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж.
Указал параметрами имя объекта, тип, db-link и объект перенесен с удаленной базы в текущую. Миграция по умному.
Через жесткие диски дампами не вариант.
На входе список объектов (процедуры, функции, пакеты) с линками.
Необходимо на ежедневной основе собирать с разных баз и обновлять тексты объектов.
Кто сталкивался?
Что посоветуете?
Дорога к all_source или есть штатные пакеты?
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416163
parusproff,

чего-то репликация напрашивается. к примеру - технология streams. вполне себе умеет переносить с сервера на сервер изменения объектов (DDL). причем практически "в реальном времени"...
другое дело, что сам оракл поставил на ней крест и предложил всем перебираться на GG
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416166
parusproff,

как вариант - DBMS_METADATA.GET_DDL. в аккурат умеет получать текст создания объекта. в качестве параметров принимает тип объекта, его имя и влядельца.
на выходе - выплевывает скрипт

как пример:

select dbms_metadata.get_ddl('VIEW','USER_TABLES','SYS') from dual;
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416172
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parusproff,
когда есть 1 эталонный сервер то пишется за 1 день при наличии дблинков на все нужные базы и функции в отдельной схеме, которая будет выполнять ддл на каждой из этих баз. правда как организовать безопасность и лог перенесенных доработок еще день придется подумать)
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416185
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parusproff,

dbms_datapump
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416187
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parusproffСобственно сабж.
Указал параметрами имя объекта, тип, db-link и объект перенесен с удаленной базы в текущую. Миграция по умному.
Через жесткие диски дампами не вариант.
На входе список объектов (процедуры, функции, пакеты) с линками.
Необходимо на ежедневной основе собирать с разных баз и обновлять тексты объектов.

Похоже, что пакет DBMS_DATAPUMP использовать нельзя,
поскольку в нём нельзя задать параметр NETWORK_LINK.
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416194
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plusв нём нельзя задать параметр NETWORK_LINK.
Код: plsql
1.
2.
3.
operation => 'IMPORT',
remote_link => 'remote или даже local',
...
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416199
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-SQL*Plusв нём нельзя задать параметр NETWORK_LINK.
Код: plsql
1.
2.
3.
operation => 'IMPORT',
remote_link => 'remote или даже local',
...

Да, точно!

Не дочитал.

Спасибо!

parusproff (ТС),
попробуйте использовать пакет DBMS_DATAPUMP.
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39416201
parusproff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух, спасибо огромное!
Буду пробовать пакеты.
Свой огород городить/велосипед изобретать как-то не айс.
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39426304
parusproff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parusproff,

получилось следующее

Код: 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.
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.
98.
99.
100.
101.
declare 
  jobhandle    NUMBER;
  job_state    VARCHAR2(30);
  status       ku$_Status;

  job_not_exist EXCEPTION;
  PRAGMA EXCEPTION_INIT (job_not_exist, -31626);
  sobject_list varchar2(3000);

  ind          NUMBER;         -- Loop index number
  percent_done NUMBER;         -- Percentage of job complete
  le           ku$_LogEntry;       -- work-in-progress and error messages
  js           ku$_JobStatus;     -- Job status from get_status
  jd           ku$_JobDesc;       -- Job description from get_status
  sts          ku$_Status;         -- Status object returned by get_status
    
begin

  sobject_list := '''PROC1'', ''PROC2''';

  jobhandle := dbms_datapump.open( operation    => 'IMPORT',
                                   job_mode     => 'SCHEMA',
                                   remote_link  => 'DBLINK1' );

  dbms_datapump.metadata_filter( handle => jobhandle,
                                 name   => 'INCLUDE_PATH_EXPR',
                                 value  => 'IN (''FUNCTION'',''PROCEDURE'')');

  dbms_datapump.metadata_filter( handle      => jobhandle
                               , name        => 'SCHEMA_LIST'
                               , value       => '''SCHEMA1''' );

  dbms_datapump.metadata_filter( handle      => jobhandle
                               , name        => 'NAME_LIST'
                               , value       => sobject_list
                               , object_type => 'SCHEMA_EXPORT/PROCEDURE' );

  dbms_datapump.metadata_filter( handle      => jobhandle
                               , name        => 'NAME_LIST'
                               , value       => '''FUNC1'''
                               , object_type => 'SCHEMA_EXPORT/FUNCTION' );

  dbms_datapump.start_job(jobhandle);

  percent_done := 0;
  job_state := 'UNDEFINED';
  
  while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
    
    DBMS_DATAPUMP.get_status(jobhandle,
                             DBMS_DATAPUMP.ku$_status_job_error +
                             DBMS_DATAPUMP.ku$_status_job_status +
                             DBMS_DATAPUMP.ku$_status_wip,
                             -1,
                             job_state,
                             sts);
    js := sts.job_status;

      -- As the percentage-complete changes in this loop, the new value displays.
      if 
        js.percent_done != percent_done
    then
        DBMS_OUTPUT.PUT_LINE('*** Job percent done = ' || to_char(js.percent_done));
        percent_done := js.percent_done;
     end if;
     
  if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
  then
      le := sts.wip;
  else
      if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
      then
       le := sts.error;
      else
       le := null;
      end if;
  end if;
  
   if 
     le is not null
 then
     ind := le.FIRST;
      while ind is not null loop
       DBMS_OUTPUT.PUT_LINE(le(ind).LogText);
       ind := le.NEXT(ind);
      end loop;
 end if;
end loop;     
     
-- When the job finishes, display status before detaching from job.
 DBMS_OUTPUT.PUT_LINE('Job has completed');
 DBMS_OUTPUT.PUT_LINE('Final job state = ' || job_state);
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  dbms_datapump.detach(jobhandle);

EXCEPTION
  WHEN OTHERS 
  THEN raise_application_error(-20001,dbms_utility.format_error_stack||' '||
                                      dbms_utility.format_error_backtrace);
end;



но есть проблема перезаписи существующих объектов.
Код: plaintext
1.
ORA-31684: Object type PROCEDURE:"SCHEMA1"."PROC1" already exists

мануал излазил вдоль и поперек, гугл молчит.
использовать dbms_datapump.metadata_remap?
или есть все-таки возможность простой перезаписи объектов?

прошу помощи.
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39426309
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
parusproff,

TABLE_EXISTS_ACTION REPLACE
...
Рейтинг: 0 / 0
Перенос текстов объектов с одной базы на другую средствами pl/sql
    #39426344
parusproff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в лоб
Код: plsql
1.
2.
3.
dbms_datapump.set_parameter( handle => jobhandle
                           , name => 'TABLE_EXISTS_ACTION'
                           , value => 'REPLACE' );


не помогает
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перенос текстов объектов с одной базы на другую средствами pl/sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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