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

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

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

как пример:

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

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

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

Да, точно!

Не дочитал.

Спасибо!

parusproff (ТС),
попробуйте использовать пакет DBMS_DATAPUMP.
...
Рейтинг: 0 / 0
09.03.2017, 14:05
    #39416201
parusproff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос текстов объектов с одной базы на другую средствами pl/sql
Ух, спасибо огромное!
Буду пробовать пакеты.
Свой огород городить/велосипед изобретать как-то не айс.
...
Рейтинг: 0 / 0
24.03.2017, 09:59
    #39426304
parusproff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос текстов объектов с одной базы на другую средствами pl/sql
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
24.03.2017, 10:05
    #39426309
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос текстов объектов с одной базы на другую средствами pl/sql
parusproff,

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


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


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