sql >> Database >  >> RDS >> Oracle

Hoe stel je een gekoppelde server in op een Oracle-database op SQL 2000/2005?

Ik kon een gekoppelde server opzetten naar een externe Oracle-database, wat uiteindelijk een proces met meerdere stappen was:

  1. Installeer Oracle ODBC-stuurprogramma's op SQL Server.
  2. Maak systeem-DSN naar Oracle-database op SQL Server.
  3. Maak een gekoppelde server op een SQL-server met behulp van System DSN.

Stap 1:Installeer Oracle ODBC-stuurprogramma's op de server

a. Download de benodigde Oracle Instant Client-pakketten:Basic, ODBC en SQL*Plus (optioneel)

b. Pak de pakketten uit naar een lokale map op de SQL-server, meestal C:\Oracle . Dit zou moeten resulteren in een [map] zoals C:\Oracle\instantclient_10_2 , wat de waarde is van [directory] waarnaar in de rest van dit antwoord wordt verwezen.

c. Maak een tekstbestand met de naam tnsnames.ora binnen de instant client [directory] die het volgende bevat:

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

Opmerking:werkelijke HOST , PORT , en SERVICE_NAME zal variëren op basis van de Oracle-server waarmee u een verbinding tot stand brengt. Deze informatie is vaak te vinden met behulp van de Oracle-netwerkclienttools onder de luisteraars .

De OracleTnsName kan elke naam zijn die u aan de Oracle-gegevensbron wilt toewijzen, en zal worden gebruikt bij het instellen van de systeem-DSN. Je kunt desgewenst ook de bovenstaande syntaxis gebruiken om meerdere TNS-namen in hetzelfde tnsnames.ora-bestand te definiëren.

d. Voeg de [directory] toe aan het systeem PATH omgevingsvariabele.

e. Maak een nieuwe systeemomgevingsvariabele met de naam TNS_Admin die een waarde heeft van [directory]

f. Voer de [directory]\odbc_install.exe . uit hulpprogramma om de Oracle ODBC-stuurprogramma's te installeren.

g. Het wordt aanbevolen om de SQL-server opnieuw op te starten, maar dit is mogelijk niet nodig. U kunt ook beveiligingsmachtigingen aan deze map verlenen voor de gebruikersidentiteiten van de SQL-server en de SQL-agent.

Stap 2:maak een systeem-DNS die de Oracle ODBC-driver gebruikt

a. Open de ODBC-gegevensbronbeheerder hulpmiddel. [ Systeembeheer --> Gegevensbronnen (ODBC) ]

b. Selecteer het tabblad Systeem-DSN en selecteer vervolgens de knop Toevoegen.

c. Selecteer in de lijst met stuurprogramma's Oracle in instantclient {versie} . (bijv. 'Oracle in instantclient 10_2') en selecteer vervolgens de knop Voltooien.

d. Specificeer het volgende:

  • Data Source Name :{Systeem DSN-naam}
  • Description :{leeg/leeg laten}
  • TNS Service Name :moet de OracleTnsName . hebben u hebt gedefinieerd in de tnsnames.ora bestand, selecteert u het als de waarde.
  • Gebruikers-ID :{Oracle gebruikersnaam}

e. Selecteer de knop Verbinding testen. U moet worden gevraagd om het {Oracle-gebruikerswachtwoord} op te geven. Als alles goed gaat, zal de test slagen.

Stap 3:Maak een gekoppelde server in SQL aan de Oracle-database

Open een queryvenster in de SQL-server en voer het volgende uit:

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}'

Opmerking:de {Linked Server Name} kan alles zijn wat u wilt gebruiken bij het verwijzen naar de Oracle-server, maar de {System DNS Name} moeten overeenkomen met de naam van de systeem-DSN die u eerder hebt gemaakt.

De {Oracle User Name} moet hetzelfde zijn als de gebruikers-ID die wordt gebruikt door de systeem-DSN en het {Oracle User Password} moet hetzelfde zijn als waarmee u de ODBC-verbinding hebt getest. Zie KB 280106 voor informatie over het oplossen van problemen met gekoppelde Oracle-servers.

De Oracle-gekoppelde server opvragen

U kunt OPENQUERY gebruiken om pass-through-query's uit te voeren op de Oracle-gekoppelde server, maar houd er rekening mee dat u voor zeer grote recordsets een ORA-01652 kunt ontvangen foutmelding als u een ORDER BY . opgeeft clausule in de pass-through-query. De ORDER BY . verplaatsen clausule van de pass-through-query naar de buitenste select-instructie loste dit probleem voor mij op.




  1. Traceren inschakelen in oracle-apps r12

  2. IF-THEN-ELSE-instructies in postgresql

  3. Wat zijn macro's en hoe gebruik ik ze?

  4. Hoe converteer je alle tabellen van MyISAM naar InnoDB?