Question Script PowerShell pour extraction données BDD

Plus d'informations
il y a 3 mois 2 semaines #34147 par Dead
Bonjour, 

J'essaie de mettre en place un script pour extraire des données d'une BDD Oracle sur une serveur Windows. Le voici:

# Spécifiez le chemin d'accès à l'assembly Oracle.ManagedDataAccess $oracleDllPath = "C:\Oracle.ManagedDataAccess.dll"
# Chargez l'assembly
Oracle.ManagedDataAccess Add-Type -Path $oracleDllPath
# Spécifier les informations de connexion à la base de données Oracle
$oracleHost = "srvbdd"
$oraclePort = "1521"
$oracleSID = "testuser"
$oracleUser = "User"
$oraclePwd = "password"
# Créer une chaîne de connexion à la base de données Oracle
$oracleConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$oracleHost)(PORT=$oraclePort))(CONNECT_DATA=(SERVICE_NAME=$oracleSID)));User Id=$oracleUser;Password=$oraclePwd;"
# Établir la connexion à la base de données Oracle
$oracleConnection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($oracleConnectionString)
$oracleConnection.Open()
# Ajouter la connexion à la base de données Oracle pour récupérer les données
$oracleCommand = New-Object Oracle.ManagedDataAccess.Client.OracleCommand
$oracleCommand.Connection = $oracleConnection
# Exécuter la requête SQL pour récupérer les données de la base de données Oracle
$query = "SELECT type_convention, DT_MLO FROM vue_patrimoine WHERE code_u = '$bienProgramme.$bienCode'"
$oracleCommand.CommandText = $query
$oracleDataReader = $oracleCommand.ExecuteReader()
if ($oracleDataReader.Read()) {
    $typeConvention = $oracleDataReader.GetString(0)
    $dtMLO = $oracleDataReader.GetDateTime(1)
    # Ajouter les données récupérées dans le fichier XML
    $bienConvention = $xmlContent.CreateElement("bien-convention")
    $bienConvention.InnerText = $typeConvention
    $bien.AppendChild($bienConvention)
    $bienDateMes = $xmlContent.CreateElement("bien-datmes")
    $bienDateMes.InnerText = $dtMLO.ToString("yyyy-MM-dd")
    $bien.AppendChild($bienDateMes)
}
$oracleDataReader.Close()

Cependant, cela ne fonctionne pas, j'ai cette erreur, pourtant je suis sur du chemin pour Oracle:


Add-Type : Impossible de charger le fichier ou l'assembly 'file:///C:\Oracle.ManagedDataAccess.dll' ou une de ses dépendances. L'opération n'est pas prise en charge. (Exception de HRESULT : 0x80131515) Au caractère C:\Scripts\TEST-SQL.ps1:12 : 1 + Add-Type -Path $oracleDllPath + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Add-Type], FileLoadException + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.AddTypeCommand New-Object : Le type [Oracle.ManagedDataAccess.Client.OracleConnection] est introuvable: vérifiez que l’assembly dans lequel il se trouve est chargé. Au caractère C:\Scripts\TEST-SQL.ps1:20 : 21 + ... onnection = New-Object Oracle.ManagedDataAccess.Client.OracleConnecti ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand Impossible d’appeler une méthode dans une expression Null. Au caractère C:\Scripts\TEST-SQL.ps1:21 : 1 + $oracleConnection.Open() + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation : (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull New-Object : Le type [Oracle.ManagedDataAccess.Client.OracleCommand] est introuvable: vérifiez que l’assembly dans lequel il se trouve est chargé. Au caractère C:\Scripts\TEST-SQL.ps1:23 : 18 + ... cleCommand = New-Object Oracle.ManagedDataAccess.Client.OracleCommand + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand La propriété « Connection » est introuvable dans cet objet. Vérifiez qu’elle existe et qu’elle peut être définie. Au caractère C:\Scripts\TEST-SQL.ps1:24 : 1 + $oracleCommand.Connection = $oracleConnection + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation : (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound La propriété « CommandText » est introuvable dans cet objet. Vérifiez qu’elle existe et qu’elle peut être définie. Au caractère C:\Scripts\TEST-SQL.ps1:28 : 1 + $oracleCommand.CommandText = $query + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation : (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Impossible d’appeler une méthode dans une expression Null. Au caractère C:\Scripts\TEST-SQL.ps1:29 : 1 + $oracleDataReader = $oracleCommand.ExecuteReader() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation : (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Impossible d’appeler une méthode dans une expression Null. Au caractère C:\Scripts\TEST-SQL.ps1:31 : 5 + if ($oracleDataReader.Read()) { + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation : (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Impossible d’appeler une méthode dans une expression Null. Au caractère C:\Scripts\TEST-SQL.ps1:45 : 1 + $oracleDataReader.Close() + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation : (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

Auriez-vous une idée? 

Je vous remercie

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 mois 2 semaines #34148 par Fabien
Bonjour Dead, 

Essaye de charger l'assembly avec cette ligne en renseignant directement le chemin du fichier.
[System.Reflection.Assembly]::LoadFrom("C:\Temp\Oracle.ManagedDataAccess.dll")
 

Connexion ou Créer un compte pour participer à la conversation.

  • ericlm128
  • Visiteur
  • Visiteur
il y a 3 mois 1 semaine #34184 par ericlm128
Réponse de ericlm128 sur le sujet Script PowerShell pour extraction données BDD
Bonjour,

Essaie de vérifie si le fichier est bloqué : renenyffenegger.ch/notes/Windows/PowerSh...noun/file/before.png
Ici il parle d'une mise à jour du TNSNAMES.ORA : stackoverflow.com/questions/13919757/add...-fails-in-powershell

 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 3 semaines #34310 par Dead
Bonjour,

J'ai résolu le souci en faisant cela:

# Débloquer la DLL
Unblock-File -Path "C:\oracle\product\19.0.0\client_1\ODP.NET\managed\common\Oracle.ManagedDataAccess.dll"

# Charger l'assembly Oracle.ManagedDataAccess.Client avec gestion des exceptions
try {
[System.Reflection.Assembly]::LoadFrom("C:\oracle\product\19.0.0\client_1\ODP.NET\managed\common\Oracle.ManagedDataAccess.dll")
Write-Output "DLL chargée avec succès."
} catch {
Write-Output "Erreur lors du chargement de la DLL : $_"
}

# Spécifier les informations de connexion à la base de données Oracle
$oracleHost = "srvsql"
$oraclePort = "1521"
$oracleSID = "SIDuser"
$oracleUser = "User"
$oraclePwd = "password"

# Créer une chaîne de connexion à la base de données Oracle
$oracleConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$oracleHost)(PORT=$oraclePort))(CONNECT_DATA=(SERVICE_NAME=$oracleSID)));User Id=$oracleUser;Password=$oraclePwd;"

# Créer une nouvelle connexion Oracle
$conn = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($oracleConnectionString)

try {
# Ouvrir la connexion
$conn.Open()
Write-Output "Connexion réussie"


Je vous remercie

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.106 secondes
Propulsé par Kunena