Dans certains environnements, Oracle peut servir à plusieurs applications. En temps normal nous aurions tendance à ajouter le paramétrage réseaux dans le fichier TnsName.ora, mais cela ne permet pas de gérer facilement les installations et désinstallations. En effet dans ce cas Oracle n’est qu’un prérequis qu’il ne faudra désinstaller que si aucune application ne s’en sert.
Le plus simple est de ressortir ce paramétrage du fichier TnsName.ora et de l’apporter avec l’application. Pour cela nous utiliserons Ifile.
Le ifile d’Oracle (« include file ») est un moyen d’inclure un fichier de paramètres plus petit dans un autre fichier de paramètres de l’application.
Par exemple, nous pouvons intégrer un fichier de paramètres TnsNames.ora commun à l’intérieur d’un fichier régulier TnsNames.ora en ajoutant le code intégré. Dans cet exemple iFile, nous incluons un fichier dans / tmp appelé TnsNames_master.ora:
IFILE = /tmp/listener_master.ora
Oracle prend en charge jusqu’à trois niveaux d’imbrication iFile vous permettant d’avoir une iFile dans une iFile, au sein d’une iFile.
Selon certains experts Oracle, l’installation de iFile a été conçu pour le fichier init.ora et iFile n’est pas pris en charge pour les fichiers listener.ora, sqlnet.ora et protocol.ora, mais Oracle eBusiness Suite (EBS) release 11 utilise iFile dans ses fichiers de paramètres. Grâce à un iFile, vous pouvez conserver le fichier original intact.
Voici des exemples de script VBS que vous pouvez utiliser dans une Custom InstallShield en installation et en dèsinstallation.
Les deux utilisent les fonctions suivantes écrites par un collègue.
Fonctions :
'---------------------------------------------------------------
' Fonctions utilisées avec la syntaxe iFile="......" dans le fichier TnsNames.ora
'-----------------------------------------------------------------------
' Exemples :
'Return = VerifierExistanceConfigrationTnsnames ("D:\tnsNames.ora","d:\votre.ora")
'return = AjouterConfigurationTnsNames("d:\TnsNames.ora","d:\votre.ora")
'return = SupprimerConfigurationTnsNames("d:\TnsNames.ora","d:\votre.ora")
Function VerifierExistanceConfigrationTnsNames(TnsNames,NomDeBaseATrouver)
'Fonction à trois etats :
'-1 : erreur
'0 : configuration absente
'n>0 : derniere ligne ou la configuration est presente
Const FOR_READING = 1
Const FOR_WRITING = 2
Const FOR_APPENDING = 8
Set oShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
VerifierExistanceConfigrationTnsnames = False
NomBaseATrouver = "iFile=" & Chr(34) & NomBaseATrouver & Chr(34)
' On vérifie l'existance du fichier TnsnameS.ora passé en paramètre
' S'il n'existe pas, on quitte la fonction avec la valeur -1
If oFSO.FileExists(TnsNames) Then
' Ouverture du fichier Tnsnames.ora en lecture
Set objTS = oFSO.OpenTextFile(TnsNames,FOR_READING)
'Lancement de la recherche
compteur = 1
Do Until objTS.AtEndOfStream
line=objTS.ReadLine
If InStr(UCase(line),UCase(NomDeBaseATrouver)) > 0 Then
VerifierExistanceConfigrationTnsNames = True
End If
compteur=compteur+1
Loop
Else
VerifierExistanceConfigrationTnsnames = -1
End If
Set objTS = Nothing
Set oShell = Nothing
Set oFSO = Nothing
End Function
Function AjouterConfigurationTnsNames(TnsNames,Ajout_Ligne_Configuration)
Const FOR_READING = 1
Const FOR_WRITING = 2
Const FOR_APPENDING = 8
Set oShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
' Par défaut, la fonction retourne la valeur -1, c.a.d. une erreur.
Ajout_Ligne_Configuration = "iFile=" & Chr(34) & Ajout_Ligne_Configuration & Chr(34)
Temp_TnsNames = "D:\Temp_TnsNames.ora"
If oFSO.FileExists(TnsNames) Then
' Création de la copie du fichie TnsNames.ora en Temp_TnsNames.ora
oFSO.CopyFile TnsNames, Temp_TnsNames
' Ouverture du fichier temporaire TEMP_Tnsnames.ora en mode ajout d'enregistrements
Set objTS_Temp = oFSO.OpenTextFile(Temp_TnsNames,FOR_APPENDING, True)
objTS_Temp.WriteLine Ajout_Ligne_Configuration
objTS_Temp.Close
oFSO.CopyFile Temp_TnsNames, TnsNames
oFSO.DeleteFile Temp_TnsNames, True
AjouterConfigurationTnsNames = 0
Else
AjouterConfigurationTnsName = -1
End If
Set objTS = Nothing
Set objTS_Temp = Nothing
Set oShell = Nothing
Set oFSO = Nothing
End Function
Function SupprimerConfigurationTnsNames(TnsNames,Supprime_Ligne_Configuration)
Const FOR_READING = 1
Const FOR_WRITING = 2
Const FOR_APPENDING = 8
Set oShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
Supprime_Ligne_Configuration = "iFile=" & Chr(34) & Supprime_Ligne_Configuration & Chr(34)
Temp_TnsNames = "D:\Temp_TnsNames.ora"
If oFSO.FileExists(TnsNames) Then
' ouverture du fichier Tnsnames.ora en mode lecture
Set objTS = oFSO.OpenTextFile(Tnsnames,FOR_READING)
' Création du fichier temporaire TEMP_Tnsnames.ora
Set objTS_Temp = oFSO.CreateTextFile(Temp_TnsNames, True)
'Lancement de la lecture du fichier TnsNames.ora ligne par ligne jusqu'à la fin du fichier
Do Until objTS.AtEndOfStream
Ligne = objTS.ReadLine
' Si la ligne de configuration n'est pas trouvée, on recopie la ligne du fichier TnsNames.ora dans le fichier temporaire Temp_Tnsnames.ora
If InStr(UCase(ligne),UCase(Supprime_Ligne_Configuration))=0 Then
objTS_Temp.WriteLine (Ligne)
End If
Loop
SupprimerConfigurationTnsNames = 0
Else
SupprimerConfigurationTnsNames = -1
End If
objTS.Close
objTS_Temp.Close
oFSO.CopyFile Temp_TnsNames, TnsNames
oFSO.DeleteFile Temp_TnsNames, True
Set objTS = Nothing
Set objTS_Temp = Nothing
Set oShell = Nothing
Set oFSO = Nothing
End Function
Exemple de Script d’installation :
'Déclaration des variables
Set objetFSO = CreateObject("Scripting.FileSystemObject")
InstallDir = Session.Property("INSTALLDIR")
TnsFile = "EMPLACEMENT_DE_BASE_DE\tnsnames.ora"
'Verification existance du tnsnames.ora
If (Not objetFSO.FileExists(TnsFile )) Then
objetFSO.CreateTextFile (TnsFile)
End If
'Ajout de la configuration si non présente
If Not(VerifierExistanceConfigurationTnsnames (TnsFile, InstallDir & "Votre.ora")) Then
AjouterConfigurationTnsNames TnsFile, InstallDir & "votre.ora"
End If
Exemple de Script de désinstallation
InstallDir = Session.Property("INSTALLDIR")
TnsFile = "EMPLACEMENT_DE_BASE_DE\tnsnames.ora"
If VerifierExistanceConfigurationTnsnames (TnsFile, InstallDir & "Votre.ora") Then
SupprimerConfigurationTnsNames TnsFile, InstallDir & "Votre.ora"
End If