8 pièce(s) jointe(s)
Installation d'Oracle avec Docker
bonjour
Voici la méthode d'installation que j'ai utilisée pour installer une version d' Oracle sur Docker (12c, 19c, 21c…) via docker:
La difficulté d’installer la base de données Oracle sur Docker est que les images ne sont pas disponible sur le hub Docker même après vous être connecté. .
Il va falloir ce connecter sur les serveurs Oracles.
Prerequis :Créer un compte sur le registre Docker Oracle et accepter les règles. Accepter les termes et conditions d'Oracle. Sans cette étape, vous ne pourrez pas extraire les images. Sans cette étape, vous ne pourrez pas extraire les images.
Posséder un compte Oracle: https://profile.oracle.com/myprofile...e-account.jspx
Vous pouvez alors obtenir les images à partir du registre d'Oracle Docker à l'adresse
https://container-registry.oracle.com
Pièce jointe 645866
Le choix Database https://container-registry.oracle.co...cr/ba/database
Puis entreprise et je me déplace en bas de la page pour avoir tous les Tags possible:
Pièce jointe 645867
Je lance docker sous window et passe en mode commande sous powershell
Phase N° 1 je me connecte a oracle
Code:
docker login container-registry.oracle.com
Vous verrez des invites pour saisir votre nom d’utilisateur et votre mot de passe Oracle. Si vous saisissez les informations correctement, vous devriez voir le message de connexion
Pièce jointe 645868
j'installe : enterprise:12.2.0.1 trouver sur Oracle
Code:
docker pull container-registry.oracle.com/database/enterprise:12.2.0.1
Les éléments de l’images ce télécharge
Si vous voyez un message d'erreur mentionnant que l'image n'existe pas ou que vous n'en avez pas le droit, c'est vous n'avez probablement pas accepté les termes et conditions d'Oracle.
Pour créer un conteneur de base de données Oracle, exécutez la commande suivante :
Code:
docker run -dit -p 1521:1521 --name oracle_db container-registry.oracle.com/database/enterprise:12.2.0.1
Je définie le nom de la base: oracle_db
Le choix des ports visible à l’extérieur de façon judicieuse en conservant le port interne 1521 d’accès a notre base Oracle12..
Le démarrage du conteneur peut prendre quelques minutes.je surveille le journal en utilisant cette commande :
Code:
docker logs -f oracle_db
Pièce jointe 645870
j'ai téléchargé sqldeveloper avec le compte oracle https://www.oracle.com/database/sqld...gies/download/
Je lance SQLPLUS pour créer des utilisateurs
Code:
docker exec -it oracle_db bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
Pièce jointe 645871
Command SQLPLUS
Code:
connect sys as sysdba;
Il y aura une invite vous demandant un mot de passe, entrez Oradoc_db1
Pièce jointe 645872
Exécutez maintenant les commandes suivantes (une par ligne) pour créer un utilisateur.
Code:
1 2 3
| alter session set "_ORACLE_SCRIPT"=true;
create user db_user identified by db_user_pass;
GRANT ALL PRIVILEGES TO db_user; |
Modifier le script ci-dessus selon vos choix.On va faire simple un utilisateur appelé db_user avec mot de passe db_user_pass
Pièce jointe 645873
je cherche a me connecter avec sqldev et la bug cela ne marche pas
Pièce jointe 645874
j'ai arrêté et relancer la base via docker .
J'ai créer d'autre utilisateur
j'ai toujours le message : ORA 01017 : invalide password logon denied
Nomhote : Nom de la machine ( le problème de l'adresse IP est que celle-ci peut changer.....
port 1521
Même problème avec DBEAVER
Nom de service :ORCLPDB1.localdomain
Utilsation d'une base opérationnel
lorsque je cherche a me connecter sur une base existant Oracle avec sqlalchemy je n'y parvient pas
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| # coding: utf-8
import cx_Oracle as cx
import chardet
from sqlalchemy import Boolean, Column, Date, Float, Text, Integer, String, create_engine ,Index, DateTime, BigInteger, SmallInteger
from sqlalchemy import select ,insert,delete,update ,distinct,cast
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import declarative_base
from sqlalchemy.exc import SQLAlchemyError,IntegrityError
from sqlalchemy.inspection import inspect
from dataclasses import dataclass
import os
from datetime import date, datetime
import pandas as pd
from dataclasses import dataclass
from inflect import engine
import tkinter as tk
from tkinter import filedialog ,messagebox
from tkinter.filedialog import askopenfilename
from sqlalchemy import MetaData
from sqlalchemy import Table
from sqlalchemy.dialects import oracle
from sqlalchemy import create_engine
from sqlalchemy.exc import OperationalError |
solution N°1 Utilise la nouvelle version oracle+oracledb compatible avec SQLALCHEMY 2.0.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| def sqlachemy_Extranet_v2_rec1():
os.environ['NLS_LANG']='FRENCH_FRANCE.UTF8'
serviceName = "nomservice"
hostname = "MonPetitHost"
user = "toto"
port = "1521"
idpass = "azertyuiopq"
idconnection = f"oracle+oracledb://{user}/{idpass}@{hostname}:{port}/{serviceName}"
try:
# Créer le moteur SQLAlchemy
engine = create_engine(idconnection)
# Tester la connexion
with engine.connect() as connection:
# Si la connexion est réussie, imprimer un message
print("Connexion à la base de données Oracle réussie")
return engine
except OperationalError as e:
print(f"Erreur de connexion : {e}")
return None
if __name__ == '__main__':
test2= sqlachemy_Extranet_v2_rec1() |
Code:
1 2 3 4
| erreur :
raise exc_type(_Error(message)) from cause
sqlalchemy.exc.DatabaseError: (oracledb.exceptions.DatabaseError) DPY-4001: no credentials specified
(Background on this error at: https://sqlalche.me/e/20/4xp6) |
solution N°2 Utilise la version oracle+cx_oracle qui est aussi compatible avec SQLALCHEMY 2.0.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| def sqlachemy_Extranet_rec1():
os.environ['NLS_LANG']='FRENCH_FRANCE.UTF8'
serviceName = "nomservice"
hostname = "MonPetitHost"
user = "toto"
port = "1521"
idpass = "azertyuiopq"
idconnection=f"oracle+cx_oracle://{user}:{idpass}@{hostname}:{port}?service_name=<{serviceName}>S&encoding=UTF-8&nencoding=UTF-8"
# oracle+cx_oracle://user:pass@hostname:port[/dbname][?service_name=<service>[&key=value&key=value...]]
try:
# Créer le moteur SQLAlchemy
engine = create_engine(idconnection)
# Tester la connexion
with engine.connect() as connection:
# Si la connexion est réussie, imprimer un message
print("Connexion à la base de données Oracle réussie")
return engine
except OperationalError as e:
print(f"Erreur de connexion : {e}")
return None
if __name__ == '__main__':
test1 = sqlachemy_Extranet_rec1() |
Code:
1 2 3
| erreur :
sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-12514: TNS : le processus d'écoute ne connaît pas actuellement le service demandé dans le descripteur de connexion
(Background on this error at: https://sqlalche.me/e/20/4xp6) |
A note je n'ai aucun paramètrage de TNS . pas de fichier tnsname.ora sur le PS
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
def connexion_Extranet_rec1():
os.environ['NLS_LANG']='FRENCH_FRANCE.UTF8'
serviceName = "nomservice"
hostname = "MonPetitHost"
user = "toto"
port = "1521"
idpass = "azertyuiopq"
idconnection = f"{user}/{idpass}@{hostname}:{port}/{serviceName}"
connection = cx.connect(idconnection)
version_du_pilote = cx.clientversion()
messagebox.showinfo("Connexion Oracle ","Version du pilote :" + str(version_du_pilote))
curseur = connection.cursor()
return curseur
if __name__ == '__main__':
Text3 = connexion_Extranet_rec1() |
Seule la méthode d'accces possible est celle qui ne s'appuye pas sur sqlachemy
Une idée ?