2008-11-21 15 views
21

Jestem w stanie utworzyć i wykonać pakiet DTS, który kopiuje tabele ze zdalnej bazy danych Oracle na lokalny serwer SQL, ale chce skonfigurować połączenie z bazą danych Oracle jako połączonym serwerem.Jak skonfigurować połączony serwer z bazą danych Oracle w SQL 2000/2005?

Pakiet DTS obecnie używa Provider Microsoft OLE DB dla Oracle o następujących właściwościach:

  • źródło danych: SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=acc)));uid=*UserName*;pwd=*UserPassword*;
  • Hasło: UserPassword
  • ID
  • użytkownika: UserName
  • Zezwalaj na zapisywanie hasła: true

Jak ustawić serwer połączony z bazą danych Oracle, korzystając ze źródła danych zdefiniowanego powyżej?

Odpowiedz

36

udało mi się skonfigurować serwer połączony do zdalnej bazy danych Oracle, który okazał się być to proces wieloetapowy:

  1. zainstalować sterowniki Oracle ODBC SQL Server.
  2. Utwórz systemową bazę DSN do bazy danych Oracle na serwerze SQL.
  3. Utwórz połączony serwer na serwerze SQL przy użyciu System DSN.

Krok 1: Instalacja sterowników Oracle ODBC na serwerze

a. Pobierz niezbędne pakiety Oracle Instant Client: Basic, ODBC i SQL * Plus (opcjonalnie):

b. Rozpakuj pakiety do lokalnego katalogu na serwerze SQL, zwykle C:\Oracle. Powinno to doprowadzić do [katalogu] takiego jak C:\Oracle\instantclient_10_2, który będzie wartością [directory] wymienioną w dalszej części tej odpowiedzi.

c. Utwórz plik tekstowy o nazwie tnsnames.ora w Instant Client [katalog], który zawiera następujące elementy:

OracleTnsName = 
(
    DESCRIPTION= 
    (
    ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521) 
) 
    (
    CONNECT_DATA = (SERVICE_NAME=acc) 
) 
) 

Uwaga: Rzeczywista HOST, PORT i SERVICE_NAME zależą od serwera Oracle jesteś nawiązywania połączenia. Te informacje często można znaleźć za pomocą narzędzi klienta sieci Oracle pod słuchaczy.

Numer OracleTnsName może być dowolną nazwą, która ma zostać przypisana do źródła danych Oracle, i będzie używana podczas konfigurowania systemu DSN. Możesz także użyć powyższej składni do zdefiniowania wielu nazw TNS w tym samym pliku tnsnames.ora, jeśli jest to pożądane.

d. Dodaj [katalog] do zmiennej środowiskowej systemu .

e.Utwórz nową środowiskową zmienną systemową o nazwie TNS_Admin, która ma wartość [katalog]

f. Uruchom narzędzie , aby zainstalować sterowniki Oracle ODBC.

g. Zaleca się ponowne uruchomienie serwera SQL, ale może nie być konieczne. Ponadto można nadać uprawnienia zabezpieczeń dla tego katalogu dla tożsamości SQL serwera i użytkownika SQL.

Krok 2: Tworzenie systemu DNS, który wykorzystuje sterownik Oracle ODBC

a. Otwórz narzędzie ODBC Data Source Administrator. [Narzędzia administracyjne -> Źródła danych (ODBC)]

b. Wybierz zakładkę System DSN, a następnie przycisk Dodaj.

c. Na liście sterowników wybierz opcję Oracle w instantclient {version}. (np. "Oracle w instantclient 10_2"), a następnie wybierz przycisk Zakończ.

d. Określenia:

  • Data Source Name: {systemowe DSN Name}
  • Description: {pozostaw puste/empty}
  • TNS Service Name: powinien mieć OracleTnsName zdefiniowano w pliku tnsnames.ora liście, wybierz ją jako wartość.
  • ID użytkownika: {Oracle nazwa użytkownika}

e. Wybierz opcję Testuj połączenie. Powinieneś zostać poproszony o podanie {hasło użytkownika Oracle}. Jeśli wszystko pójdzie dobrze, test się powiedzie.

Krok 3: Tworzenie połączonego serwera w SQL do bazy danych Oracle

otworzyć okno kwerendy w serwerze SQL i wykonać następujące czynności:

EXEC sp_addlinkedserver 
    @server  = '{Linked Server Name}' 
    ,@srvproduct = '{System DSN Name}' 
    ,@provider  = 'MSDASQL' 
    ,@datasrc  = '{System DSN Name}' 

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname = '{Linked Server Name}' 
    ,@useself  = 'False' 
    ,@locallogin = NULL 
    ,@rmtuser  = '{Oracle User Name}' 
    ,@rmtpassword = '{Oracle User Password}' 

Uwaga: Program {Linked Server Name} może być cokolwiek chcesz do użycia podczas odwoływania się do serwera Oracle, ale {System DNS Name} musi być zgodny z nazwą systemu DSN, który utworzyłeś wcześniej.

Identyfikator użytkownika powinien być taki sam, jak identyfikator użytkownika używany przez systemową nazwę DSN, a numer {Oracle User Password} powinien być taki sam, jak w przypadku pomyślnego przetestowania połączenia ODBC. Aby uzyskać informacje na temat rozwiązywania problemów związanych z serwerem Oracle związanych z serwerem, patrz KB 280106.

Zapytania Oracle serwer połączony

Można użyć OPENQUERY do wykonywania zapytań pass-through na Oracle serwer połączony, ale należy pamiętać, że dla bardzo dużych zestawów rekordów może pojawić się komunikat ORA-01652 błędzie Jeśli określisz ORDER BY Klauzula w kwerendzie tranzytowej. Przeniesienie klauzuli ORDER BY z kwerendy tranzytowej do zewnętrznej instrukcji select rozwiązało dla mnie ten problem.

+0

Witam, stwierdzam, że [srvproduct] ma taką samą wartość jak [datasrc] w wywołaniu sp_addlinkedserver. Chciałbym zapytać, czy instalacja Oracle 11g express i ODT z ODAC 11.1 będzie w stanie przetestować połączony serwer z Oracle. –

+0

Pytanie/odpowiedź zostało opublikowane w 2008 roku przed Oracle 11g. Próba ustawienia nowego połączonego serwera powinna być prawdopodobnie taka sama, ale nie wiem na pewno. – Oppositional

+2

Dzięki za doskonałą odpowiedź. Pomógł mi uzyskać serwer połączony z Oracle skonfigurowany i działający w ciągu kilku godzin. Wystarczy dodać, wydaje się to działa dobrze z SQL 2012 i Oracle 11g R2. – Cashley

1

Miałem ten sam problem. Przez wiele godzin rozmawiałem z firmą Microsoft i nie mieli rozwiązania. Żadne z ustawień "timeoutu połączenia" nie pomogło mi.

Aby rozwiązać ten problem, utworzyłem zadanie DTS, które uruchamia proces, który aktualizuje tylko czas w jednym wierszu, w jednej kolumnie, co dwie minuty. Następnie konfiguruję replikację między SQL Server i Oracle, zaplanowaną tak, aby replikować tę zmianę pojedynczej komórki, z SQL na Oracle, co 3 minuty. Utrzymuje połączenie przy życiu!

Powiązane problemy