ORACLE – ORA-01033 : ORACLE initialization or shutdown in progress

Pour résoudre ce soucis, il faut ouvrir un terminal sur le serveur, puis lancer les commandes ci-dessous:

set ORACLE_SID=instanceDeVotreOracle
sqlplus /nolog

Puis se connecter en sysdba

connect / as sysdba

Si cela ne fonctionne pas il faut spécifier un compte comme ci-dessous :

connect sys/motdepasse@instanceDeVotreOracle as sysdba

Une fois la connexion réussie, il faut exécuter les commandes ci-dessous :

startup mount;show parameter control_files;select a.member,a.group#,b.status from v$logfile a ,v$log b where a.group#=b.group# and b.status='CURRENT';

Il faut noter le résultat du select car il donnera le fichier redolog à utiliser pour remettre en marche la base. Puis il faut exécuter les commandes suivantes :

shutdown abort;startup mount;recover database using backup controlfile until cancel ;

Cette commande demande le nom du fichier à utiliser, il faut lui donner le nom du fichier récupérer précédemment. Puis lancer cette commande :

alter database open resetlogs;

Et voilà normalement la base fonctionne à nouveau.

Ubuntu 18.04 : installation de l’extension oci (oracle) pour php7.2

Pour installer l’extension oci (oracle) pour php7.2, il faut avant avoir installer apache, php-7.2. Puis se rendre sur ce site http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html puis télécharger ces 2 paquets

instantclient-basic-linux.x64-12.2.0.1.0.zip
instantclient-sdk-linux.x64-12.2.0.1.0.zip

Puis les envoyer sur le serveur (avec ssh, ou winscp) dans le dossier /tmp, il faut ensuite unzip les 2 zip. Ensuite, il faut déplacer les fichiers dans le dossier /opt

mkdir /opt/oracle/
mv /tmp/instantclient_12_2/ /opt/oracle

Il faut créer les liens symboliques

ln -s /opt/oracle/instantclient_12_2/libclntsh.so.12.1 /opt/oracle/instantclient_12_2/libclntsh.so 
ln -s /opt/oracle/instantclient_12_2/libocci.so.12.1 /opt/oracle/instantclient_12_2/libocci.so

Il faut donner les droits sur le répertoire

chown -R root:www-data /opt/oracle

Puis ajouter les librairies dans le ldconfig

echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient 
ldconfig

Il faut ensuite les paquets suivant (requis pour pecl)

apt install php7.2-dev php-pear build-essential libaio1

Puis il faut installer oci8 via pecl

pecl install oci8

A la question concernant le chemin, il faut répondre ceci

instantclient,/opt/oracle/instantclient_12_2

Il faut ensuite modifier les fichiers php.ini pour ajouter l’extension

nano /etc/php/7.2/apache2/php.ini

y ajouter dans dynamic extension

extension = oci8.so
nano /etc/php/7.2/cli/php.ini

y ajouter dans dynamic extension

extension = oci8.so

Il faut ensuite ajouter les variables d’environnement pour cli

echo "LD_LIBRARY_PATH=\"/opt/oracle/instantclient_12_2\"" >> /etc/environment
echo "ORACLE_HOME=\"/opt/oracle/instantclient_12_2\"" >> /etc/environment

Puis celles d’apache

echo "export LD_LIBRARY_PATH=\"/opt/oracle/instantclient_12_2\"" >> /etc/apache2/envvars
echo "export ORACLE_HOME=\"/opt/oracle/instantclient_12_2\"" >> /etc/apache2/envvars

Il faut ensuite redemarrer la machine pour prendre en compte les variables d’environnement de cli

sudo reboot

 

 

Installation du plugin logstash-input-jdbc

L’installation du plugin logstash-input-jdbc permet d’indexer des tables de base de données avec l’aide de logstash. Il faut préalablement avoir installer la stack elastic, le tuto se trouve sur mon blog.

Le serveur utilisé est un Ubuntu 16.04 64bits LTS.

Il faut se rendre dans ce répertoire

cd /usr/share/logstash/bin/
Et taper la commande ci-dessous
./logstash-plugin install logstash-input-jdbc
Une fois le plugin installé vous pourrez ensuite suivre les procédures pour la configuration de la connexion avec les différentes base de données
Mysql
Mssql Server
Oracle

Configuration de logstash et oracle

Pour pouvoir récupérer les données d’une base de données oracle via logstash, il faut avoir installer le plugin logstash-input-jdbc (voir le tuto). Puis récupérer le connecteur java et le copier.

Installation du connecteur

L’opération n’est à faire qu’une seule fois.

Tout d’abord, il faut créer le dossier qui accueillera le connecteur

 mkdir -p /usr/share/logstash/vendor/jdbc-oracle

Ensuite, il faut télécharger le connecteur via le site ci-dessous et copier le fichier  ojdbc8.jar (le nom du fichier peut changer selon la version téléchargée, il faut utiliser le connecteur pour java8) dans le dossier créé ci-dessus.

http://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html

Une fois le fichier dans son répertoire, il faut ensuite modifier les droits

/usr/share/logstash/vendor/jdbc-oracle
chown logstash:logstash /usr/share/logstash/vendor/jdbc-oracle -Rvf

A partir de ce moment vous pouvez créer un fichier de configuration pour connecter une table oracle à logstash.

Création d’un fichier de configuration

nano /etc/logstash/conf.d/config_oracle_nomdematable.config

Et y mettre le contenu ci-dessous

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/vendor/jdbc-oracle/ojdbc8.jar"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@ipduserveur:port/nomdelabase"
    jdbc_user => "utilisateurquipeutseconnecter"
    jdbc_password => "motdepasse"
    statement => "SELECT * FROM nomdelatable"
  }
}
output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "nomdelatable"
    document_type => "nomdelatable"
    document_id => "%{id}"
  }
}
Il faut penser à modifier les informations de connexion à la base de données.
Le champ document_id => « %{id} » est à adapter en fonction de votre table dans mon cas la clef primaire est id.
Une fois le fichier créé, il faut ensuite exécuter la commande ci-dessous pour lancer l’indexation.
cd /usr/share/logstash/bin
./logstash -f /etc/logstash/conf.d/config_oracle_nomdelatable.config
Une fois les commandes lancées, selon la taille de la table, il faudra peut être attendre un peu.