Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Query two databases with Oracle SQL Developer

Is there a way to query two databases (in a single query) in Oracle SQL Developer?

I'm not very familiar with Oracle -- aside from standard CRUD syntax at any rate.

I'm trying to do an insert into an Oracle table from a SQL Server table. Would like to do something like this:

INSERT INTO OracleDB.table (field1, 2, ...)
SELECT ... FROM SQLServerDB.schema.table

I've got (working) connections created for both databases in Oracle SQL Developer.

Thanks

--EDIT--

I have no admin privileges to the databases themselves. (Cannot create linked servers, etc.)

like image 840
Chains Avatar asked Feb 02 '23 11:02

Chains


1 Answers

Yes, that's possible. Connections in SQL Developer won't help you - you will have to setup a database link from your Oracle database to the SQL Server database.

Before creating a database link, you'll have to setup a Heterogeneous gateway to connect to the SQL Server.

General steps include:

  • Install Oracle ODBC drivers on the server that will access the remote SQL Server database using the database link.

  • Setup the ODBC connection on the local Oracle database using the Windows ODBC Data Source Administrator

  • Test the ODBC drivers to ensure that connectivity is made to the SQL Server database.

  • Configure the Oracle Heterogeneous services by creating an initodbc.ora file within the Oracle database.

  • Modify the Listener.ora file.

        SID_NAME is the DSN for the remote database.
        ORACLE_HOME is the actual Oracle home file path.
        PROGRAM tells Oracle to use heterogeneous services.
    
        SID_LIST_LISTENER =
        (SID_LIST =
        (SID_DESC =
        (SID_NAME=ora_sid) -- Enter the DSN on this line
        (ORACLE_HOME = c:\oracle10gdb) -- Enter your Oracle home on this line
        (PROGRAM = hsodbc) ) )
    
  • Modify the Tnsnames.ora file to point to the gateway

        (DESCRIPTION=
        (ADDRESS_LIST=
        (Address=(PROTOCOL=TCP)
        (HOST=
        -- (Server x)
        (PORT=1521))) -- Enter the port on which the server x Oracle installation
        -- is listening
        (CONNECT_DATA=(SID=Cas30c)) - Enter the DSN name
        (HS=OK) -- Enter this value. It tells Oracle to use hetergeneous services
        )
    
  • Reload the listener on local Oracle database

  • Create a database link on the local Oracle installation that accesses the heterogeneous connection, which, in turn, connect to SQL Server.

Once the database link is created, you should be able to insert into the database using a simple:

 insert into <oracle_tablename>
 select * from <sqlserver_table_name>@dblink_name

Further reading:

  • Oracle documentation on Heterogeneous Gateway connectivity
  • Oracle documentation on creating Database links
  • Making a connection from Oracle to SQL Server ( this is slightly old, but very good, illustrated article!)
like image 111
Sathyajith Bhat Avatar answered Mar 02 '23 20:03

Sathyajith Bhat