f3-logo-flexerasoftware

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