powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SYNONYM v nikuda
5 сообщений из 5, страница 1 из 1
SYNONYM v nikuda
    #32165075
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gospoda, mozhet jest u kogo script po vyjavleniju synonymov na dropnutyje objekty. Podelites, oblom golovu lomat.

Zaraneje blagodaren.

P.S. Horosho- by bylo ih jesche i cherez db_links vysledit :-)
...
Рейтинг: 0 / 0
SYNONYM v nikuda
    #32165464
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
You could do something like:

Код: plaintext
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.
SQL> CREATE OR REPLACE
   2     PROCEDURE DEAD_SYNONYM
   3       AUTHID CURRENT_USER
   4       IS
   5           v_Stmt VARCHAR2( 1000 );
   6           v_Cnt  NUMBER;
   7       BEGIN
   8           FOR v_Rec IN (
   9                         SELECT  *
  10                           FROM  USER_SYNONYMS
  11                        ) LOOP
  12             v_Stmt := 'SELECT COUNT(*) FROM DBA_OBJECTS';
  13             IF v_Rec.DB_LINK IS NOT NULL
  14               THEN
  15                 v_Stmt := v_Stmt || '@' || v_Rec.DB_LINK;
  16             END IF;
  17             v_Stmt := v_Stmt || ' WHERE OWNER = ''' || v_Rec.TABLE_OWNER ||
  18                         ''' AND OBJECT_NAME = ''' || v_Rec.TABLE_NAME || '''';
  19             EXECUTE IMMEDIATE v_Stmt INTO v_Cnt;
  20             IF v_Cnt =  0 
  21               THEN
  22                 IF v_Rec.DB_LINK IS NOT NULL
  23                   THEN
  24                     DBMS_OUTPUT.PUT_LINE('Synonym ' || USER || '.' ||
  25                                            v_Rec.SYNONYM_NAME ||
  26                                            ' points to nonexistent object ' ||
  27                                            v_Rec.TABLE_OWNER || '.' || v_Rec.TABLE_NAME ||
  28                                            '@' || v_Rec.DB_LINK);
  29                   ELSE
  30                     DBMS_OUTPUT.PUT_LINE('Synonym ' || USER || '.' ||
  31                                            v_Rec.SYNONYM_NAME ||
  32                                            ' points to nonexistent object ' ||
  33                                            v_Rec.TABLE_OWNER || '.' || v_Rec.TABLE_NAME);
  34                 END IF;
  35             END IF;
  36           END LOOP;
  37   END DEAD_SYNONYM;
  38   /

Procedure created.

SQL> create public synonym dead_synonym for dead_synonym;

Synonym created.

SQL> grant execute on dead_synonym to public;

Grant succeeded.

SQL> connect scott
Enter password: *****
Connected.
SQL> create table xxx(x number);

Table created.

SQL> create synonym xxx_syn for xxx;

Synonym created.

SQL> drop table xxx;

Table dropped.

SQL> set serveroutput on
SQL> exec dead_synonym
Synonym SCOTT.XXX_SYN points to nonexistent object SCOTT.XXX

PL/SQL procedure successfully completed.



The above procedure checks for "dead" synonyms in calling schema. User calling SP must have select from DBA_OBJECTS (directly or via role). With synonyms pointing to remote objects it is quite tricky. The above procedure will work only if user associated with DB_LINK in synonym definition has select from DBA_OBJECTS (directly or via role).

SY.
...
Рейтинг: 0 / 0
SYNONYM v nikuda
    #32165833
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thank you for the help. "Never look a gift horse in the mouth", but it would have something greater.
проблема в том, что наш software поставщик использует огромное количество synonyms and db_links. кроме того мы имеем множество схем (Applicatioon owners, connect accounts,function accounts...) которые обращаются к данным через synonyms на synonyms with db_link ha synonyms with db_link.... если объект убивается то выследить мертвые synonyms практически не возможно. они конечно "жрать не просят" , но 5000 мертвых synonyms на схему тоже много радости не приносят.
...
Рейтинг: 0 / 0
SYNONYM v nikuda
    #32168488
Bardis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ya dumaju chto eta procedure ne budet dlya scot-User rabotat. Scot ne imejet select - na dba_objects.
Krome togo on dolzhet imet synonym na remote dba_objects i prava na etu view.
...
Рейтинг: 0 / 0
SYNONYM v nikuda
    #32168918
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
In my posting I mentioned "User calling SP must have select from DBA_OBJECTS (directly or via role)". Your statement about remote DBA_OBJECT in not correct. Not user SCOTT, but rather user in database link derfinition must have select on remote DBA_OBJECTS (which I also mentioned). And there is no need for a synonym to remote DBA_OBJECTS since in the code it is referenced as DBA_OBJECTS@DB_LIK. You can rewrite the code with AUTHID DEFINER using "hidden" package DBMS_SYS_SQL which allows to parse "as user" (very, very helpful package) and thus avoid granting users select on local DBA_OBJECTS. You could avoid issues with remote synonyms if SP will be installed on all your boxes (by slightly modifying SP and calling it remotely).

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


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