Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как восстановить...  [new]
lnkz
Member

Откуда: Москва
Сообщений: 166
благодаря своим кривым рукам перекомпилировал процедуру с абсолютно левым кодом... как можно восстановить?
кто подскажет буду очень благодарен..
14 июн 06, 15:52    [2770442]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
tru55
Member

Откуда: СПб
Сообщений: 19787
Не очень понятен вопрос. Если был грубо заменен код и не осталось копии, то никак
14 июн 06, 15:56    [2770464]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
lnkz
Member

Откуда: Москва
Сообщений: 166
ясн.. придется заново писать(
14 июн 06, 15:57    [2770466]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

lnkz wrote:
> благодаря своим кривым рукам перекомпилировал процедуру с абсолютно
> левым кодом... как можно восстановить?
> кто подскажет буду очень благодарен..

Если еще не поздно и Oracle 9i , то:

select text
from all_source as of timestamp (systimestamp - interval '3' hour)
where owner = :owner
   and name = :object_name
   and type = :object_type
order by name
        , type
        , line;

Posted via ActualForum NNTP Server 1.3

14 июн 06, 16:01    [2770493]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
Takurava
Member

Откуда:
Сообщений: 1774
А из архивлогов через логминер нельзя ничего достать?
14 июн 06, 16:15    [2770572]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
Takurava
Member

Откуда:
Сообщений: 1774
Да, вытащить можно, но только операторы по созданию:
execute sys.DBMS_LOGMNR.ADD_LOGFILE ('/ebs/arch_0000000641_0001.log');
execute sys.DBMS_LOGMNR.START_LOGMNR;
select SQL_REDO from V$LOGMNR_CONTENTS where operation='DDL';

SQL_REDO
---------------------------------
create or replace procedure a as
begin
null;
end;
;
А в SQL_UNDO пусто...
14 июн 06, 16:43    [2770797]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
lnkz
Member

Откуда: Москва
Сообщений: 166
не непомогает... возращает пустоту(
14 июн 06, 16:46    [2770828]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
Takurava
Member

Откуда:
Сообщений: 1774
А ты вспомни, когда создавал правильную процедуру и возьми оттуда...
14 июн 06, 16:46    [2770835]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
lnkz
Member

Откуда: Москва
Сообщений: 166
блин всем спасибо восстановил!
14 июн 06, 16:48    [2770845]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: как восстановить...  [new]
kiki123
Member

Откуда:
Сообщений: 25
Zdravstvuite,

u menia takaja zhe problema.. No all_sources ne pomogaet. Pozdno. A po sovetu Takuravy ne umeju. Kak vsio zhe poluchilosj vosstanovitj? Esli mozhno, objasnite eshe raz..
19 июн 20, 11:06    [22153487]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
kiki123
Member

Откуда:
Сообщений: 25
lnkz,

Здравствуйте,

у меня такая же проблема. Но all_sources не помогает. Поздно. А по совету Takuravy не умею. Если можно, обясните ещё раз..
19 июн 20, 11:25    [22153502]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
ilyuha111
Member

Откуда:
Сообщений: 108
у были такие проблемы поставил такой триггер


+

-- Create table
create table T_DDL_LOG
(
  object_owner          VARCHAR2(150) not null,
  object_name           VARCHAR2(150) not null,
  object_type           VARCHAR2(150) not null,
  date_log              DATE not null,
  is_get_ddl_error_flag NUMBER not null,
  old_object_ddl        CLOB,
  ddl_command           CLOB
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 25M
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Add comments to the table 
comment on table T_DDL_LOG
  is 'Таблица изменений DDL объектов';
-- Add comments to the columns 
comment on column T_DDL_LOG.object_owner
  is 'Владелец объекта';
comment on column T_DDL_LOG.object_name
  is 'Имя объекта';
comment on column T_DDL_LOG.object_type
  is 'Тип объекта';
comment on column T_DDL_LOG.date_log
  is 'Дата создания/изменения записи';
comment on column T_DDL_LOG.is_get_ddl_error_flag
  is '1 - если попытка получения DDL объекта вызвала ошибку, в этом случае в  OLD_OBJECT_DDL записано сообщение об ошибке (например объекта не существовало), 0 - все ок';
comment on column T_DDL_LOG.old_object_ddl
  is 'DDL объекта ДО изменения';
comment on column T_DDL_LOG.ddl_command
  is 'команда DDL, вызвавшая изменение объекта';



+

CREATE OR REPLACE TRIGGER "TR_DDL_LOG"
  before DDL on ORGANIZ.SCHEMA
declare
  PRAGMA AUTONOMOUS_TRANSACTION;
  vl_old_object_ddl         CLOB;
  vl_ddl_command            CLOB;
  vl_is_get_ddl_error_flag  t_ddl_log.is_get_ddl_error_flag%TYPE := 0;
  vl_ora_dict_obj_name varchar2(200);
  vl_ora_dict_obj_owner varchar2(200);
  vl_ora_dict_obj_type varchar2(200);
  n NUMBER;
  sql_text ora_name_list_t;

BEGIN
  IF ora_dict_obj_name NOT IN ('TR_DDL_LOG', 'T_DDL_LOG') THEN
    BEGIN
      SELECT dbms_metadata.get_ddl(decode(ora_dict_obj_type, 'PACKAGE BODY', 'PACKAGE', ora_dict_obj_type), ora_dict_obj_name, ora_dict_obj_owner)
        INTO vl_old_object_ddl
        FROM dual;
    EXCEPTION
      WHEN OTHERS THEN BEGIN
        vl_is_get_ddl_error_flag := 1;
        vl_old_object_ddl := SQLERRM;
      END;
    END;

    n := ora_sql_txt(sql_text);
    FOR i IN 1..n LOOP
      vl_ddl_command := vl_ddl_command || sql_text(i);
    END LOOP;

    vl_ora_dict_obj_name := nvl(ora_dict_obj_name,'UNDEFINED');
    vl_ora_dict_obj_owner := nvl(ora_dict_obj_owner,'UNDEFINED');
  vl_ora_dict_obj_type := nvl(ora_dict_obj_type,'UNDEFINED');

    INSERT INTO t_ddl_log
      (object_owner, object_name, object_type, date_log, is_get_ddl_error_flag, old_object_ddl, ddl_command)
    VALUES
      (vl_ora_dict_obj_owner, vl_ora_dict_obj_name, vl_ora_dict_obj_type, SYSDATE, vl_is_get_ddl_error_flag, vl_old_object_ddl, vl_ddl_command);

    COMMIT;
  END IF;
end TR_DDL_LOG;


19 июн 20, 12:17    [22153555]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1275
kiki123,

есть 10 типов людей - те, кто делают бекапы и те, кто пока не делает бекапы.
19 июн 20, 12:40    [22153579]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
kiki123
Member

Откуда:
Сообщений: 25
ilyuha111,

Спасибо,

это удобно и целесообразно, особенно в старом оракле.

А что имелось ввиду в другом сообщении: "взять первичную правильную процедуру.." откуда?
19 июн 20, 12:45    [22153588]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
kiki123
Member

Откуда:
Сообщений: 25
oragraf,

согласна:) вообще-то первичный ддл я у себя всё-таки нашла.. но сколько было написано позже..:/

Сообщение было отредактировано: 19 июн 20, 12:49
19 июн 20, 12:49    [22153594]     Ответить | Цитировать Сообщить модератору
 Re: как восстановить...  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7007
kiki123
oragraf,

согласна:) вообще-то первичный ддл я у себя всё-таки нашла.. но сколько было написано позже..:/


для целей программирования есть различные control version system

настоятельно рекомендую освоить инструмент
19 июн 20, 16:11    [22153785]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить