Question
Connexion base oracle
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 16 ans 7 mois #5064
par Burgun
Connexion base oracle a été créé par Burgun
Bonjour,
Mes connaissances en powershell sont très limitées.
J'essaye de transformer un script à l'origine en Perl, en powershell.
Le but de ce script est de se connecter à une base oracle sur un serveur distant, d'y exécuter une requête permettant de lister les verrous posés sur une base.
Je n'y connais rien du tout en oracle.
Alors vous voyez ma difficulté.
D'après les exemples que j'ai pu trouver, j'en suis arrivé à ce code
[code:1]
#Création de la variable connectionString contenant la chaine de connexion à la base de données
$connectionString = “Data Source=mabase;User Id=monlogin;Password=monpassword;Integrated Security=no”
#Chargement de l’unité de déploiement (assembly) qui permet de créer des objets type \"OracleConnection\"
[System.Reflection.Assembly]::LoadWithPartialName(”System.Data.OracleClient”)
#Création de l'objet OracleConnection avec comme paramètre la chaine créée précédemment.
$connection = New-Object System.Data.OracleClient.OracleConnection($connectionString)
#Création de la requete à éxécuter
$queryString = “Select count(*),sum(case when status='ACTIVE' then 1 else 0 end),
sum(case when USER#>0 then 1 else 0 end),
sum(case when USER#>0 and status='ACTIVE' then 1 else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' then 1 else 0 end),
max(case when lockwait is not null and USER#>0 and status='ACTIVE' then LAST_CALL_ET else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' and LAST_CALL_ET > 120 then 1 else 0 end)
From v\$session”
#Création de l'objet OracleCommand avec comme paramètres la variable contenant la requête ainsi que notre objet connection.
$command = new-Object System.Data.OracleClient.OracleCommand($queryString, $connection)
#ouverture de la connexion vers la base
$connection.Open()
#Exécution de la commande et rangement du résultat dans une variable
$resultat = $command.ExecuteScalar()
#Fermeture de la connexion
$connection.Close()
[/code:1]
La requete SQL est directement issu de ce qui ce trouve dans le script Perl d'origine.
Bien entendu mon script ne fonctionne pas. Je ne comprend déjà pas ou je peux indiquer le serveur distant à interrogger. Car si je précise bien la base, comment lui indiquer le serveur sur laquelle elle est installé ?
Message édité par: bvivi57, à: 12/08/09 11:38
Message édité par: bvivi57, à: 12/08/09 11:38
Message édité par: bvivi57, à: 12/08/09 11:39
Message édité par: bvivi57, à: 12/08/09 11:40<br><br>Message édité par: bvivi57, à: 12/08/09 11:47
Mes connaissances en powershell sont très limitées.
J'essaye de transformer un script à l'origine en Perl, en powershell.
Le but de ce script est de se connecter à une base oracle sur un serveur distant, d'y exécuter une requête permettant de lister les verrous posés sur une base.
Je n'y connais rien du tout en oracle.
Alors vous voyez ma difficulté.
D'après les exemples que j'ai pu trouver, j'en suis arrivé à ce code
[code:1]
#Création de la variable connectionString contenant la chaine de connexion à la base de données
$connectionString = “Data Source=mabase;User Id=monlogin;Password=monpassword;Integrated Security=no”
#Chargement de l’unité de déploiement (assembly) qui permet de créer des objets type \"OracleConnection\"
[System.Reflection.Assembly]::LoadWithPartialName(”System.Data.OracleClient”)
#Création de l'objet OracleConnection avec comme paramètre la chaine créée précédemment.
$connection = New-Object System.Data.OracleClient.OracleConnection($connectionString)
#Création de la requete à éxécuter
$queryString = “Select count(*),sum(case when status='ACTIVE' then 1 else 0 end),
sum(case when USER#>0 then 1 else 0 end),
sum(case when USER#>0 and status='ACTIVE' then 1 else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' then 1 else 0 end),
max(case when lockwait is not null and USER#>0 and status='ACTIVE' then LAST_CALL_ET else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' and LAST_CALL_ET > 120 then 1 else 0 end)
From v\$session”
#Création de l'objet OracleCommand avec comme paramètres la variable contenant la requête ainsi que notre objet connection.
$command = new-Object System.Data.OracleClient.OracleCommand($queryString, $connection)
#ouverture de la connexion vers la base
$connection.Open()
#Exécution de la commande et rangement du résultat dans une variable
$resultat = $command.ExecuteScalar()
#Fermeture de la connexion
$connection.Close()
[/code:1]
La requete SQL est directement issu de ce qui ce trouve dans le script Perl d'origine.
Bien entendu mon script ne fonctionne pas. Je ne comprend déjà pas ou je peux indiquer le serveur distant à interrogger. Car si je précise bien la base, comment lui indiquer le serveur sur laquelle elle est installé ?
Message édité par: bvivi57, à: 12/08/09 11:38
Message édité par: bvivi57, à: 12/08/09 11:38
Message édité par: bvivi57, à: 12/08/09 11:39
Message édité par: bvivi57, à: 12/08/09 11:40<br><br>Message édité par: bvivi57, à: 12/08/09 11:47
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 7 mois #5066
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Connexion base oracle
Salut,
Tu peux touver qq infos ici :
www.oracle.com/technology/pub/articles/cook_dotnet.html
Sous Oracle on ne précise pas un nom de serveur mais un alias présent dans le fichier de config tnsname.ora.
Ainsi on peut changer le nom du serveur sans avoir à modifier le code.
Pour la requête j'utiliserais plutot une here-string :
[code:1]
$queryString = @'
Select count(*),sum(case when status='ACTIVE' then 1 else 0 end),
sum(case when USER#>0 then 1 else 0 end),
sum(case when USER#>0 and status='ACTIVE' then 1 else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' then 1 else 0 end),
max(case when lockwait is not null and USER#>0 and status='ACTIVE' then LAST_CALL_ET else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' and LAST_CALL_ET > 120 then 1 else 0 end)
From v$session
'@
[/code:1]
Perl utilise, il me semble, le caratère slash comme caractère d'échappement.<br><br>Message édité par: Laurent Dardenne, à: 13/08/09 09:12
Tu peux touver qq infos ici :
www.oracle.com/technology/pub/articles/cook_dotnet.html
Sous Oracle on ne précise pas un nom de serveur mais un alias présent dans le fichier de config tnsname.ora.
Ainsi on peut changer le nom du serveur sans avoir à modifier le code.
Pour la requête j'utiliserais plutot une here-string :
[code:1]
$queryString = @'
Select count(*),sum(case when status='ACTIVE' then 1 else 0 end),
sum(case when USER#>0 then 1 else 0 end),
sum(case when USER#>0 and status='ACTIVE' then 1 else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' then 1 else 0 end),
max(case when lockwait is not null and USER#>0 and status='ACTIVE' then LAST_CALL_ET else 0 end),
sum(case when lockwait is not null and USER#>0 and status='ACTIVE' and LAST_CALL_ET > 120 then 1 else 0 end)
From v$session
'@
[/code:1]
Perl utilise, il me semble, le caratère slash comme caractère d'échappement.<br><br>Message édité par: Laurent Dardenne, à: 13/08/09 09:12
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 16 ans 7 mois #5071
par Burgun
Réponse de Burgun sur le sujet Re:Connexion base oracle
Merci pour ton aide.
Ca va compliquer les choses. Je doit donc installer les outils clients oracle sur le poste d'ou je veux lancer mon script.
En plus, ce script doit taper dans plusieurs bases hébergés sur plusieurs serveurs différents.
Tant pis!
Merci en tous cas pour ton aide
Ca va compliquer les choses. Je doit donc installer les outils clients oracle sur le poste d'ou je veux lancer mon script.
En plus, ce script doit taper dans plusieurs bases hébergés sur plusieurs serveurs différents.
Tant pis!
Merci en tous cas pour ton aide
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 7 mois #5072
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Connexion base oracle
bvivi57 écrit:
Pour le poste le client Oracle suffit, les outils sont destinés aux admins/DBA/développeurs. Utiles si tes besoins évoluent.
bvivi57 écrit:
Il suffit que ton fichier tnsnames référence les serveurs & instances ciblées.
Le fichier tnsname est le + souvent géré par les DBA et déployé sur tous les postes d'une infrastructure utilisant des bases Oracle.
Je ne comprends pas, qu'est-ce qui va compliquer les choses ?Ca va compliquer les choses.
Pour le poste le client Oracle suffit, les outils sont destinés aux admins/DBA/développeurs. Utiles si tes besoins évoluent.
bvivi57 écrit:
Dans ce cas une itération en modifiant la chaîne de connexion est possible.En plus, ce script doit taper dans plusieurs bases hébergés sur plusieurs serveurs différents.
Il suffit que ton fichier tnsnames référence les serveurs & instances ciblées.
Le fichier tnsname est le + souvent géré par les DBA et déployé sur tous les postes d'une infrastructure utilisant des bases Oracle.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Connexion base oracle