Introduction:
Oracle have a great tool that allows you to treat ODBC as a database link. Note that it can only be used as a database link, not as a database that you can log into. This seems like useless information now, but it’ll make sense in a little while.
Why would you want to do this? Well there are about 100000 reasons, but being able to use a central SQL editor to write any SQL across any database is a pretty good start.
Classic situation of reading right to left:
· A client connects to the database and requests data from the AS/400 via a database link
· The database link points to a tnsnames.ora entry that MUST be right in the databases tnsnames.ora on the database server. Note that this is not on your client, it’s server to server comms. Note also that tns defines this as a heterogeneous service (HS=) in the DESCRIPTION.
· The tnsnames.ora entry above points to a listener for the gateway SID that is referenced in the database link. In my case, this is the specific listener that I’ve defined in my second oracle home for the gateway.
· The gateway listener has defined the SID in question (HS based) to use dg4odbc to serve up the data. It also defines an oracle home where the program is going to come from.
· Finally this gateway program uses it’s initDIS.ora file in the HS subdirectory to find the system based DSN for oracle to read to find the data. This is what points the oracle listener to the generic ODBC name.
· ODBC then handles the rest!
That is a lot of moving parts!
To get much quicker data transfers between AS/400 and oracle than R98403 – well, that is another totally valid reason.
Software / hardware situation:
· Existing Oracle 64 bit 11GR2 install
· Windows 2008R2
· AS/400 V5R4
· Need to move data from AS/400 to oracle
Steps:
Step1 : ODBC
You’ll need a 64bit ODBC system DSN – easy.
Remember this is in %windows%\system32\
You can set up what ever default libraries you want, when you come to use the link, you can pretty much select data from any library.
Step 2: Install gateway services
You’ll need oracle gateway services installed (not so easy), so you need an additional oracle home with additional software installed. Note that the gateway for ODBC does NOT require any additional licensing (What!! This is oracle!!!) So this additional oracle home will have a new listener, we’ll use this for the comms to the HS (heterogenous service).
D:\downloads\software\Oracle Database 11G R2 (11.2.0.3) x64 Windows\p10404530_112030_MSWIN-x86-64_1of7\gateways\stage\products.xml
I installed from a location that is similar to the above.
Note also that there is nothing to start, expect for the listener. No database instance to start.
Step 4: Create additional listener
As mentioned about, an additional listener
D:\product\11.2.0\tg_1\NETWORK\ADMIN\listener.ora
# listener.ora Network Configuration File: D:\product\11.2.0\tg_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER_GW =
(SID_DESC =
(SID_NAME = A01PRODDTA)
(ORACLE_HOME = D:\product\11.2.0\tg_1)
(PROGRAM = dg4odbc)
)
LISTENER_GW =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBserver.com)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
ADR_BASE_LISTENER_GW = D:\product\11.2.0\tg_1
Start and stop your new listener
lsnrctl start LISTENER_GW
lsnrctl stop LISTENER_GW
Step 5: Define HS instance that listener connects to
You’ll need to configure the HS data source which the listener will connect to.
initA01PRODDTA.ora
D:\product\11.2.0\tg_1\hs\admin
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#
HS_FDS_CONNECT_INFO=A01PRODDTA
HS_FDS_TRACE_LEVEL=NO
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
Note that my HS INSTANCE is called A01PRODDTA
Step 6: tnsnames.ora
You’ll need to configure tnsnames on your database server, YES!! Because the database link is on the server and it needs to be right for your SQL to work (this took my slow mind some time to understand).
D:\Oracle\product\11.2.0\dbhome\NETWORK\ADMIN\tnsnames.ora
A01PRODDTA =
(DESCRIPTION =
(ADDRESS=(PROTOCOL=TCP) (HOST=NZAKLEVFN739.zeus.ghsewn.com) (PORT=1522))
(CONNECT_DATA=(SID=A01PRODDTA))(HS=))
Note that the syntax of the above is VITAL.
Step 7: Create DB link
This is simple, but must be a DB link.
Some errors along the way
The above was what I got wrong for many hours, and not knowing where it was going wrong. I got about 100000 of these:
D:\product\11.2.0\tg_1\hs\trace\A01PRODDTA_agt_47444.trc
Oracle Corporation --- MONDAY MAY 05 2014 12:11:48.283
Heterogeneous Agent Release
11.2.0.3.0
HS Agent diagnosed error on initial communication,
probable cause is an error in network administration
Network error 2: NCR-00002: NCR: Invalid usage
HS Gateway: NULL connection context at exit
dg4odbc ORA-28546: connection initialization failed, probable Net8 admin error
All of the above was because my tnsnames.ora was not right. This is the one that the main database uses in the home\network\admin for the database which you created the link in (not what you are pointing to with the link).
1 comment:
Hi Everyone, this blog is very helpful for me.We are also the provider of Email marketing service,B2B Email Marketing services,Data Base Services,Data Base Services,b2b email mailing lists,email panel with the best data support Global wide.
Post a Comment