De omgeving waarin dit gebeurd is een ... sorry voor het ongemak ... windows omgeving: de database is op dezelfde machine geïnstalleerd als waar we de mdb-file plaatsen. Voor andere omgevingen ... nog te testen ...
In basis heet deze feature van de Oracle database Heterogeneous Services (HS) ... maar dit is al de derde naam voor het gevaarte ...
Het process bestaat uit 6 stappen :
- Plaats de mdb file op een goed 'georganiseerde' plaats.
- Creatie van een DSN
- Aanmaken van een init file voor de datasource.
- Aanpassen van de listener.ora file
- Aanpassen van de tnsnames.ora file
- Maken van een database link
- optioneel: aanmaken van synonyms voor de aan te spreken database objecten.
1. Plaats de mdb file op een verstandige plaats
Doel is hier om geen wirwar te creeren en er voor te zorgen dat met de bestanden die worden aangesproken geen andere dingen gebeuren. Dit laatste is een veiligheidsmaatregel. Ik heb geen testen gedaan met het simultaan gebruik van de mdb file via een access applicatie en via de oracle database.
Naar goede Oracle gewoonte is het best alles ergens samen te proppen. Voor de gelegenheid veronderstel ik dat alle Oracle producten onder c:\oracle staan (ORACLE_BASE). In deze ORACLE_BASE directory maken we een nieuwe directory met de naam HS_FILES. We zullen deze locatie verder omschrijven als HS_HOME. Binnen de HS_HOME maken we per soort van bestanden een directory, voorbeeld per applicatie die de MDB file aanlevert. Voor de gelegenheid is dat applicatie APPKE die een bestand appke.mdb gebruikt. Het pad is dan c:\oracle\HS_FILES\APPKE\appke.mdb
.
2. Creëer een DSN.
Dit doe je via je configuratiescherm > systeembeheer > beheer gegevensbronnen (odbc)
Let er op dat je een System dsn aanmaakt en geen user dsn !!! (anders krijg je problemen, zie oracle metalink nota .... )
Als voorbeeld creeren we een dsn met de naam 'sysdsnappke'.
Het testen van de dsn kan je doen door bijvoorbeeld met OpenOffice Base (liefst de meest recente versie) naar de dsn te connecteren. Je kan dan ook ineens de tabellen bekijken om de layout terug te vinden.
3. Aanmaken van een initXXXX.ora file.
Deze file definieert de initialisatie parameters voor de externe database of datasource.
Deze file staat in de hs/admin directory van ORACLE_HOME, met ORACLE_HOME de home directory van de database installatie. In ons voorbeeld zou dit in c:\oracle\db10gr2\hs\admin zijn.
Deze file ziet er als volgt uit:
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = sysdnsappke
HS_FDS_TRACE_LEVEL = 0
HS_DB_NAME = appke
HS_DB_DOMAIN = birds.be
#
# Environment variables required for the non-Oracle system
#
#set
Hierbij is
HS_FDS_CONNECT_INFO de naam van de system dsn definitie.
HS_FDS_TRACE_LEVEL gebruikt voor debugging ... dus gewoon op 0 laten staan.
HS_DB_NAME en HS_DB_DOMAIN respectievelijk de hostname en domain name van de global names database definitie voor de externe database. (zie verder nota over global names)
Houdt er rekening mee dat de global name van de database niet langer dan 8 characters mag zijn. (zie metalink nota xxxxxxx )
In de directory van de database zit een voorbeeld file voor het aanmaken van de file.
De naam van de file is belangrijk !!!
De listener zal bij het gebruik van de HS source een init file gaan zoeken met de naam die in de listener.ora gedefinieerd is als sid. In ons voorbeeld zullen wij deze file dus initappke.ora noemen.
4. Aanpassen van de listener.ora.
De mdb file wordt aangesproken door een agent (hsodbc). Deze agent wordt op zijn beurt aangesproken door de Oracle listener. Dus ... wanneer je een select zal doen tegen een tabel uit de ms-access database vanuit bijvoorbeeld sql*plus zal de database engine de listener aanspreken voor het aanleveren van de data.
Wat moet er in de listener.ora komen ?
Wel heel simpel : een entry die verteld welke dsn er dient gebruikt te worden (=sysdsnappke), wat de oracle home is onde dewelke de HS definitie file staat (zie stap 3) en welke agent er moet gebruikt worden om de dsn aan te spreken (hsodbc).
Normaal gezien staan er al entries in de file. In dat geval moet je alleen een SID_DESC toevoegen.
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=sysdsnappke)
(ORACLE_HOME=c:\oracle\db10gr1)
(PROGRAM=hsodbc)
)
)
Na de aanpassing van de file moet je de listener stoppen en terug starten. Indien je je database automatisch laat registreren bij de listener is het noodzakelijk dat je de database heropstart.
4. Aanpassen van de tnsnames.ora file.
In de tnsnames file moet een definitie komen om de database de datasource te laten aanspreken.
appke =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server.birds.be)(PORT = 1521))
(CONNECT_DATA =
(SID = appke)
)
(HS = ok)
)
In sommige documentatie staat dat de çHS = ok) binnen de connect data moet staan. Dit blijkt niet juist te zijn. Zie hiervoor metalink nota xxxxxxx.
5. Maken van een database link.
De database link is nodig om de objecten vanuit de 'andere' database aan te kunnen spreken.
Voer hiervoor het volgende sql-statement uit: create public databaase link
create public database link appke using 'appke';
Het is niet noodzakelijk om de database link als public te definieren.
Indien de access database beveiligd is dient de username en het password gespecifieerd te worden in de database link. De username en password zijn de gene van de access database.
create public database link windocdb connect to "system" identified by "kaboeleke" using 'windocdb'
Let hierbij op het feit dat de username en het password tussen dubbele quotes moeten staan. Indien dit niet gedaan wordt, wordt deze informatie als case-insencitive bekeken en zal er mogelijk een fout password gebruikt worden.
Hierna is het mogelijk het geheel te testen op werking.
Doe hiervoor een select tegen een object uit de externe access database over de database link:
select * from
6. Aanmaken van synonyms voor de database objecten.
Het aanmaken van de synonyms is niet noodzakelijk, doch het geeft het gemak dat alle selects gelijk kunnen blijven en onafhankelijk van het gebruik van database links en/of tabel of synonym namen.
Create synonym
Problemen
Bij het uittesten kwam ik een aantal 'ambetante' dingen tegen.
Hier een lijst(je)
- Global names
Indien je database met global_names = true draait kan je problemen hebben met de naam.
Het eenvoudigste om dit te verhelpen is de global_names naar false te zetten :
alter session set global_names = false;
Referenties
Internet:
Metalink:
[
---> note 458441
----> solution is to select all colums directly and not through a *
No comments:
Post a Comment