Imprimer Imprimer

L’erreur ORA-1034

Divers, Musée des erreurs pas de Commentaire »

ORA-1034 Base Oracle non disponible
ORA-1034 Oracle not available

mots clés

ORA-1034, Oracle 0RA-1034 error, erreur Oracle ORA-1034, erreur Oracle 1034, connexion oracle impossible, oracle non disponible, impossible de se connecter, environnement Oracle, ORACLE_SID, startup,

Description du problème

C’est un problème de disponibilité de la base Oracle ? partir d’un client. Le client peut être un programme utilisateur, une application de gestion, ou un client Oracle : SQL*Plus, export (exp) , import (imp), SQL*Loader, etc.
Concrètement il est impossible de se connecter ? la base….
Ce n’est pas un problème de connexion réseau ou SQL*Net, ou Oracle Net Services, ceux ci déclenchent des erreurs spécifiques (voir plus loin).
A preuve cette erreur peut survenir même si l’on est connecté directement sur le serveur hébergeant la base Oracle, sans utiliser aucune couche réseau.
Cette erreur peut en général avoir 2 causes : soit la base Oracle n’est pas démarrée, soit elle est incorrectement identifiée et le client ne la trouve pas !

Tests

remarque : pour effectuer ces tests on doit au moins savoir quel est le nom de la base (l’identifiant) que l’on veut atteindre
- Se connecter directement au serveur
sous Unix / Linux : telnet ou SSH ,
sous Windows : prise de main a distance ou ouverture d’une session directe sur le serveur
- Vérifier que la base cible est démarrée
sous Unix / Linux : ps -ef|grep oracle et rechercher les process de fond standards d’Oracle (au moins dbwr, lgwr, smon, pmon) suffixés par le nom de la base.
sous Windows : ? partir de panneau de configuration, vérifier dans la liste des services, qu’il existe au moins un service qui s’appelle ‘oracle_NOM_DE_LA_BASE et qu’il est démarré.

Diagnostic

cas 1 : Si la base est démarrée, alors c’est qu’elle est mal identifiée par le client, et que le problème est au niveau de l’environnement du système d’exploitation client
cas 2 : Si la base n’est pas démarrée …il faut la démarrer

Résolution de l’erreur ORA-1034

cas 1 : modififier l’identification de la base.
sous Unix / Linux : export ORACLE_SID = nom_de_la_base
sous Windows : modifier la variable ORACLE_SID, sous DOS, avec la commande SET ORACLE_SID = nom_de_la_base
ou modifier la base de registre avec regedit (software \ oracle \ ORACLE_HOME \ ORACLE_SID) avec la bonne valeur
cas 2 :
vérifier que l’environnement est correct (ORACLE_SID) sinon le positionner commeau paragraphe précédent
arreter la base par sécurité (il se pourrait qu’elle soit dans un état intermédiaire, et que tous les process ne soient pa démarrés)
puis la redémarrer en utilisant sqlplus :
$ sqlplus /nolog
SQL connect sys as sysdba
SQL shutdown abort
SQL startup
vérifier que les process ou le service démarrent correctement

Imprimer Imprimer

Introduction PHP / MySQL

Divers pas de Commentaire »

A l’instar d’Oracle , MySQL peut être accédée grace ? 2 extensions PHP différentes :

* l’extension standard ‘mysql‘ (ensemble de fonctions préfixées par mysql_)
* l’extension améliorée ou Improved MySQL extension ‘mysqli‘ (ensemble de fonctions préfixées par mysqli_)

l’extension standard ‘mysql’

Cette extension souvent associé ? la version basique du moteur MySQL, utilise 2 ressources principales :

* un identifiant de connexion
* un ensemble de lignes résultats (si le SQL est un SELECT bien sûr) : le result set

Les ordres SQL sont exécutés directement sans phase de préparation (parsing, bind), et non pas comme dans le cas général d’un accès aux BDs via un langage de script.

il n’y a pas non plus de gestion explicite de transaction (commit, rollback) réservée ? la version PRO. Les mises ? jour seront par défaut AUTOCOMMITées

Voici d’après le site officiel PHP, la liste complètes des fonctions de l’extension ‘mysql’ en PHP5

