26 апреля 2011 г.

oracle:db link

Примечание. Если параметр global_names=TRUE, то имя линка должно совпадать с именем базы, на которыйй этот линк идёт, чтобы обойти это нужно сделать:
alter system set global_names=false;

--Посмотреть линки:
select * from dba_db_links;

От юзера SYS можно использовать:
sys.link$
ku$_dblink_view
--Через эти представления можно узнать пароли пользователей под которыми эти линки 
--ходят, является дыркой безопасности:
select NAME,USERID, PASSWORD from sys.link$;

-- узнать это PUBLIC link или нет
-- все PUBLIC линки принадлежат схеме PUBLIC, поэтому:
select OWNER from dba_db_links where DB_LINK = 'MYLINK';

-- узнать это SHARED link или нет
-- SHARED link всегда создаётся с кляузой AUTHENTICATED BY 
-- поэтому чтобы узнать:
select NAME from sys.link$ where AUTHUSR is not null;



--Создать публичный линк

create public database link SDPTEST
  connect to PPS_OWNER
  using 'SDPTEST';

--Удалить
DROP PUBLIC DATABASE LINK SDPTEST;

-- Посмотреть sql запрос db_link
select DBMS_METADATA.GET_DDL('DB_LINK','HIST', 'PPS_OWNER') from DUAL;


Например:

1. Создать линк и выполнить  запрос

-- Линк делается для пользователя, из под которого он создаётся

CREATE DATABASE LINK RTBS_TEST
 CONNECT TO PPS_OWNER
 IDENTIFIED BY comverse
 USING 'SDPA';

select * from pps_owner.USAGE_CATEGORY@RTBS_TEST where versionid=451
AND USAGE_CATEGORY_ID NOT IN (41,81,101);