mysql_affected_rows — Retourne le nombre de lignes affectées lors de la dernière opération MySQL
mysql_change_user — Change le nom de l’utilisateur de la connexion active
mysql_client_encoding — Retourne le nom du jeu de caractères utilisé par le client MySQL
mysql_close — Ferme la connexion MySQL
mysql_connect — Ouvre une connexion ? un serveur MySQL
mysql_create_db — Crée une base de données MySQL
mysql_data_seek — Déplace le pointeur interne de résultat MySQL
mysql_db_name — Lit les noms des bases de données
mysql_db_query — Envoie une requête MySQL ? un serveur MySQL
mysql_drop_db — Efface une base de données MySQL
mysql_errno — Retourne le numéro d’erreur de la dernière commande MySQL
mysql_error — Retourne le texte associé avec l’erreur générée lors de la dernière requête
mysql_escape_string — Protège une chaîne pour la passer ? mysql_query
mysql_fetch_array — Retourne une ligne de résultat MySQL sous la forme d’un tableau associatif, d’un tableau indexé, ou les deuxmysql_fetch_assoc — Lit une ligne de résultat MySQL dans un tableau associatif
mysql_fetch_field — Retourne les données enregistrées dans une colonne MySQL sous forme d’objet
mysql_fetch_lengths — Retourne la taille de chaque colonne d’une ligne de résultat MySQL
mysql_fetch_object — Retourne une ligne de résultat MySQL sous la forme d’un objet
mysql_fetch_row — Retourne une ligne de résultat MySQL sous la forme d’un tableau
mysql_field_flags — Retourne des détails sur une colonne MySQL
mysql_field_len — Retourne la taille d’un champ de résultat MySQL
mysql_field_name — Retourne le nom d’une colonne dans un résultat MySQL
mysql_field_seek — Déplace le pointeur de résultat vers une position donnée
mysql_field_table — Retourne le nom de la table MySQL où se trouve une colonne
mysql_field_type — Retourne le type d’une colonne MySQL spécifique
mysql_free_result — Libère le résultat de la mémoire
mysql_get_client_info — Lit les informations sur le client MySQL
mysql_get_host_info — Lit les informations sur l’hôte MySQL
mysql_get_proto_info — Lit les informations sur le protocole MySQL
mysql_get_server_info — Lit les informations sur le serveur MySQL
mysql_info — Lit des informations ? propos de la dernière requête MySQL
mysql_insert_id — Retourne l’identifiant généré par la dernière requête INSERT MySQL
mysql_list_dbs — Liste les bases de données disponibles sur le serveur MySQL
mysql_list_fields — Liste les champs d’une table MySQL
mysql_list_processes — Liste les processus MySQL
mysql_list_tables — Liste les tables d’une base de données MySQL
mysql_num_fields — Retourne le nombre de champs d’un résultat MySQL
mysql_num_rows — Retourne le nombre de lignes d’un résultat MySQL
mysql_pconnect — Ouvre une connexion persistante ? un serveur MySQL
mysql_ping — Pingue le serveur MySQL, et s’y reconnecte au besoin
mysql_query — Envoi une requête ? un serveur MySQL
mysql_real_escape_string — Protège les caractères spéciaux d’une commande SQL
mysql_result — Retourne un champ d’un résultat MySQL
mysql_select_db — Sélectionne une base de données MySQL
mysql_stat — Retourne le statut courant du serveur MySQL
mysql_tablename — Lit le nom de la table qui contient un champ
mysql_thread_id — Retourne l’identifiant du thread MySQL courant
mysql_unbuffered_query — Exécute une requête SQL sans mobiliser les résultats MySQL

Afin d’y voir plus clair, nous allons tenter de les regrouper par types d’opération ou de fonctionnalités
Taxinomie des fonctions MySQL de PHP
connexion mysql_connect, mysql_connect, mysql_close, mysql_ping, (my_sql_select_db, mysql_change_user)
gestion d’erreurs mysql_error, mysql_errno
méta données DB

mysql_field_flags, mysql_field_name, mysql_field_len, mysql_field_table, mysql_field_type, mysql_list_fields, mysql_info, mysql_insert_id,

mysql__num_rows

mysql_list_tables, mysql_table_name
méta données Serveur

mysql_client_encoding, mysql_get_client_info, mysql_get_host_info, mysql_get_proto_info, mysql_get_server_info,

mysql_list_dbs, mysql_ list_processes, mysql_stat, mysql_thread_id
lecture lignes mysql_fetch_array, mysql_fetch_result_row, mysql_fetch_assoc, mysql_fetch_field, mysql_fetch_lengths, mysql_fetch_object, mysql_fetch_row,
execution SQL mysql_drop_db, mysql_db_query, mysql_query, mysql_unbuffered_query

l’extension améliorée ‘mysqli’

Cette extension souvent associé ? la version PRO du moteur MySQL, utilise 3 ressources principales :

* un identifiant de connexion
* un ordre SQL ‘préparé’ explicitement
* un ensemble de lignes résultats (si le SQL est un SELECT bien sûr) : le result set

Les principales fonctionnalités supplémentaires sont les suivantes :

* phase d’analyse préalable des ordres SQL (parsing) que l’on peut éviter de ré exécuter lors d’ordres SQL récurrents ou simililaires
* gestion de pramètres d’entrées associées ? des variables PHP : bind variables
* gestion de transaction (commit, rollback)
* accès direct dans le résult set
* gestion d’erreur et debugging amélioré

PHP5 étant fortement orienté objet, 3 classes prédéfinies sont fournies, qui peuvent agréablement pour les adeptes de la P.O.O se substituer aux fonctions classiques. :

* mysqli : une classe de connexion
* mysqli_statement : une classe pour la gestion de ordres SQL (éventueelemnt ‘préparés’)
* mysqli_result_set : une classe pour la gestion du résultat (lignes ramenées par le SELECT)

La liste complète des fonction de l’extension mysqli ainsi que la description détaillée des méthodes des classes prédéfinies est accessible dans la doc officielle de mysqli sur PHP.net

pour finir, INFOS INTERESSANTES SUR LE SUJET sur le site PHP MYSQL TUTORIAL